Checkpoint: Fix: bouton de téléchargement PDF BAP pour factures validées sans PDF (NOVRH VF11521, EVOLUCARE ET098857). Ajout procédure regenerateBapPdf côté serveur + bouton orange RefreshCw côté frontend pour régénérer le PDF à la volée. Déployé en recette et production.
This commit is contained in:
@@ -289,6 +289,21 @@ export default function InvoicesBAP() {
|
||||
},
|
||||
});
|
||||
|
||||
const regenerateBapPdfMutation = trpc.invoices.regenerateBapPdf.useMutation({
|
||||
onSuccess: (data, variables) => {
|
||||
if (data.pdfUrl) {
|
||||
setBapPdfUrls(prev => ({ ...prev, [variables.invoiceId]: data.pdfUrl as string }));
|
||||
toast.success('PDF BAP régénéré avec succès !');
|
||||
downloadBapPdf(data.pdfUrl);
|
||||
}
|
||||
utils.invoices.list.invalidate();
|
||||
utils.invoices.getBapPdfUrls.invalidate();
|
||||
},
|
||||
onError: (error) => {
|
||||
toast.error(error.message || 'Erreur lors de la régénération du PDF BAP');
|
||||
},
|
||||
});
|
||||
|
||||
const devalidateBAPMutation = trpc.invoices.devalidateBAP.useMutation({
|
||||
onSuccess: (data) => {
|
||||
toast.success(`${data.processed} facture(s) dévalidée(s) BAP avec succès`);
|
||||
@@ -1000,11 +1015,14 @@ export default function InvoicesBAP() {
|
||||
<Button
|
||||
size="sm"
|
||||
variant="outline"
|
||||
className="h-8 px-2 text-gray-400 border-gray-200 cursor-not-allowed"
|
||||
title="PDF non disponible"
|
||||
disabled
|
||||
className="h-8 px-2 text-orange-500 border-orange-300 hover:bg-orange-50"
|
||||
title="PDF non disponible — cliquer pour régénérer"
|
||||
disabled={regenerateBapPdfMutation.isPending}
|
||||
onClick={() => regenerateBapPdfMutation.mutate({ invoiceId: invoice.id })}
|
||||
>
|
||||
<Download className="h-4 w-4" />
|
||||
{regenerateBapPdfMutation.isPending && regenerateBapPdfMutation.variables?.invoiceId === invoice.id
|
||||
? <RefreshCw className="h-4 w-4 animate-spin" />
|
||||
: <RefreshCw className="h-4 w-4" />}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user