From 8acfb4eae18dca67b63711728d7bfe36d4ecb895 Mon Sep 17 00:00:00 2001 From: Manus Date: Sun, 12 Apr 2026 14:20:05 -0400 Subject: [PATCH] Checkpoint: Ajout route tRPC invoices.reprocessSelected et bouton Relancer (violet) dans la barre d'outils de Factures BAP --- client/src/pages/InvoicesBAP.tsx | 34 ++++++++++- server/routers.ts | 100 +++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 1 deletion(-) diff --git a/client/src/pages/InvoicesBAP.tsx b/client/src/pages/InvoicesBAP.tsx index e8fc37d..d5f719c 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, ShieldCheck } from "lucide-react"; +import { Search, FileText, Download, FileSpreadsheet, Trash2, Edit, Trash, CheckCircle, CheckCircle2, ShieldCheck, RefreshCw } from "lucide-react"; // Helper : télécharge un PDF annoté BAP depuis son URL de stockage // Nommage : AAAA-MM-JJ - Fournisseur - N°Facture.pdf @@ -158,6 +158,21 @@ export default function InvoicesBAP() { }, }); + const reprocessMutation = trpc.invoices.reprocessSelected.useMutation({ + onSuccess: (data) => { + if (data.errors > 0) { + toast.warning(`${data.processed} facture(s) retraitée(s), ${data.errors} erreur(s).`, { duration: 5000 }); + } else { + toast.success(`${data.processed} facture(s) retraitée(s) avec succès !`, { duration: 4000 }); + } + setSelectedIds([]); + utils.invoices.list.invalidate(); + }, + onError: (error) => { + toast.error(error.message || "Erreur lors du retraitement"); + }, + }); + const validateBAPBulkMutation = trpc.invoices.validateBAPBulk.useMutation({ onSuccess: (data) => { if (data.processed === 0) { @@ -464,6 +479,23 @@ export default function InvoicesBAP() { {validateBAPBulkMutation.isPending ? "Validation en cours..." : "Valider tout en BAP"} +