diff --git a/svc/routes/order_pdf.go b/svc/routes/order_pdf.go index 87d36e9..0f0395b 100644 --- a/svc/routes/order_pdf.go +++ b/svc/routes/order_pdf.go @@ -229,6 +229,21 @@ func safeTrimUpper(s string) string { return strings.ToUpper(strings.TrimSpace(s)) } +func normalizeTextForMatchGo(s string) string { + replacer := strings.NewReplacer( + "ç", "c", "Ç", "C", + "ğ", "g", "Ğ", "G", + "ı", "i", "I", "I", "İ", "I", + "ö", "o", "Ö", "O", + "ş", "s", "Ş", "S", + "ü", "u", "Ü", "U", + ) + out := replacer.Replace(strings.TrimSpace(s)) + out = strings.ToUpper(out) + out = strings.Join(strings.Fields(out), " ") + return out +} + func f64(v sql.NullFloat64) float64 { if !v.Valid { return 0 @@ -318,8 +333,24 @@ func parseNumericSize(v string) (int, bool) { } func detectBedenGroupGo(bedenList []string, ana, alt string) string { - ana = safeTrimUpper(ana) - alt = safeTrimUpper(alt) + ana = normalizeTextForMatchGo(ana) + alt = normalizeTextForMatchGo(alt) + + // 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} + if len(bedenList) > 0 { + allYas := true + for _, b := range bedenList { + x := normalizeBedenLabelGo(b) + if !yasNums[x] { + allYas = false + break + } + } + if allYas { + return catYas + } + } hasGarson := strings.Contains(ana, "GARSON") || strings.Contains(alt, "GARSON") || strings.Contains(ana, "YETISKIN/GARSON") || strings.Contains(alt, "YETISKIN/GARSON") || @@ -327,13 +358,7 @@ func detectBedenGroupGo(bedenList []string, ana, alt string) string { strings.Contains(ana, "YETİŞKIN/GARSON") || strings.Contains(alt, "YETİŞKIN/GARSON") || strings.Contains(ana, "YETİŞKİN/GARSON") || strings.Contains(alt, "YETİŞKİN/GARSON") - hasAyakkabi := strings.Contains(ana, "AYAKKABI") || strings.Contains(alt, "AYAKKABI") - - // ✅ Garson + ayakkabı özel grubu - if hasGarson && hasAyakkabi { - return catAykGar - } - // ✅ Garson → yaş + // ✅ Garson → yaş (ürün tipi fark etmeksizin) if hasGarson { return catYas } @@ -354,7 +379,7 @@ func detectBedenGroupGo(bedenList []string, ana, alt string) string { "FULAR", "MENDIL", "MENDİL", "KASKOL", "ASKI", "YAKA", "KOL DUGMESI", "KOL DÜĞMESİ", } - giyimGruplari := []string{"GÖMLEK", "CEKET", "PANTOLON", "MONT", "YELEK", "TAKIM", "TSHIRT", "TİŞÖRT"} + giyimGruplari := []string{"GOMLEK", "GÖMLEK", "CEKET", "PANTOLON", "MONT", "YELEK", "TAKIM", "TSHIRT", "TISORT", "TİŞÖRT"} isAksesuar := false for _, g := range aksesuarGruplari { if strings.Contains(ana, g) || strings.Contains(alt, g) { @@ -759,6 +784,10 @@ func buildCategorySizeMap(rows []PdfRow) CategorySizeMap { if c == "" { c = catTak } + // AKSESUAR başlığını sabit tut: satırlardan gelen 2,4,6... gibi ekstra bedenleri ekleme. + if c == catAksbir { + continue + } if _, ok := cm[c]; !ok { cm[c] = []string{} } diff --git a/ui/src/stores/orderentryStore.js b/ui/src/stores/orderentryStore.js index 972edf0..70bf7e3 100644 --- a/ui/src/stores/orderentryStore.js +++ b/ui/src/stores/orderentryStore.js @@ -3643,8 +3643,6 @@ export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = '' } const hasGarson = hasGarsonSignal - const hasAyakkabi = rawAna.includes('AYAKKABI') || rawKat.includes('AYAKKABI') - if (hasGarson && hasAyakkabi) return 'ayk_garson' if (hasGarson) return 'yas' // 🔸 Harfli beden varsa doğrudan "gom" (gömlek/üst giyim)