Checkpoint: Corrections multiples pour le système d'attestations :

1. Ajout de l'enregistrement dans l'historique lors de l'envoi d'attestations (backend + frontend)
2. Correction du bouton Renvoyer inactif (selectedSequenceId -> apprenant.sequence.id)
3. Gestion des erreurs avec enregistrement dans l'historique en cas d'échec
4. Support des chemins locaux et URLs pour les fichiers PDF
This commit is contained in:
Manus
2026-01-18 07:42:56 -05:00
parent ac9ece31a5
commit e9e39f6cdd
3 changed files with 37 additions and 11 deletions

View File

@@ -2526,6 +2526,8 @@ export const appRouter = router({
sendAttestation: adminProcedure
.input(z.object({
attestationId: z.number(),
sequenceId: z.number(),
apprenantId: z.number(),
apprenantEmail: z.string(),
apprenantNom: z.string(),
apprenantPrenom: z.string(),
@@ -2535,20 +2537,41 @@ export const appRouter = router({
.mutation(async ({ input }) => {
const { sendAttestationEmail } = await import("./emailService");
const { markAttestationAsSent } = await import("./gestionAttestationsDb");
const { enregistrerEnvoiAttestation } = await import("./attestationsDb");
// Envoyer l'email
await sendAttestationEmail({
to: input.apprenantEmail,
apprenantNom: input.apprenantNom,
apprenantPrenom: input.apprenantPrenom,
formationNom: input.formationNom,
pdfUrl: input.pdfUrl,
});
try {
// Envoyer l'email
await sendAttestationEmail({
to: input.apprenantEmail,
apprenantNom: input.apprenantNom,
apprenantPrenom: input.apprenantPrenom,
formationNom: input.formationNom,
pdfUrl: input.pdfUrl,
});
// Marquer comme envoyé
await markAttestationAsSent(input.attestationId);
// Marquer comme envoyé
await markAttestationAsSent(input.attestationId);
return { success: true };
// Enregistrer dans l'historique
await enregistrerEnvoiAttestation({
sequenceId: input.sequenceId,
apprenantId: input.apprenantId,
statut: "envoye",
urlAttestation: input.pdfUrl,
});
return { success: true };
} catch (error: any) {
// Enregistrer l'échec dans l'historique
await enregistrerEnvoiAttestation({
sequenceId: input.sequenceId,
apprenantId: input.apprenantId,
statut: "erreur",
messageErreur: error.message,
urlAttestation: input.pdfUrl,
});
throw error;
}
}),
}),