diff --git a/client/src/pages/InvoicesBAP.tsx b/client/src/pages/InvoicesBAP.tsx index 3a28b67..2370756 100644 --- a/client/src/pages/InvoicesBAP.tsx +++ b/client/src/pages/InvoicesBAP.tsx @@ -32,7 +32,7 @@ import { TableRow, } from "@/components/ui/table"; import { trpc } from "@/lib/trpc"; -import { Search, FileText, Download, FileSpreadsheet, Trash2, Edit, Trash, CheckCircle, CheckCircle2 } from "lucide-react"; +import { Search, FileText, Download, FileSpreadsheet, Trash2, Edit, Trash, CheckCircle, CheckCircle2, ShieldCheck } from "lucide-react"; import * as XLSX from 'xlsx'; import { toast } from "sonner"; import { useLocation } from "wouter"; @@ -131,6 +131,24 @@ export default function InvoicesBAP() { }, }); + const validateBAPBulkMutation = trpc.invoices.validateBAPBulk.useMutation({ + onSuccess: (data) => { + if (data.processed === 0) { + toast.info("Aucune facture éligible à valider en BAP."); + } else { + toast.success(`${data.processed} facture(s) validée(s) BAP avec succès !`, { duration: 4000 }); + const pdfUrls = (data.results as any[]).filter(r => r.pdfUrl).map(r => r.pdfUrl as string); + if (pdfUrls.length > 0) { + pdfUrls.forEach(url => window.open(url, '_blank')); + } + } + utils.invoices.list.invalidate(); + }, + onError: (error) => { + toast.error(error.message || "Erreur lors de la validation BAP en masse"); + }, + }); + const validateBAPMutation = trpc.invoices.validateBAP.useMutation({ onSuccess: (data) => { if (data.exportMode === 'browser' && data.pdfUrl) { @@ -403,6 +421,18 @@ export default function InvoicesBAP() { Supprimer ({selectedIds.length}) +