mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
fix(reconciliation): auto-reconcile deliveries from automatic suppliers on validation
POST /api/deliveries/:id/validate never set reconciled=true for suppliers in automatic reconciliation mode, so their deliveries showed in neither the Manuels tab (auto suppliers excluded) nor Validées (reconciled=false). - validate endpoint now marks reconciled + validatedAt for auto suppliers - Validées tab includes all deliveries from auto suppliers - migration backfills reconciled for existing delivered deliveries with BL Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
944d99733c
commit
2274c9bb4a
3 files changed
+41
-1
No files matched your search
@@ -497,8 +497,11 @@ export default function BLReconciliation() {
|
|||||||
return isManual && isNotValidated;
|
return isManual && isNotValidated;
|
||||||
}), [deliveriesWithBL]);
|
}), [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) => {
|
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]);
|
}), [deliveriesWithBL]);
|
||||||
|
|
||||||
// Fonctions de gestion
|
// Fonctions de gestion
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -2556,6 +2556,21 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
|||||||
|
|
||||||
await storage.validateDelivery(id, blData);
|
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
|
// MISE À JOUR DU CACHE : Marquer le cache comme permanent pour cette livraison validée
|
||||||
try {
|
try {
|
||||||
if (delivery.invoiceReference && delivery.invoiceReference.trim()) {
|
if (delivery.invoiceReference && delivery.invoiceReference.trim()) {
|
||||||
|
|||||||
Reference in new issue
Block a user