mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
Merge pull request #509 from R0m1k3/1.1
Improve automatic invoice verification for reconciled deliveries
This commit is contained in:
1 file changed
+29
-45
@@ -383,45 +383,25 @@ export default function BLReconciliation() {
|
|||||||
setVerificationResults(newVerificationResults);
|
setVerificationResults(newVerificationResults);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CAS SPÉCIAL : Livraisons réconciliées (✅) avec cellules vides
|
||||||
|
// Si reconciled=true ET (cellules vides) ET blNumber existe → auto-remplir
|
||||||
deliveriesWithBL.forEach((delivery: any) => {
|
deliveriesWithBL.forEach((delivery: any) => {
|
||||||
// CAS SPÉCIAL : Livraisons réconciliées (✅) avec cellules vides
|
if (!delivery.reconciled) return; // Ignorer les livraisons non réconciliées
|
||||||
// Si reconciled=true ET (cellules vides) ET blNumber existe → auto-remplir
|
|
||||||
if (delivery.reconciled) {
|
|
||||||
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
|
const hasEmptyCells = !delivery.invoiceReference || !delivery.invoiceAmount || !delivery.dueDate;
|
||||||
const hasVerifiableData = delivery.invoiceReference || delivery.blNumber;
|
const hasBLNumber = delivery.blNumber?.trim();
|
||||||
const notAlreadyProcessed = !verificationResults[delivery.id] && !verifyingDeliveries.has(delivery.id);
|
const notAlreadyAutoVerified = !autoVerifiedDeliveries.has(delivery.id);
|
||||||
|
const notCurrentlyVerifying = !verifyingDeliveries.has(delivery.id);
|
||||||
|
|
||||||
if (hasVerifiableData && notAlreadyProcessed) {
|
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) {
|
if (import.meta.env.DEV) {
|
||||||
console.log(`🔍 Vérification auto pour livraison NON réconciliée ${delivery.id}:`, {
|
console.log(`🔄 Livraison réconciliée #${delivery.id} avec cellules vides, auto-vérification (première tentative)...`);
|
||||||
invoiceRef: delivery.invoiceReference,
|
|
||||||
blNumber: delivery.blNumber,
|
|
||||||
reconciled: delivery.reconciled
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
// Marquer comme auto-vérifiée AVANT de lancer pour éviter les doublons
|
||||||
// Délai pour éviter de surcharger le serveur
|
setAutoVerifiedDeliveries(prev => new Set(prev).add(delivery.id));
|
||||||
setTimeout(() => {
|
// Lancer la vérification sans délai
|
||||||
handleVerifyInvoice(delivery, false);
|
handleVerifyInvoice(delivery, false);
|
||||||
}, Math.random() * 1000);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, [deliveriesWithBL, suppliers, verificationResults, verifyingDeliveries]);
|
}, [deliveriesWithBL, suppliers, verificationResults, verifyingDeliveries]);
|
||||||
@@ -451,10 +431,9 @@ export default function BLReconciliation() {
|
|||||||
|
|
||||||
const handleSaveReconciliation = async () => {
|
const handleSaveReconciliation = async () => {
|
||||||
try {
|
try {
|
||||||
// Invalidation cache + refetch forcé pour mise à jour immédiate
|
// Force refetch immédiat pour mettre à jour l'affichage
|
||||||
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
|
await queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] });
|
||||||
queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] });
|
await queryClient.refetchQueries({ queryKey: ['/api/deliveries'] });
|
||||||
refetch();
|
|
||||||
handleCloseModal();
|
handleCloseModal();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast({
|
toast({
|
||||||
@@ -661,10 +640,12 @@ export default function BLReconciliation() {
|
|||||||
description: "Rapprochement validé avec succès",
|
description: "Rapprochement validé avec succès",
|
||||||
});
|
});
|
||||||
|
|
||||||
// Invalidation cache + refetch forcé pour mise à jour immédiate
|
// Force refetch immédiat pour déplacer la facture dans l'onglet validées
|
||||||
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
|
await queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] });
|
||||||
queryClient.invalidateQueries({ queryKey: ['/api/deliveries'] });
|
await queryClient.refetchQueries({ queryKey: ['/api/deliveries'] });
|
||||||
refetch(); // Force recharge immédiate des données BL
|
|
||||||
|
// Passer automatiquement à l'onglet "Validées" après validation
|
||||||
|
setActiveTab("validated");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast({
|
toast({
|
||||||
title: "Erreur",
|
title: "Erreur",
|
||||||
@@ -699,9 +680,12 @@ export default function BLReconciliation() {
|
|||||||
description: "Rapprochement dévalidé avec succès",
|
description: "Rapprochement dévalidé avec succès",
|
||||||
});
|
});
|
||||||
|
|
||||||
// Invalidation cache + refetch forcé pour mise à jour immédiate
|
// Force refetch immédiat pour déplacer la facture dans l'onglet manuel
|
||||||
queryClient.invalidateQueries({ queryKey: ['/api/deliveries/bl'] });
|
await queryClient.refetchQueries({ queryKey: ['/api/deliveries/bl'] });
|
||||||
refetch();
|
await queryClient.refetchQueries({ queryKey: ['/api/deliveries'] });
|
||||||
|
|
||||||
|
// Passer automatiquement à l'onglet "Manuel" après dévalidation
|
||||||
|
setActiveTab("manual");
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
toast({
|
toast({
|
||||||
title: "Erreur",
|
title: "Erreur",
|
||||||
|
|||||||
Reference in new issue
Block a user