Merge remote-tracking branch 'origin/master'

This commit is contained in:
2026-02-14 15:49:40 +03:00
parent 3bc3543010
commit f079ee80da

View File

@@ -1103,6 +1103,38 @@ func UpdateOrder(header models.OrderHeader, lines []models.OrderDetail, user *mo
now := time.Now() now := time.Now()
v3User := buildV3AuditUser(user) v3User := buildV3AuditUser(user)
// Hard delete bazen FK nedeniyle patlayabiliyor.
// Bu durumda satırı soft-close ederek akışı güvenli şekilde tamamlarız.
deleteOrSoftCloseLine := func(lineID string) error {
if _, err := tx.Exec(`DELETE FROM BAGGI_V3.dbo.trOrderLineCurrency WHERE OrderLineID=@p1`, lineID); err != nil {
return fmt.Errorf("line currency delete failed line_id=%s: %w", lineID, err)
}
if _, err := tx.Exec(`
DELETE FROM BAGGI_V3.dbo.trOrderLine
WHERE OrderHeaderID=@p1 AND OrderLineID=@p2 AND ISNULL(IsClosed,0)=0
`, header.OrderHeaderID, lineID); err != nil {
fmt.Printf("[ORDER_UPDATE] hard delete failed, trying soft-close line_id=%s err=%v\n", lineID, err)
if _, err2 := tx.Exec(`
UPDATE BAGGI_V3.dbo.trOrderLine
SET
Qty1 = 0,
Qty2 = 0,
CancelQty1 = 0,
CancelQty2 = 0,
IsClosed = 1,
LastUpdatedUserName = @p1,
LastUpdatedDate = @p2
WHERE OrderHeaderID=@p3 AND OrderLineID=@p4 AND ISNULL(IsClosed,0)=0
`, v3User, now, header.OrderHeaderID, lineID); err2 != nil {
return fmt.Errorf("line delete failed line_id=%s: %v; soft-close failed: %w", lineID, err, err2)
}
}
return nil
}
// Döviz kuru (Header ExchangeRate fallback) // Döviz kuru (Header ExchangeRate fallback)
exRate := 1.0 exRate := 1.0
if header.DocCurrencyCode.Valid && header.DocCurrencyCode.String != "TRY" { if header.DocCurrencyCode.Valid && header.DocCurrencyCode.String != "TRY" {
@@ -1329,13 +1361,7 @@ WHERE OrderLineID=@p42 AND ISNULL(IsClosed,0)=0`)
Dim2: strings.TrimSpace(safeNS(ln.ItemDim2Code)), Dim2: strings.TrimSpace(safeNS(ln.ItemDim2Code)),
} }
} }
if _, err := tx.Exec(`DELETE FROM BAGGI_V3.dbo.trOrderLineCurrency WHERE OrderLineID=@p1`, ln.OrderLineID); err != nil { if err := deleteOrSoftCloseLine(ln.OrderLineID); err != nil {
return nil, err
}
if _, err := tx.Exec(`
DELETE FROM BAGGI_V3.dbo.trOrderLine
WHERE OrderHeaderID=@p1 AND OrderLineID=@p2 AND ISNULL(IsClosed,0)=0
`, header.OrderHeaderID, ln.OrderLineID); err != nil {
return nil, err return nil, err
} }
@@ -1356,6 +1382,15 @@ WHERE OrderHeaderID=@p1 AND OrderLineID=@p2 AND ISNULL(IsClosed,0)=0
} }
} }
// Edit akışında bazen stale OrderLineID gelebiliyor (silinmiş/eski satır ID'si).
// Böyle bir ID ile UPDATE denemek yerine yeni satır olarak ele al.
if !isNew && ln.OrderLineID != "" {
if _, stillOpen := existingOpen[ln.OrderLineID]; !stillOpen {
ln.OrderLineID = uuid.New().String()
isNew = true
}
}
// 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 {
@@ -1482,10 +1517,7 @@ WHERE OrderHeaderID=@p1 AND OrderLineID=@p2 AND ISNULL(IsClosed,0)=0
id, meta.item, meta.color, meta.dim1, meta.dim2) id, meta.item, meta.color, meta.dim1, meta.dim2)
continue continue
} }
if _, err := tx.Exec(`DELETE FROM BAGGI_V3.dbo.trOrderLineCurrency WHERE OrderLineID=@p1`, id); err != nil { if err := deleteOrSoftCloseLine(id); err != nil {
return nil, err
}
if _, err := tx.Exec(`DELETE FROM BAGGI_V3.dbo.trOrderLine WHERE OrderLineID=@p1 AND ISNULL(IsClosed,0)=0`, id); err != nil {
return nil, err return nil, err
} }
} }