From d046de3b8bb95a3a9230fc31f90557c41b888413 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Mon, 3 Nov 2025 20:14:52 +0000 Subject: [PATCH] Improve delivery reconciliation and auto-verification logic Update BLReconciliation component to auto-verify reconciled deliveries with missing invoice data, and refine cache invalidation strategy upon PUT requests. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 1e4433b5-47ab-464c-b663-fea2e53367dd Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Event-Id: 02b89611-da6e-4dd2-b729-940165c5611f Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/1e4433b5-47ab-464c-b663-fea2e53367dd/5dRMxDE --- client/src/pages/BLReconciliation.tsx | 35 ++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/client/src/pages/BLReconciliation.tsx b/client/src/pages/BLReconciliation.tsx index 00493fe..ba325d1 100644 --- a/client/src/pages/BLReconciliation.tsx +++ b/client/src/pages/BLReconciliation.tsx @@ -67,6 +67,7 @@ export default function BLReconciliation() { // État pour le système de vérification de facture const [verificationResults, setVerificationResults] = useState>({}); const [verifyingDeliveries, setVerifyingDeliveries] = useState>(new Set()); + const [autoVerifiedDeliveries, setAutoVerifiedDeliveries] = useState>(new Set()); // État pour le modal de commentaire const [showCommentModal, setShowCommentModal] = useState(false); @@ -178,14 +179,11 @@ export default function BLReconciliation() { // Ne faire l'appel que si on a des données à mettre à jour if (Object.keys(updateData).length > 0) { apiRequest(`/api/deliveries/${variables.deliveryId}`, "PUT", updateData) - .then(async () => { - console.log('✅ Données sauvegardées avec succès, rafraîchissement immédiat...'); - // Invalider ET forcer le rafraîchissement immédiat - await queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] }); - await queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] }); - await queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] }); - await queryClient.refetchQueries({ queryKey: ['/api/deliveries'] }); - console.log('✅ Rafraîchissement terminé'); + .then(() => { + console.log('✅ Données sauvegardées avec succès'); + // Invalider les caches (pas de refetch pour éviter boucles) + queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] }); + queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] }); }) .catch((error) => { console.error('❌ Erreur auto-remplissage:', error); @@ -365,10 +363,25 @@ export default function BLReconciliation() { } deliveriesWithBL.forEach((delivery: any) => { - // ⛔ EXCLURE COMPLÈTEMENT les livraisons déjà réconciliées - // Une fois validées avec coche verte, on ne contrôle plus JAMAIS + // CAS SPÉCIAL : Livraisons réconciliées (✅) avec cellules vides + // Si reconciled=true ET (cellules vides) ET blNumber existe → auto-remplir if (delivery.reconciled) { - return; // Livraison déjà validée = AUCUNE vérification nécessaire + const hasEmptyCells = !delivery.invoiceReference || !delivery.invoiceAmount || !delivery.dueDate; + const hasBLNumber = delivery.blNumber?.trim(); + const notAlreadyAutoVerified = !autoVerifiedDeliveries.has(delivery.id); + const notCurrentlyVerifying = !verifyingDeliveries.has(delivery.id); + + if (hasEmptyCells && hasBLNumber && notAlreadyAutoVerified && notCurrentlyVerifying) { + // Livraison réconciliée avec cellules vides → vérifier pour auto-remplir (UNE SEULE FOIS) + if (import.meta.env.DEV) { + console.log(`🔄 Livraison réconciliée #${delivery.id} avec cellules vides, auto-vérification (première tentative)...`); + } + // Marquer comme auto-vérifiée AVANT de lancer pour éviter les doublons + setAutoVerifiedDeliveries(prev => new Set(prev).add(delivery.id)); + // Lancer la vérification sans délai + handleVerifyInvoice(delivery, false); + } + return; // Autres livraisons réconciliées = AUCUNE vérification nécessaire } // Vérifier seulement les livraisons NON validées