diff --git a/backend/gestion/db/db_cancel_command.go b/backend/gestion/db/db_cancel_command.go index 3c1e7455..cbcd7abe 100644 --- a/backend/gestion/db/db_cancel_command.go +++ b/backend/gestion/db/db_cancel_command.go @@ -78,9 +78,14 @@ func (d *Database) CancelCommandAtomic(commandID int, username, reason string, f if err := tx.Exec(` UPDATE products p - SET stock = stock + ci.quantite, updated_at = CURRENT_TIMESTAMP - FROM command_items ci - WHERE ci.command_id = ? AND ci.product_id = p.id`, commandID).Error; err != nil { + SET stock = stock + agg.total_qty, updated_at = CURRENT_TIMESTAMP + FROM ( + SELECT product_id, SUM(quantite) AS total_qty + FROM command_items + WHERE command_id = ? + GROUP BY product_id + ) agg + WHERE agg.product_id = p.id`, commandID).Error; err != nil { return fmt.Errorf("erreur remboursement stock: %w", err) } log.Printf("✅ [CancelAtomic] Stock remboursé") @@ -194,9 +199,14 @@ func (d *Database) DeleteCommandAtomic(commandID int, deletedBy, role string) er if !stockAlreadyRestored { if err := tx.Exec(` UPDATE products p - SET stock = stock + ci.quantite, updated_at = CURRENT_TIMESTAMP - FROM command_items ci - WHERE ci.command_id = ? AND ci.product_id = p.id`, commandID).Error; err != nil { + SET stock = stock + agg.total_qty, updated_at = CURRENT_TIMESTAMP + FROM ( + SELECT product_id, SUM(quantite) AS total_qty + FROM command_items + WHERE command_id = ? + GROUP BY product_id + ) agg + WHERE agg.product_id = p.id`, commandID).Error; err != nil { log.Printf("⚠️ [DeleteAtomic] Erreur remboursement: %v", err) } else { log.Printf("✅ [DeleteAtomic] Stock remboursé (statut: %s)", cmdResult.Status) @@ -337,9 +347,14 @@ func (d *Database) CancelCommandByAdminAtomic(commandID int) error { if !slices.Contains(noRestoreStatuses, prevStatus) { if err := tx.Exec(` UPDATE products p - SET stock = stock + ci.quantite, updated_at = CURRENT_TIMESTAMP - FROM command_items ci - WHERE ci.command_id = ? AND ci.product_id = p.id`, commandID).Error; err != nil { + SET stock = stock + agg.total_qty, updated_at = CURRENT_TIMESTAMP + FROM ( + SELECT product_id, SUM(quantite) AS total_qty + FROM command_items + WHERE command_id = ? + GROUP BY product_id + ) agg + WHERE agg.product_id = p.id`, commandID).Error; err != nil { return fmt.Errorf("erreur remboursement stock: %w", err) } } @@ -381,9 +396,14 @@ func (d *Database) CancelDeliveryByLivreurAtomic(commandID int) (alreadyCancelle if e := tx.Exec(` UPDATE products p - SET stock = stock + ci.quantite, updated_at = CURRENT_TIMESTAMP - FROM command_items ci - WHERE ci.command_id = ? AND ci.product_id = p.id`, commandID).Error; e != nil { + SET stock = stock + agg.total_qty, updated_at = CURRENT_TIMESTAMP + FROM ( + SELECT product_id, SUM(quantite) AS total_qty + FROM command_items + WHERE command_id = ? + GROUP BY product_id + ) agg + WHERE agg.product_id = p.id`, commandID).Error; e != nil { return fmt.Errorf("erreur remboursement stock: %w", e) } return nil