diff --git a/client/src/pages/BLReconciliation.tsx b/client/src/pages/BLReconciliation.tsx index 7a876ac..f3f526d 100644 --- a/client/src/pages/BLReconciliation.tsx +++ b/client/src/pages/BLReconciliation.tsx @@ -497,8 +497,11 @@ export default function BLReconciliation() { return isManual && isNotValidated; }), [deliveriesWithBL]); + // Fournisseurs en rapprochement automatique : toujours considérés validés, + // même si reconciled n'a pas été posé (livraisons antérieures au passage en mode auto) const allValidatedDeliveries = useMemo(() => deliveriesWithBL.filter((delivery: any) => { - return delivery.reconciled === true || delivery.reconciled === 1; + const isAutomatic = delivery.supplier?.automaticReconciliation === true; + return isAutomatic || delivery.reconciled === true || delivery.reconciled === 1; }), [deliveriesWithBL]); // Fonctions de gestion diff --git a/migrations/20261009_backfill_auto_reconciliation.sql b/migrations/20261009_backfill_auto_reconciliation.sql new file mode 100644 index 0000000..2fac7db --- /dev/null +++ b/migrations/20261009_backfill_auto_reconciliation.sql @@ -0,0 +1,22 @@ +-- Backfill rapprochement automatique +-- +-- Contexte : l'endpoint POST /api/deliveries/:id/validate ne posait pas +-- reconciled = true pour les fournisseurs en rapprochement automatique +-- (automatic_reconciliation = true). Ces livraisons n'apparaissaient ni dans +-- l'onglet "Manuels" (exclues car fournisseur auto) ni dans "Validées" +-- (reconciled = false). Même cas pour les livraisons antérieures au passage +-- d'un fournisseur en mode automatique. +-- +-- Applique le même critère que l'auto-validation côté serveur : +-- livraison livrée + numéro de BL renseigné. + +UPDATE deliveries d +SET reconciled = true, + validated_at = COALESCE(d.validated_at, NOW()) +FROM suppliers s +WHERE d.supplier_id = s.id + AND s.automatic_reconciliation = true + AND d.status = 'delivered' + AND d.bl_number IS NOT NULL + AND TRIM(d.bl_number) <> '' + AND (d.reconciled IS NULL OR d.reconciled = false); diff --git a/server/routes.ts b/server/routes.ts index 6bf224f..dd69123 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -2556,6 +2556,21 @@ export async function registerRoutes(app: Express): Promise { await storage.validateDelivery(id, blData); + // AUTO-VALIDATION RAPPROCHEMENT : fournisseur en mode automatique → rapprochement validé directement + try { + // Fournisseur déjà joint à la livraison + const supplier = delivery.supplier; + if (supplier?.automaticReconciliation) { + await storage.updateDelivery(id, { + reconciled: true, + validatedAt: new Date() + }); + console.log(`✅ Auto-reconciliation: Delivery #${id} automatically validated for supplier ${supplier.name}`); + } + } catch (error) { + console.error(`❌ Auto-reconciliation failed for delivery #${id}:`, error); + } + // MISE À JOUR DU CACHE : Marquer le cache comme permanent pour cette livraison validée try { if (delivery.invoiceReference && delivery.invoiceReference.trim()) {