From 661e477d36a6008047a12ea0e45fee42120d3b6d Mon Sep 17 00:00:00 2001 From: Manus Date: Fri, 13 Feb 2026 10:26:03 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Checkpoint=20saved:=20Ajout=20de?= =?UTF-8?q?=20la=20fonctionnalit=C3=A9=20d'export=20intelligent=20des=20fa?= =?UTF-8?q?ctures=20BAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nouvelle fonctionnalité implémentée : ✅ Sélection automatique des factures exportables uniquement ✅ Critères d'exportabilité renforcés : Score 100% + Type d'achat + Service + Ventilation remplis ✅ Case à cocher générale qui sélectionne toutes les factures exportables ✅ Cases à cocher individuelles désactivées pour les factures non exportables ✅ Bouton "Exporter" actif dès qu'au moins une facture est cochée ✅ Tooltips explicatifs sur les cases à cocher Modifications techniques : - client/src/pages/InvoicesBAP.tsx : Fonction isEligibleForExport modifiée avec critères complets - client/src/pages/InvoicesBAP.tsx : handleSelectAll modifié pour sélectionner uniquement les factures exportables - client/src/pages/InvoicesBAP.tsx : Ajout de l'attribut disabled sur les checkboxes non exportables - client/src/pages/InvoicesBAP.tsx : Ajout de tooltips explicatifs - client/src/pages/InvoicesBAP.tsx : Simplification du bouton "Exporter" (activation dès qu'une facture est cochée) Fonctionnement : 1. Une facture BAP est exportable si et seulement si : - Score de qualité = 100% - Type d'achat rempli (CAPEX ou OPEX) - Service concerné rempli - Ventilation comptable remplie 2. La case à cocher générale (en-tête du tableau) sélectionne automatiquement toutes les factures qui remplissent ces critères 3. Les cases à cocher individuelles sont : - Actives pour les factures exportables - Désactivées (grisées) pour les factures non exportables - Avec tooltip explicatif sur les cases désactivées 4. Le bouton "Exporter" s'active dès qu'au moins une facture est cochée et affiche le nombre de factures sélectionnées Cette fonctionnalité garantit que seules les factures complètes et validées peuvent être exportées, évitant ainsi les erreurs d'export de données incomplètes. --- client/src/pages/InvoicesBAP.tsx | 28 +++++++++++---- todo.md | 59 ++++++++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 9 deletions(-) diff --git a/client/src/pages/InvoicesBAP.tsx b/client/src/pages/InvoicesBAP.tsx index c207afa..ef68320 100644 --- a/client/src/pages/InvoicesBAP.tsx +++ b/client/src/pages/InvoicesBAP.tsx @@ -236,9 +236,11 @@ export default function InvoicesBAP() { const handleSelectAll = (checked: boolean) => { if (checked) { - // Select all invoices (no restriction) - const allIds = (filteredInvoices || []).map(inv => inv.id); - setSelectedIds(allIds); + // Select only exportable invoices + const exportableIds = (filteredInvoices || []) + .filter(inv => isEligibleForExport(inv)) + .map(inv => inv.id); + setSelectedIds(exportableIds); } else { setSelectedIds([]); } @@ -291,7 +293,17 @@ export default function InvoicesBAP() { }; const isEligibleForExport = (invoice: any) => { - return (invoice.qualityScore || 0) === 100; + // Une facture BAP est exportable si : + // 1. Score = 100% + // 2. Type d'achat rempli + // 3. Service concerné rempli + // 4. Ventilation comptable remplie + return ( + (invoice.qualityScore || 0) === 100 && + invoice.typeAchat && + invoice.serviceConcerne && + invoice.ventilationComptable + ); }; const hasOnlyEligibleSelected = selectedIds.length > 0 && selectedIds.every(id => { @@ -322,12 +334,11 @@ export default function InvoicesBAP() {