Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -13,6 +13,7 @@ import (
|
||||
"bssapp-backend/models"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"math"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -1151,10 +1152,17 @@ WHERE OrderHeaderID=@p3 AND OrderLineID=@p4 AND ISNULL(IsClosed,0)=0
|
||||
existingOpenCombo := make(map[string]string)
|
||||
existingClosedCombo := make(map[string]string)
|
||||
existingOpenMeta := make(map[string]struct {
|
||||
item string
|
||||
color string
|
||||
dim1 string
|
||||
dim2 string
|
||||
item string
|
||||
color string
|
||||
dim1 string
|
||||
dim2 string
|
||||
qty1 float64
|
||||
price float64
|
||||
docCurrency string
|
||||
vatRate float64
|
||||
lineDesc string
|
||||
deliveryDate string
|
||||
plannedDate string
|
||||
})
|
||||
|
||||
rows, err := tx.Query(`
|
||||
@@ -1164,7 +1172,14 @@ SELECT
|
||||
ISNULL(ItemCode,''),
|
||||
ISNULL(ColorCode,''),
|
||||
ISNULL(ItemDim1Code,''),
|
||||
ISNULL(ItemDim2Code,'')
|
||||
ISNULL(ItemDim2Code,''),
|
||||
ISNULL(Qty1, 0),
|
||||
ISNULL(Price, 0),
|
||||
ISNULL(DocCurrencyCode, ''),
|
||||
ISNULL(VatRate, 0),
|
||||
ISNULL(LineDescription, ''),
|
||||
CONVERT(varchar(10), DeliveryDate, 23),
|
||||
CONVERT(varchar(10), PlannedDateOfLading, 23)
|
||||
FROM BAGGI_V3.dbo.trOrderLine
|
||||
WHERE OrderHeaderID=@p1
|
||||
`, header.OrderHeaderID)
|
||||
@@ -1175,9 +1190,15 @@ WHERE OrderHeaderID=@p1
|
||||
|
||||
for rows.Next() {
|
||||
var id, item, color, dim1, dim2 string
|
||||
var docCurrency, lineDesc, deliveryDate, plannedDate string
|
||||
var qty1, price, vatRate float64
|
||||
var closed bool
|
||||
|
||||
if err := rows.Scan(&id, &closed, &item, &color, &dim1, &dim2); err != nil {
|
||||
if err := rows.Scan(
|
||||
&id, &closed, &item, &color, &dim1, &dim2,
|
||||
&qty1, &price, &docCurrency, &vatRate, &lineDesc,
|
||||
&deliveryDate, &plannedDate,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1191,15 +1212,29 @@ WHERE OrderHeaderID=@p1
|
||||
} else {
|
||||
existingOpen[id] = true
|
||||
existingOpenMeta[id] = struct {
|
||||
item string
|
||||
color string
|
||||
dim1 string
|
||||
dim2 string
|
||||
item string
|
||||
color string
|
||||
dim1 string
|
||||
dim2 string
|
||||
qty1 float64
|
||||
price float64
|
||||
docCurrency string
|
||||
vatRate float64
|
||||
lineDesc string
|
||||
deliveryDate string
|
||||
plannedDate string
|
||||
}{
|
||||
item: strings.TrimSpace(item),
|
||||
color: strings.TrimSpace(color),
|
||||
dim1: strings.TrimSpace(dim1),
|
||||
dim2: strings.TrimSpace(dim2),
|
||||
item: strings.TrimSpace(item),
|
||||
color: strings.TrimSpace(color),
|
||||
dim1: strings.TrimSpace(dim1),
|
||||
dim2: strings.TrimSpace(dim2),
|
||||
qty1: qty1,
|
||||
price: price,
|
||||
docCurrency: strings.TrimSpace(docCurrency),
|
||||
vatRate: vatRate,
|
||||
lineDesc: strings.TrimSpace(lineDesc),
|
||||
deliveryDate: strings.TrimSpace(deliveryDate),
|
||||
plannedDate: strings.TrimSpace(plannedDate),
|
||||
}
|
||||
if combo != "" {
|
||||
existingOpenCombo[combo] = id
|
||||
@@ -1391,6 +1426,46 @@ WHERE OrderLineID=@p42 AND ISNULL(IsClosed,0)=0`)
|
||||
}
|
||||
}
|
||||
|
||||
// Eğer satır DB'deki değerlerle aynıysa, update/upsert yapma (performans)
|
||||
if !isNew && ln.OrderLineID != "" {
|
||||
if meta, ok := existingOpenMeta[ln.OrderLineID]; ok {
|
||||
trim := strings.TrimSpace
|
||||
floatEq := func(a, b float64) bool { return math.Abs(a-b) < 0.0001 }
|
||||
dateOnly := func(nt models.NullTime) string {
|
||||
if nt.Valid && !nt.Time.IsZero() {
|
||||
return nt.Time.Format("2006-01-02")
|
||||
}
|
||||
return ""
|
||||
}
|
||||
plannedStr := ""
|
||||
if ln.PlannedDateOfLading.Valid {
|
||||
plannedStr = strings.TrimSpace(ln.PlannedDateOfLading.String)
|
||||
}
|
||||
deliveryStr := dateOnly(ln.DeliveryDate)
|
||||
|
||||
payloadHasDates := deliveryStr != "" && plannedStr != ""
|
||||
|
||||
if payloadHasDates &&
|
||||
trim(meta.item) == trim(safeNS(ln.ItemCode)) &&
|
||||
trim(meta.color) == trim(safeNS(ln.ColorCode)) &&
|
||||
trim(meta.dim1) == trim(safeNS(ln.ItemDim1Code)) &&
|
||||
trim(meta.dim2) == trim(safeNS(ln.ItemDim2Code)) &&
|
||||
floatEq(meta.qty1, nf0(ln.Qty1)) &&
|
||||
floatEq(meta.price, nf0(ln.Price)) &&
|
||||
trim(meta.docCurrency) == trim(safeNS(ln.DocCurrencyCode)) &&
|
||||
floatEq(meta.vatRate, nf0(ln.VatRate)) &&
|
||||
trim(meta.lineDesc) == trim(safeNS(ln.LineDescription)) &&
|
||||
trim(meta.deliveryDate) == trim(deliveryStr) &&
|
||||
trim(meta.plannedDate) == trim(plannedStr) {
|
||||
|
||||
// Bu satırı "işlendi" say, ama DB yazma yok
|
||||
delete(existingOpen, ln.OrderLineID)
|
||||
delete(existingOpenCombo, comboKey)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Variant guard
|
||||
if qtyValue(ln.Qty1) > 0 {
|
||||
if err := ValidateItemVariant(tx, ln); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user