Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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) // wrap’te kullanılacak font
|
pdf.SetFont("dejavu", "", 8) // wrap’te kullanılacak font
|
||||||
lineH := 4.0
|
lineH := 4.0
|
||||||
|
|||||||
Reference in New Issue
Block a user