diff --git a/client/src/pages/AdminGestionAttestations.tsx b/client/src/pages/AdminGestionAttestations.tsx index e065f25..8cb3abd 100644 --- a/client/src/pages/AdminGestionAttestations.tsx +++ b/client/src/pages/AdminGestionAttestations.tsx @@ -1,4 +1,4 @@ -import { useState, useMemo } from "react"; +import { useState, useMemo, useEffect } from "react"; import { trpc } from "@/lib/trpc"; import DashboardLayout from "@/components/DashboardLayout"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; @@ -34,6 +34,15 @@ function UploadAttestationDialog({ tailleFichier: number; } | null>(null); + // Réinitialiser l'état quand la modal s'ouvre + useEffect(() => { + if (open) { + setUploading(false); + setUploadProgress(0); + setFileData(null); + } + }, [open]); + const uploadMutation = trpc.gestionAttestations.uploadDocument.useMutation({ onSuccess: () => { onSuccess(); diff --git a/server/emailService.ts b/server/emailService.ts index 2871ea2..f7caccd 100644 --- a/server/emailService.ts +++ b/server/emailService.ts @@ -1175,11 +1175,15 @@ export async function sendAttestationEmail(params: { const template = templates[0]; - // Remplacer les variables dans le template - let content = template.bodyContent; - content = content.replace(/{{prenomApprenant}}/g, params.apprenantPrenom); - content = content.replace(/{{nomApprenant}}/g, params.apprenantNom); - content = content.replace(/{{nomFormation}}/g, params.formationNom); + // Préparer les variables pour le remplacement + const variables = { + prenomApprenant: params.apprenantPrenom, + nomApprenant: params.apprenantNom, + nomFormation: params.formationNom, + }; + + // Le contenu sera remplacé par generateEmailFromTemplate + const content = template.bodyContent; // Récupérer le PDF (depuis URL ou chemin local) let pdfBuffer: Buffer; @@ -1211,7 +1215,7 @@ export async function sendAttestationEmail(params: { return sendEmail({ to: params.to, subject: `Votre attestation de formation - ${params.formationNom}`, - html: await getEmailTemplate(content, 'attestation'), + html: await getEmailTemplate(content, 'attestation', variables), attachments: [{ filename: `Attestation_${params.apprenantNom}_${params.apprenantPrenom}.pdf`, content: pdfBuffer.toString('base64'), diff --git a/todo.md b/todo.md index 5590d1e..9774ff8 100644 --- a/todo.md +++ b/todo.md @@ -1466,3 +1466,7 @@ - [x] Corriger le bug où le statut reste "envoyé" après la suppression d'une attestation - [x] Corriger l'erreur de validation lors de la modification du template attestation + +- [x] Corriger le remplacement des variables dans le template email d'attestation + +- [x] Corriger le bug de la modal de chargement d'attestation qui reste bloquée sur l'état précédent