diff --git a/attached_assets/image_1757356440912.png b/attached_assets/image_1757356440912.png new file mode 100644 index 0000000..d7627d3 Binary files /dev/null and b/attached_assets/image_1757356440912.png differ diff --git a/client/src/pages/Avoirs.tsx b/client/src/pages/Avoirs.tsx index c343bd0..0758772 100644 --- a/client/src/pages/Avoirs.tsx +++ b/client/src/pages/Avoirs.tsx @@ -421,6 +421,26 @@ export default function Avoirs() { ...prev, [variables.avoirId]: result })); + + // Auto-remplissage si facture trouvée et montant disponible + if (result.exists && result.invoiceAmount) { + // Auto-remplir le montant dans l'avoir via API + const avoir = avoirs.find(a => a.id === variables.avoirId); + if (avoir) { + editAvoirMutation.mutate({ + id: variables.avoirId, + data: { + supplierId: avoir.supplierId, + groupId: avoir.groupId, + invoiceReference: avoir.invoiceReference || "", + amount: result.invoiceAmount, // Auto-remplissage du montant + comment: avoir.comment || "", + commercialProcessed: avoir.commercialProcessed, + status: avoir.status as "En attente de demande" | "Demandé" | "Reçu", + } + }); + } + } setVerifyingAvoirs(prev => { const newSet = new Set(prev); @@ -519,6 +539,59 @@ export default function Avoirs() { }); }; + // Charger les résultats de vérification depuis le cache au démarrage + useEffect(() => { + const loadVerificationResults = async () => { + if (!avoirs || avoirs.length === 0) return; + + const avoirsWithReferences = avoirs.filter(avoir => + avoir.invoiceReference?.trim() && + (avoir.group?.nocodbTableName || avoir.group?.nocodbConfigId) + ); + + if (avoirsWithReferences.length === 0) return; + + console.log(`🔍 Chargement des résultats de vérification pour ${avoirsWithReferences.length} avoirs`); + + // Charger les résultats depuis le cache en parallèle + const results = await Promise.allSettled( + avoirsWithReferences.map(async (avoir) => { + try { + const result = await apiRequest(`/api/avoirs/${avoir.id}/verify-invoice`, 'POST', { + invoiceReference: avoir.invoiceReference, + forceRefresh: false // Utiliser le cache si disponible + }); + return { avoirId: avoir.id, result }; + } catch (error) { + console.error(`Erreur chargement cache avoir ${avoir.id}:`, error); + return { + avoirId: avoir.id, + result: { + exists: false, + matchType: 'none', + errorMessage: 'Erreur de chargement' + } + }; + } + }) + ); + + // Appliquer les résultats chargés + const newResults: Record = {}; + results.forEach((result) => { + if (result.status === 'fulfilled') { + const { avoirId, result: verificationResult } = result.value; + newResults[avoirId] = verificationResult; + } + }); + + setAvoirVerificationResults(newResults); + console.log(`✅ Résultats de vérification chargés pour ${Object.keys(newResults).length} avoirs`); + }; + + loadVerificationResults(); + }, [avoirs]); // Se déclenche quand les avoirs sont chargés + // 🔥 FONCTIONS WEBHOOK MODAL (comme rapprochement) const handleFileChange = (event: React.ChangeEvent) => { const file = event.target.files?.[0];