Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-03-31 14:57:39 +03:00
parent 7b1de24dfb
commit 4a67f0f444

View File

@@ -454,6 +454,27 @@ func normalizeKeyPart(ns models.NullString) string {
return strings.ToUpper(s) return strings.ToUpper(s)
} }
// normalizeNumericToken: sadece rakamlardan oluşan değeri baştaki sıfırlardan arındırır.
// Rakam dışı içerik varsa boş döner.
func normalizeNumericToken(s string) string {
if s == "" {
return ""
}
for i := 0; i < len(s); i++ {
if s[i] < '0' || s[i] > '9' {
return ""
}
}
i := 0
for i < len(s) && s[i] == '0' {
i++
}
if i == len(s) {
return "0"
}
return s[i:]
}
// ======================================================= // =======================================================
// AKSBIR DETECTION // AKSBIR DETECTION
// ======================================================= // =======================================================
@@ -493,6 +514,7 @@ func ValidateItemVariant(tx *sql.Tx, ln models.OrderDetail) error {
color = normalizeEmpty(color) color = normalizeEmpty(color)
dim1 = normalizeEmpty(dim1) dim1 = normalizeEmpty(dim1)
dim2 = normalizeEmpty(dim2) dim2 = normalizeEmpty(dim2)
dim1Numeric := normalizeNumericToken(dim1)
if item == "" { if item == "" {
return fmt.Errorf( return fmt.Errorf(
@@ -511,6 +533,9 @@ func ValidateItemVariant(tx *sql.Tx, ln models.OrderDetail) error {
SELECT CASE WHEN EXISTS ( SELECT CASE WHEN EXISTS (
SELECT 1 SELECT 1
FROM BAGGI_V3.dbo.prItemVariant V WITH (NOLOCK) FROM BAGGI_V3.dbo.prItemVariant V WITH (NOLOCK)
CROSS APPLY (
SELECT UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(V.ItemDim1Code)),'') ,' ', ''), 'YAS', ''), 'Y', '')) AS Dim1Norm
) X
WHERE ISNULL(LTRIM(RTRIM(V.ItemCode)),'') = @p1 WHERE ISNULL(LTRIM(RTRIM(V.ItemCode)),'') = @p1
AND ( AND (
( (
@@ -526,16 +551,15 @@ func ValidateItemVariant(tx *sql.Tx, ln models.OrderDetail) error {
) )
) )
AND ( AND (
UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(V.ItemDim1Code)),'') ,' ', ''), 'YAS', ''), 'Y', '')) X.Dim1Norm = @p3
= UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(@p3)),'') ,' ', ''), 'YAS', ''), 'Y', ''))
OR ( OR (
TRY_CONVERT(INT, NULLIF(UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(V.ItemDim1Code)),'') ,' ', ''), 'YAS', ''), 'Y', '')), '')) ISNULL(LTRIM(RTRIM(@p5)),'') <> ''
= TRY_CONVERT(INT, NULLIF(UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(@p3)),'') ,' ', ''), 'YAS', ''), 'Y', '')), '')) AND X.Dim1Norm NOT LIKE '%[^0-9]%'
AND TRY_CONVERT(INT, NULLIF(UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(@p3)),'') ,' ', ''), 'YAS', ''), 'Y', '')), '')) IS NOT NULL AND SUBSTRING(X.Dim1Norm, PATINDEX('%[^0]%', X.Dim1Norm + '0'), LEN(X.Dim1Norm)) = @p5
) )
) )
) THEN 1 ELSE 0 END ) THEN 1 ELSE 0 END
`, item, color, dim1, dim2).Scan(&exists) `, item, color, dim1, dim2, dim1Numeric).Scan(&exists)
if err != nil { if err != nil {
return fmt.Errorf("ItemVariant kontrol query hatası: %w", err) return fmt.Errorf("ItemVariant kontrol query hatası: %w", err)
@@ -572,6 +596,9 @@ func ValidateOrderVariants(db *sql.DB, lines []models.OrderDetail) ([]models.Inv
SELECT CASE WHEN EXISTS ( SELECT CASE WHEN EXISTS (
SELECT 1 SELECT 1
FROM BAGGI_V3.dbo.prItemVariant V WITH (NOLOCK) FROM BAGGI_V3.dbo.prItemVariant V WITH (NOLOCK)
CROSS APPLY (
SELECT UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(V.ItemDim1Code)),'') ,' ', ''), 'YAS', ''), 'Y', '')) AS Dim1Norm
) X
WHERE ISNULL(LTRIM(RTRIM(V.ItemCode)),'') = @p1 WHERE ISNULL(LTRIM(RTRIM(V.ItemCode)),'') = @p1
AND ( AND (
( (
@@ -587,12 +614,11 @@ func ValidateOrderVariants(db *sql.DB, lines []models.OrderDetail) ([]models.Inv
) )
) )
AND ( AND (
UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(V.ItemDim1Code)),'') ,' ', ''), 'YAS', ''), 'Y', '')) X.Dim1Norm = @p3
= UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(@p3)),'') ,' ', ''), 'YAS', ''), 'Y', ''))
OR ( OR (
TRY_CONVERT(INT, NULLIF(UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(V.ItemDim1Code)),'') ,' ', ''), 'YAS', ''), 'Y', '')), '')) ISNULL(LTRIM(RTRIM(@p5)),'') <> ''
= TRY_CONVERT(INT, NULLIF(UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(@p3)),'') ,' ', ''), 'YAS', ''), 'Y', '')), '')) AND X.Dim1Norm NOT LIKE '%[^0-9]%'
AND TRY_CONVERT(INT, NULLIF(UPPER(REPLACE(REPLACE(REPLACE(ISNULL(LTRIM(RTRIM(@p3)),'') ,' ', ''), 'YAS', ''), 'Y', '')), '')) IS NOT NULL AND SUBSTRING(X.Dim1Norm, PATINDEX('%[^0]%', X.Dim1Norm + '0'), LEN(X.Dim1Norm)) = @p5
) )
) )
) THEN 1 ELSE 0 END ) THEN 1 ELSE 0 END
@@ -614,6 +640,7 @@ func ValidateOrderVariants(db *sql.DB, lines []models.OrderDetail) ([]models.Inv
color := normalizeEmpty(normalizeKeyPart(ln.ColorCode)) color := normalizeEmpty(normalizeKeyPart(ln.ColorCode))
dim1 := normalizeEmpty(normalizeKeyPart(ln.ItemDim1Code)) dim1 := normalizeEmpty(normalizeKeyPart(ln.ItemDim1Code))
dim2 := normalizeEmpty(normalizeKeyPart(ln.ItemDim2Code)) dim2 := normalizeEmpty(normalizeKeyPart(ln.ItemDim2Code))
dim1Numeric := normalizeNumericToken(dim1)
// ItemCode boş ise invalid // ItemCode boş ise invalid
if strings.TrimSpace(item) == "" { if strings.TrimSpace(item) == "" {
@@ -632,7 +659,7 @@ func ValidateOrderVariants(db *sql.DB, lines []models.OrderDetail) ([]models.Inv
} }
var exists int var exists int
if err := stmt.QueryRow(item, color, dim1, dim2).Scan(&exists); err != nil { if err := stmt.QueryRow(item, color, dim1, dim2, dim1Numeric).Scan(&exists); err != nil {
return nil, fmt.Errorf("validate query hatası (i=%d): %w", i, err) return nil, fmt.Errorf("validate query hatası (i=%d): %w", i, err)
} }