Checkpoint: Checkpoint saved: Ajout de la fonctionnalité d'export intelligent des factures BAP
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.
This commit is contained in:
@@ -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() {
|
||||
</Button>
|
||||
<Button
|
||||
onClick={handleExport}
|
||||
disabled={selectedIds.length === 0 || !hasOnlyEligibleSelected || exportMutation.isPending}
|
||||
disabled={selectedIds.length === 0 || exportMutation.isPending}
|
||||
className="bg-blue-600 hover:bg-blue-700"
|
||||
title={!hasOnlyEligibleSelected && selectedIds.length > 0 ? "Seules les factures avec un score de 100% peuvent être exportées" : ""}
|
||||
>
|
||||
<Download className="w-4 h-4 mr-2" />
|
||||
PDF ({selectedIds.length})
|
||||
Exporter ({selectedIds.length})
|
||||
</Button>
|
||||
<Button
|
||||
onClick={async () => {
|
||||
@@ -419,6 +430,7 @@ export default function InvoicesBAP() {
|
||||
<Checkbox
|
||||
checked={allEligibleSelected}
|
||||
onCheckedChange={handleSelectAll}
|
||||
title="Sélectionner toutes les factures exportables (Score 100% + champs remplis)"
|
||||
/>
|
||||
</TableHead>
|
||||
<TableHead>Fournisseur</TableHead>
|
||||
@@ -442,6 +454,8 @@ export default function InvoicesBAP() {
|
||||
<Checkbox
|
||||
checked={selectedIds.includes(invoice.id)}
|
||||
onCheckedChange={(checked) => handleSelectOne(invoice.id, checked as boolean)}
|
||||
disabled={!isEligibleForExport(invoice)}
|
||||
title={!isEligibleForExport(invoice) ? "Facture non exportable (score < 100% ou champs manquants)" : ""}
|
||||
/>
|
||||
</TableCell>
|
||||
<TableCell className="font-medium">
|
||||
|
||||
Reference in New Issue
Block a user