Checkpoint: Corrections multiples sur les attestations : bug de modal bloquée corrigé, remplacement des variables dans l'email d'attestation fonctionnel, et type attestation ajouté au schéma de validation
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { useState, useMemo } from "react";
|
import { useState, useMemo, useEffect } from "react";
|
||||||
import { trpc } from "@/lib/trpc";
|
import { trpc } from "@/lib/trpc";
|
||||||
import DashboardLayout from "@/components/DashboardLayout";
|
import DashboardLayout from "@/components/DashboardLayout";
|
||||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
||||||
@@ -34,6 +34,15 @@ function UploadAttestationDialog({
|
|||||||
tailleFichier: number;
|
tailleFichier: number;
|
||||||
} | null>(null);
|
} | 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({
|
const uploadMutation = trpc.gestionAttestations.uploadDocument.useMutation({
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
onSuccess();
|
onSuccess();
|
||||||
|
|||||||
@@ -1175,11 +1175,15 @@ export async function sendAttestationEmail(params: {
|
|||||||
|
|
||||||
const template = templates[0];
|
const template = templates[0];
|
||||||
|
|
||||||
// Remplacer les variables dans le template
|
// Préparer les variables pour le remplacement
|
||||||
let content = template.bodyContent;
|
const variables = {
|
||||||
content = content.replace(/{{prenomApprenant}}/g, params.apprenantPrenom);
|
prenomApprenant: params.apprenantPrenom,
|
||||||
content = content.replace(/{{nomApprenant}}/g, params.apprenantNom);
|
nomApprenant: params.apprenantNom,
|
||||||
content = content.replace(/{{nomFormation}}/g, params.formationNom);
|
nomFormation: params.formationNom,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Le contenu sera remplacé par generateEmailFromTemplate
|
||||||
|
const content = template.bodyContent;
|
||||||
|
|
||||||
// Récupérer le PDF (depuis URL ou chemin local)
|
// Récupérer le PDF (depuis URL ou chemin local)
|
||||||
let pdfBuffer: Buffer;
|
let pdfBuffer: Buffer;
|
||||||
@@ -1211,7 +1215,7 @@ export async function sendAttestationEmail(params: {
|
|||||||
return sendEmail({
|
return sendEmail({
|
||||||
to: params.to,
|
to: params.to,
|
||||||
subject: `Votre attestation de formation - ${params.formationNom}`,
|
subject: `Votre attestation de formation - ${params.formationNom}`,
|
||||||
html: await getEmailTemplate(content, 'attestation'),
|
html: await getEmailTemplate(content, 'attestation', variables),
|
||||||
attachments: [{
|
attachments: [{
|
||||||
filename: `Attestation_${params.apprenantNom}_${params.apprenantPrenom}.pdf`,
|
filename: `Attestation_${params.apprenantNom}_${params.apprenantPrenom}.pdf`,
|
||||||
content: pdfBuffer.toString('base64'),
|
content: pdfBuffer.toString('base64'),
|
||||||
|
|||||||
4
todo.md
4
todo.md
@@ -1466,3 +1466,7 @@
|
|||||||
- [x] Corriger le bug où le statut reste "envoyé" après la suppression d'une attestation
|
- [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 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
|
||||||
|
|||||||
Reference in New Issue
Block a user