Checkpoint: Ajout route tRPC invoices.reprocessSelected et bouton Relancer (violet) dans la barre d'outils de Factures BAP
This commit is contained in:
@@ -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() {
|
||||
<ShieldCheck className="w-4 h-4 mr-2" />
|
||||
{validateBAPBulkMutation.isPending ? "Validation en cours..." : "Valider tout en BAP"}
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
if (selectedIds.length === 0) {
|
||||
toast.error("Veuillez sélectionner au moins une facture");
|
||||
return;
|
||||
}
|
||||
if (confirm(`Relancer l'analyse IA et les automatismes sur ${selectedIds.length} facture(s) sélectionnée(s) ?\nCela peut prendre quelques secondes par facture.`)) {
|
||||
reprocessMutation.mutate({ invoiceIds: selectedIds });
|
||||
}
|
||||
}}
|
||||
disabled={selectedIds.length === 0 || reprocessMutation.isPending}
|
||||
variant="outline"
|
||||
className="border-purple-500 text-purple-600 hover:bg-purple-50"
|
||||
>
|
||||
<RefreshCw className={`w-4 h-4 mr-2 ${reprocessMutation.isPending ? 'animate-spin' : ''}`} />
|
||||
{reprocessMutation.isPending ? `Retraitement...` : `Relancer (${selectedIds.length})`}
|
||||
</Button>
|
||||
<Button onClick={() => setLocation("/upload")}>
|
||||
<FileText className="w-4 h-4 mr-2" />
|
||||
Importer
|
||||
|
||||
Reference in New Issue
Block a user