Merge remote-tracking branch 'origin/master'

This commit is contained in:
M_Kececi
2026-02-20 12:35:54 +03:00
parent 32d0c38ab9
commit d4583c17d2
4 changed files with 105 additions and 20 deletions

View File

@@ -101,8 +101,8 @@ SELECT
L.ItemDim1Code, L.ItemDim1Code,
L.ItemDim2Code, L.ItemDim2Code,
L.Qty1, L.Qty1,
L.Price, ISNULL(CD.Price, 0) AS Price,
L.DocCurrencyCode, ISNULL(CD.CurrencyCode, ISNULL(L.DocCurrencyCode, 'TRY')) AS DocCurrencyCode,
L.DeliveryDate, L.DeliveryDate,
L.LineDescription, L.LineDescription,
P.ProductAtt01Desc, P.ProductAtt01Desc,
@@ -115,6 +115,9 @@ SELECT
L.VatCode, L.VatCode,
L.VatRate L.VatRate
FROM BAGGI_V3.dbo.trOrderLine AS L FROM BAGGI_V3.dbo.trOrderLine AS L
LEFT JOIN BAGGI_V3.dbo.trOrderLineCurrency AS CD WITH (NOLOCK)
ON CD.OrderLineID = L.OrderLineID
AND CD.CurrencyCode = ISNULL(NULLIF(LTRIM(RTRIM(L.DocCurrencyCode)), ''), 'TRY')
LEFT JOIN ProductFilterWithDescription('TR') AS P LEFT JOIN ProductFilterWithDescription('TR') AS P
ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode)) ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode))
WHERE L.OrderHeaderID = @p1 WHERE L.OrderHeaderID = @p1

View File

@@ -13,6 +13,7 @@ import (
"bssapp-backend/models" "bssapp-backend/models"
"database/sql" "database/sql"
"fmt" "fmt"
"math"
"strings" "strings"
"time" "time"
@@ -1151,10 +1152,17 @@ WHERE OrderHeaderID=@p3 AND OrderLineID=@p4 AND ISNULL(IsClosed,0)=0
existingOpenCombo := make(map[string]string) existingOpenCombo := make(map[string]string)
existingClosedCombo := make(map[string]string) existingClosedCombo := make(map[string]string)
existingOpenMeta := make(map[string]struct { existingOpenMeta := make(map[string]struct {
item string item string
color string color string
dim1 string dim1 string
dim2 string dim2 string
qty1 float64
price float64
docCurrency string
vatRate float64
lineDesc string
deliveryDate string
plannedDate string
}) })
rows, err := tx.Query(` rows, err := tx.Query(`
@@ -1164,7 +1172,14 @@ SELECT
ISNULL(ItemCode,''), ISNULL(ItemCode,''),
ISNULL(ColorCode,''), ISNULL(ColorCode,''),
ISNULL(ItemDim1Code,''), 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 FROM BAGGI_V3.dbo.trOrderLine
WHERE OrderHeaderID=@p1 WHERE OrderHeaderID=@p1
`, header.OrderHeaderID) `, header.OrderHeaderID)
@@ -1175,9 +1190,15 @@ WHERE OrderHeaderID=@p1
for rows.Next() { for rows.Next() {
var id, item, color, dim1, dim2 string var id, item, color, dim1, dim2 string
var docCurrency, lineDesc, deliveryDate, plannedDate string
var qty1, price, vatRate float64
var closed bool 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 return nil, err
} }
@@ -1191,15 +1212,29 @@ WHERE OrderHeaderID=@p1
} else { } else {
existingOpen[id] = true existingOpen[id] = true
existingOpenMeta[id] = struct { existingOpenMeta[id] = struct {
item string item string
color string color string
dim1 string dim1 string
dim2 string dim2 string
qty1 float64
price float64
docCurrency string
vatRate float64
lineDesc string
deliveryDate string
plannedDate string
}{ }{
item: strings.TrimSpace(item), item: strings.TrimSpace(item),
color: strings.TrimSpace(color), color: strings.TrimSpace(color),
dim1: strings.TrimSpace(dim1), dim1: strings.TrimSpace(dim1),
dim2: strings.TrimSpace(dim2), 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 != "" { if combo != "" {
existingOpenCombo[combo] = id 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 // Variant guard
if qtyValue(ln.Qty1) > 0 { if qtyValue(ln.Qty1) > 0 {
if err := ValidateItemVariant(tx, ln); err != nil { if err := ValidateItemVariant(tx, ln); err != nil {

View File

@@ -507,8 +507,8 @@ func getOrderLinesFromDB(db *sql.DB, orderID string) ([]OrderLineRaw, error) {
L.ItemDim1Code, L.ItemDim1Code,
L.ItemDim2Code, L.ItemDim2Code,
L.Qty1, L.Qty1,
L.Price, ISNULL(CD.Price, 0) AS Price,
L.DocCurrencyCode, ISNULL(CD.CurrencyCode, ISNULL(L.DocCurrencyCode, 'TRY')) AS DocCurrencyCode,
L.DeliveryDate, L.DeliveryDate,
L.LineDescription, L.LineDescription,
P.ProductAtt01Desc, P.ProductAtt01Desc,
@@ -521,6 +521,9 @@ func getOrderLinesFromDB(db *sql.DB, orderID string) ([]OrderLineRaw, error) {
L.VatCode, L.VatCode,
L.VatRate L.VatRate
FROM BAGGI_V3.dbo.trOrderLine AS L FROM BAGGI_V3.dbo.trOrderLine AS L
LEFT JOIN BAGGI_V3.dbo.trOrderLineCurrency AS CD WITH (NOLOCK)
ON CD.OrderLineID = L.OrderLineID
AND CD.CurrencyCode = ISNULL(NULLIF(LTRIM(RTRIM(L.DocCurrencyCode)), ''), 'TRY')
LEFT JOIN ProductFilterWithDescription('TR') AS P LEFT JOIN ProductFilterWithDescription('TR') AS P
ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode)) ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode))
WHERE L.OrderHeaderID = @p1 WHERE L.OrderHeaderID = @p1
@@ -777,8 +780,12 @@ func drawOrderHeader(pdf *gofpdf.Fpdf, h *OrderHeader, showDesc bool) float64 {
/* ---------------------------------------------------- /* ----------------------------------------------------
5) AÇIKLAMA (Varsa) 5) AÇIKLAMA (Varsa)
---------------------------------------------------- */ ---------------------------------------------------- */
if showDesc && strings.TrimSpace(h.Description) != "" { desc := strings.TrimSpace(h.Description)
text := strings.TrimSpace(h.Description) if desc == "" {
desc = strings.TrimSpace(h.InternalDesc)
}
if showDesc && desc != "" {
text := desc
pdf.SetFont("dejavu", "", 8) // wrapte kullanılacak font pdf.SetFont("dejavu", "", 8) // wrapte kullanılacak font
lineH := 4.0 lineH := 4.0