Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -336,6 +336,16 @@ func detectBedenGroupGo(bedenList []string, ana, alt string) string {
|
|||||||
ana = normalizeTextForMatchGo(ana)
|
ana = normalizeTextForMatchGo(ana)
|
||||||
alt = normalizeTextForMatchGo(alt)
|
alt = normalizeTextForMatchGo(alt)
|
||||||
|
|
||||||
|
isYetiskin := strings.Contains(alt, "YETISKIN") || strings.Contains(alt, "YETISKIN/GARSON")
|
||||||
|
isGomlekKlasikOrAtayaka := strings.Contains(ana, "GOMLEK KLASIK") ||
|
||||||
|
strings.Contains(ana, "GOMLEK ATA YAKA") ||
|
||||||
|
strings.Contains(ana, "GOMLEK ATAYAKA")
|
||||||
|
// Özel kural:
|
||||||
|
// Kategorisi YETISKIN ve ana grubu GOMLEK KLASIK/ATA YAKA olanlar "gom" grubunda raporlanır.
|
||||||
|
if isYetiskin && isGomlekKlasikOrAtayaka {
|
||||||
|
return catGom
|
||||||
|
}
|
||||||
|
|
||||||
// Beden seti çocuk yaş formatındaysa metadata beklemeden "yas" aç.
|
// Beden seti çocuk yaş formatındaysa metadata beklemeden "yas" aç.
|
||||||
yasNums := map[string]bool{"2": true, "4": true, "6": true, "8": true, "10": true, "12": true, "14": true}
|
yasNums := map[string]bool{"2": true, "4": true, "6": true, "8": true, "10": true, "12": true, "14": true}
|
||||||
if len(bedenList) > 0 {
|
if len(bedenList) > 0 {
|
||||||
|
|||||||
@@ -2689,7 +2689,7 @@ async function onModelChange(modelCode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!bedenGrpKey) {
|
if (!bedenGrpKey) {
|
||||||
const anaN = String(form.urunAnaGrubu || '')
|
const anaNRaw = String(form.urunAnaGrubu || '')
|
||||||
.normalize('NFD')
|
.normalize('NFD')
|
||||||
.replace(/[\u0300-\u036f]/g, '')
|
.replace(/[\u0300-\u036f]/g, '')
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
@@ -2704,6 +2704,10 @@ async function onModelChange(modelCode) {
|
|||||||
.replace(/[\u0300-\u036f]/g, '')
|
.replace(/[\u0300-\u036f]/g, '')
|
||||||
.toLowerCase()
|
.toLowerCase()
|
||||||
.trim()
|
.trim()
|
||||||
|
const anaN =
|
||||||
|
(katN.includes('yetiskin') && anaNRaw.includes('gomlek klasik'))
|
||||||
|
? anaNRaw.replace('gomlek klasik', 'gomlek ata yaka')
|
||||||
|
: anaNRaw
|
||||||
|
|
||||||
const hasGarsonMeta =
|
const hasGarsonMeta =
|
||||||
anaN.includes('garson') ||
|
anaN.includes('garson') ||
|
||||||
@@ -2862,6 +2866,10 @@ const onSaveOrUpdateRow = async () => {
|
|||||||
|
|
||||||
recalcVat: typeof recalcVat === 'function' ? recalcVat : null,
|
recalcVat: typeof recalcVat === 'function' ? recalcVat : null,
|
||||||
resetEditor: typeof resetEditor === 'function' ? resetEditor : null,
|
resetEditor: typeof resetEditor === 'function' ? resetEditor : null,
|
||||||
|
loadProductSizes: async () => {
|
||||||
|
await orderStore.loadProductSizes(form, true, $q, productCache)
|
||||||
|
await loadOrderInventory(true)
|
||||||
|
},
|
||||||
|
|
||||||
// gerekiyorsa pass edebilirsin (store tarafında zaten optional)
|
// gerekiyorsa pass edebilirsin (store tarafında zaten optional)
|
||||||
stockMap,
|
stockMap,
|
||||||
@@ -2910,6 +2918,10 @@ const onSaveAndNextColor = async () => {
|
|||||||
form,
|
form,
|
||||||
recalcVat: typeof recalcVat === 'function' ? recalcVat : null,
|
recalcVat: typeof recalcVat === 'function' ? recalcVat : null,
|
||||||
resetEditor: () => {},
|
resetEditor: () => {},
|
||||||
|
loadProductSizes: async () => {
|
||||||
|
await orderStore.loadProductSizes(form, true, $q, productCache)
|
||||||
|
await loadOrderInventory(true)
|
||||||
|
},
|
||||||
stockMap,
|
stockMap,
|
||||||
$q
|
$q
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1685,18 +1685,32 @@ export const useOrderEntryStore = defineStore('orderentry', {
|
|||||||
|
|
||||||
const overLimit = []
|
const overLimit = []
|
||||||
for (let i = 0; i < bedenLabels.length; i++) {
|
for (let i = 0; i < bedenLabels.length; i++) {
|
||||||
const lbl = String(bedenLabels[i] ?? '').trim()
|
const rawLbl = String(bedenLabels[i] ?? '')
|
||||||
const stok = Number(stockMapLocal?.[lbl] ?? 0)
|
const lbl = rawLbl.trim() === '' ? ' ' : rawLbl
|
||||||
|
const hasExactKey = Object.prototype.hasOwnProperty.call(stockMapLocal || {}, lbl)
|
||||||
|
const hasTrimKey = Object.prototype.hasOwnProperty.call(stockMapLocal || {}, rawLbl.trim())
|
||||||
|
const stokRaw = hasExactKey
|
||||||
|
? stockMapLocal?.[lbl]
|
||||||
|
: hasTrimKey
|
||||||
|
? stockMapLocal?.[rawLbl.trim()]
|
||||||
|
: undefined
|
||||||
|
const stok = Number(stokRaw ?? 0)
|
||||||
const girilen = Number(bedenValues?.[i] ?? 0)
|
const girilen = Number(bedenValues?.[i] ?? 0)
|
||||||
|
|
||||||
if (stok > 0 && girilen > stok) {
|
// Stok 0 veya stok kaydı yokken giriş yapılırsa da uyarı ver.
|
||||||
overLimit.push({ beden: lbl, stok, girilen })
|
if (girilen > 0 && girilen > stok) {
|
||||||
|
overLimit.push({
|
||||||
|
beden: lbl,
|
||||||
|
stok,
|
||||||
|
girilen,
|
||||||
|
stokKaydiVar: hasExactKey || hasTrimKey
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (overLimit.length && $q) {
|
if (overLimit.length && $q) {
|
||||||
const msg = overLimit
|
const msg = overLimit
|
||||||
.map(x => `• <b>${x.beden}</b>: ${x.girilen} (Stok: ${x.stok})`)
|
.map(x => `• <b>${x.beden}</b>: ${x.girilen} (Stok: ${x.stokKaydiVar ? x.stok : 'kayıt yok'})`)
|
||||||
.join('<br>')
|
.join('<br>')
|
||||||
|
|
||||||
const stokOK = await new Promise(resolve => {
|
const stokOK = await new Promise(resolve => {
|
||||||
@@ -3617,6 +3631,21 @@ export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = ''
|
|||||||
? bedenList.map(v => (v || '').toString().trim().toUpperCase())
|
? bedenList.map(v => (v || '').toString().trim().toUpperCase())
|
||||||
: [' ']
|
: [' ']
|
||||||
|
|
||||||
|
const rawAna = normalizeTextForMatch(urunAnaGrubu || '')
|
||||||
|
const rawKat = normalizeTextForMatch(urunKategori || '')
|
||||||
|
const rawYetiskinGarson = normalizeTextForMatch(yetiskinGarson || '')
|
||||||
|
const isYetiskin = rawKat.includes('YETISKIN')
|
||||||
|
const isGomlekKlasikOrAtayaka =
|
||||||
|
rawAna.includes('GOMLEK KLASIK') ||
|
||||||
|
rawAna.includes('GOMLEK ATA YAKA') ||
|
||||||
|
rawAna.includes('GOMLEK ATAYAKA')
|
||||||
|
|
||||||
|
// Özel kural:
|
||||||
|
// Kategorisi YETISKIN ve ana grubu GOMLEK KLASIK/ATA YAKA olanlar her zaman "gom" grubundadır.
|
||||||
|
if (isYetiskin && isGomlekKlasikOrAtayaka) {
|
||||||
|
return 'gom'
|
||||||
|
}
|
||||||
|
|
||||||
// Beden seti çocuk yaş formatındaysa metadata beklemeden "yas" aç.
|
// Beden seti çocuk yaş formatındaysa metadata beklemeden "yas" aç.
|
||||||
// Örn: 2,4,6,8,10,12,14 veya 2Y,4Y,6Y...
|
// Örn: 2,4,6,8,10,12,14 veya 2Y,4Y,6Y...
|
||||||
const yasNums = new Set(['2', '4', '6', '8', '10', '12', '14'])
|
const yasNums = new Set(['2', '4', '6', '8', '10', '12', '14'])
|
||||||
@@ -3626,18 +3655,19 @@ export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = ''
|
|||||||
return 'yas'
|
return 'yas'
|
||||||
}
|
}
|
||||||
|
|
||||||
const rawAna = normalizeTextForMatch(urunAnaGrubu || '')
|
const isYetiskinGomlekKlasik = isYetiskin && rawAna.includes('GOMLEK KLASIK')
|
||||||
const rawKat = normalizeTextForMatch(urunKategori || '')
|
const mappedRawAna = isYetiskinGomlekKlasik
|
||||||
const rawYetiskinGarson = normalizeTextForMatch(yetiskinGarson || '')
|
? rawAna.replace('GOMLEK KLASIK', 'GOMLEK ATA YAKA')
|
||||||
|
: rawAna
|
||||||
|
|
||||||
// Ozel kural:
|
// Ozel kural:
|
||||||
// YETISKIN/GARSON = GARSON ve URUN ANA GRUBU "GOMLEK ATA YAKA" veya "GOMLEK KLASIK" ise
|
// YETISKIN/GARSON = GARSON ve URUN ANA GRUBU "GOMLEK ATA YAKA" veya "GOMLEK KLASIK" ise
|
||||||
// sonuc "yas" olmalidir.
|
// sonuc "yas" olmalidir.
|
||||||
const isGarsonGomlekAnaGrubu =
|
const isGarsonGomlekAnaGrubu =
|
||||||
rawAna.includes('GOMLEK ATAYAKA') ||
|
mappedRawAna.includes('GOMLEK ATAYAKA') ||
|
||||||
rawAna.includes('GOMLEK ATA YAKA') ||
|
mappedRawAna.includes('GOMLEK ATA YAKA') ||
|
||||||
rawAna.includes('GOMLEK KLASIK')
|
mappedRawAna.includes('GOMLEK KLASIK')
|
||||||
const hasGarsonSignal = rawAna.includes('GARSON') || rawKat.includes('GARSON') || rawYetiskinGarson.includes('GARSON')
|
const hasGarsonSignal = mappedRawAna.includes('GARSON') || rawKat.includes('GARSON') || rawYetiskinGarson.includes('GARSON')
|
||||||
if (isGarsonGomlekAnaGrubu && (rawKat.includes('GARSON') || rawYetiskinGarson.includes('GARSON'))) {
|
if (isGarsonGomlekAnaGrubu && (rawKat.includes('GARSON') || rawYetiskinGarson.includes('GARSON'))) {
|
||||||
return 'yas'
|
return 'yas'
|
||||||
}
|
}
|
||||||
@@ -3650,7 +3680,7 @@ export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = ''
|
|||||||
const harfliBedenler = ['XS','S','M','L','XL','2XL','3XL','4XL','5XL','6XL','7XL']
|
const harfliBedenler = ['XS','S','M','L','XL','2XL','3XL','4XL','5XL','6XL','7XL']
|
||||||
if (list.some(b => harfliBedenler.includes(b))) return 'gom'
|
if (list.some(b => harfliBedenler.includes(b))) return 'gom'
|
||||||
|
|
||||||
const ana = normalizeTextForMatch(urunAnaGrubu || '')
|
const ana = mappedRawAna
|
||||||
.trim()
|
.trim()
|
||||||
.replace(/\(.*?\)/g, '')
|
.replace(/\(.*?\)/g, '')
|
||||||
.replace(/[^A-Z0-9\s]/g, '')
|
.replace(/[^A-Z0-9\s]/g, '')
|
||||||
|
|||||||
Reference in New Issue
Block a user