Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user