diff --git a/attached_assets/image_1762200463238.png b/attached_assets/image_1762200463238.png new file mode 100644 index 0000000..05ddfe8 Binary files /dev/null and b/attached_assets/image_1762200463238.png differ diff --git a/client/src/pages/BLReconciliation.tsx b/client/src/pages/BLReconciliation.tsx index e3d99d0..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); @@ -180,6 +181,7 @@ export default function BLReconciliation() { apiRequest(`/api/deliveries/${variables.deliveryId}`, "PUT", updateData) .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'] }); }) @@ -361,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