diff --git a/svc/queries/order_pdf.go b/svc/queries/order_pdf.go index 6b200c9..f1730c3 100644 --- a/svc/queries/order_pdf.go +++ b/svc/queries/order_pdf.go @@ -101,8 +101,8 @@ SELECT L.ItemDim1Code, L.ItemDim2Code, L.Qty1, - L.Price, - L.DocCurrencyCode, + ISNULL(CD.Price, 0) AS Price, + ISNULL(CD.CurrencyCode, ISNULL(L.DocCurrencyCode, 'TRY')) AS DocCurrencyCode, L.DeliveryDate, L.LineDescription, P.ProductAtt01Desc, @@ -115,6 +115,9 @@ SELECT L.VatCode, L.VatRate 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 ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode)) WHERE L.OrderHeaderID = @p1 diff --git a/svc/queries/order_write.go b/svc/queries/order_write.go index 5a1853b..be73c16 100644 --- a/svc/queries/order_write.go +++ b/svc/queries/order_write.go @@ -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 { diff --git a/svc/routes/order_pdf.go b/svc/routes/order_pdf.go index 385c432..11b0966 100644 --- a/svc/routes/order_pdf.go +++ b/svc/routes/order_pdf.go @@ -507,8 +507,8 @@ func getOrderLinesFromDB(db *sql.DB, orderID string) ([]OrderLineRaw, error) { L.ItemDim1Code, L.ItemDim2Code, L.Qty1, - L.Price, - L.DocCurrencyCode, + ISNULL(CD.Price, 0) AS Price, + ISNULL(CD.CurrencyCode, ISNULL(L.DocCurrencyCode, 'TRY')) AS DocCurrencyCode, L.DeliveryDate, L.LineDescription, P.ProductAtt01Desc, @@ -521,6 +521,9 @@ func getOrderLinesFromDB(db *sql.DB, orderID string) ([]OrderLineRaw, error) { L.VatCode, L.VatRate 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 ON LTRIM(RTRIM(P.ProductCode)) = LTRIM(RTRIM(L.ItemCode)) WHERE L.OrderHeaderID = @p1 @@ -777,8 +780,12 @@ func drawOrderHeader(pdf *gofpdf.Fpdf, h *OrderHeader, showDesc bool) float64 { /* ---------------------------------------------------- 5) AÇIKLAMA (Varsa) ---------------------------------------------------- */ - if showDesc && strings.TrimSpace(h.Description) != "" { - text := strings.TrimSpace(h.Description) + desc := strings.TrimSpace(h.Description) + if desc == "" { + desc = strings.TrimSpace(h.InternalDesc) + } + if showDesc && desc != "" { + text := desc pdf.SetFont("dejavu", "", 8) // wrap’te kullanılacak font lineH := 4.0 diff --git a/ui/quasar.config.js.temporary.compiled.1771572283583.mjs b/ui/quasar.config.js.temporary.compiled.1771579736454.mjs similarity index 100% rename from ui/quasar.config.js.temporary.compiled.1771572283583.mjs rename to ui/quasar.config.js.temporary.compiled.1771579736454.mjs