Checkpoint: Modification de la boîte de dialogue de test de rappels

- Ajout d'un champ de saisie pour l'email du destinataire
- Modification du texte : "Tous les rappels configurés pour cette séquence seront envoyés à l'adresse email que vous indiquez ci-dessous"
- Validation de l'email avant envoi
- Backend modifié pour envoyer à l'email saisi au lieu de tous les inscrits
- Les logs enregistrent correctement l'email de test utilisé
This commit is contained in:
Manus
2026-01-22 08:33:07 -05:00
parent 58cbc2d85c
commit 94fed67d19
3 changed files with 45 additions and 13 deletions

View File

@@ -1418,6 +1418,7 @@ export const appRouter = router({
testerRappel: adminProcedure
.input(z.object({
sequenceId: z.number(),
emailTest: z.string().email().optional(),
}))
.mutation(async ({ input }) => {
const sequence = await db.getSequenceById(input.sequenceId);
@@ -1463,26 +1464,31 @@ export const appRouter = router({
throw new TRPCError({ code: 'BAD_REQUEST', message: 'Aucun apprenant inscrit confirmé pour cette séquence' });
}
// Envoyer le rappel de test à l'administrateur connecté
// Envoyer le rappel de test à tous les inscrits confirmés
// Envoyer le rappel de test
const { sendRappelEmail } = await import('./emailService');
let nbEnvoyes = 0;
let nbEchecs = 0;
const erreurs: string[] = [];
for (const inscrit of inscritsConfirmes) {
const apprenant = inscrit.apprenant;
if (!apprenant || !apprenant.email) {
// Si un email de test est fourni, envoyer à cet email uniquement
// Sinon, envoyer à tous les inscrits confirmés
const destinataires = input.emailTest
? [{ apprenant: inscritsConfirmes[0].apprenant, emailOverride: input.emailTest }]
: inscritsConfirmes.map(i => ({ apprenant: i.apprenant, emailOverride: null }));
for (const { apprenant, emailOverride } of destinataires) {
if (!apprenant || (!apprenant.email && !emailOverride)) {
nbEchecs++;
erreurs.push(`Apprenant ${apprenant?.nom || 'inconnu'}: email manquant`);
continue;
}
const emailDestinataire = emailOverride || apprenant.email;
try {
await sendRappelEmail({
apprenantEmail: apprenant.email,
apprenantEmail: emailDestinataire,
apprenantPrenom: apprenant.prenom,
apprenantNom: apprenant.nom,
apprenantFonction: apprenant.fonction || '',
@@ -1506,7 +1512,7 @@ export const appRouter = router({
rappelId: rappelAUtiliser.id,
sequenceId: input.sequenceId,
apprenantId: apprenant.id,
email: apprenant.email,
email: emailDestinataire,
type: rappelAUtiliser.templateType,
typeEnvoi: 'test',
statut: 'succes',
@@ -1524,7 +1530,7 @@ export const appRouter = router({
rappelId: rappelAUtiliser.id,
sequenceId: input.sequenceId,
apprenantId: apprenant.id,
email: apprenant.email,
email: emailDestinataire,
type: rappelAUtiliser.templateType,
typeEnvoi: 'test',
statut: 'echec',