Checkpoint: Amélioration de l'email de teaser avec affichage du formateur et du lieu :
Modifications apportées :
- Ajout des paramètres `lieu` et `formateur` à la fonction sendTeaserEmail
- Récupération du formateur depuis la base de données dans routers.ts via getFormateurById
- Affichage du lieu et du formateur dans le contenu HTML de l'email teaser
- Ajout de `lieu` et `formateur` dans les variables disponibles pour les templates personnalisés
Variables disponibles dans les templates d'emails :
- {{nomApprenant}} - Nom de l'apprenant
- {{prenomApprenant}} - Prénom de l'apprenant
- {{nomFormation}} - Nom de la formation
- {{nomSequence}} - Nom de la séquence
- {{dateDebut}} - Date de début formatée
- {{dateFin}} - Date de fin formatée
- {{lieu}} - Lieu de la formation
- {{formateur}} - Nom du formateur
L'email de teaser affiche maintenant toutes les informations importantes pour les apprenants.
This commit is contained in:
@@ -154,6 +154,8 @@ export async function sendTeaserEmail(params: {
|
|||||||
formationNom: string;
|
formationNom: string;
|
||||||
sequenceNom: string;
|
sequenceNom: string;
|
||||||
dates: Array<{ dateDebut: Date; dateFin: Date; ordre: number }>;
|
dates: Array<{ dateDebut: Date; dateFin: Date; ordre: number }>;
|
||||||
|
lieu?: string;
|
||||||
|
formateur?: string;
|
||||||
}): Promise<boolean> {
|
}): Promise<boolean> {
|
||||||
const fonctionLabel = params.apprenantFonction === 'directeur' ? 'Directeur' :
|
const fonctionLabel = params.apprenantFonction === 'directeur' ? 'Directeur' :
|
||||||
params.apprenantFonction === 'chef_service' ? 'Chef de service' : '';
|
params.apprenantFonction === 'chef_service' ? 'Chef de service' : '';
|
||||||
@@ -180,6 +182,8 @@ export async function sendTeaserEmail(params: {
|
|||||||
<p><strong>Séquence :</strong> ${params.sequenceNom}</p>
|
<p><strong>Séquence :</strong> ${params.sequenceNom}</p>
|
||||||
<h4>Dates :</h4>
|
<h4>Dates :</h4>
|
||||||
${datesHTML}
|
${datesHTML}
|
||||||
|
${params.lieu ? `<p><strong>Lieu :</strong> ${params.lieu}</p>` : ''}
|
||||||
|
${params.formateur ? `<p><strong>Formateur :</strong> ${params.formateur}</p>` : ''}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p>Préparez-vous à vivre une expérience enrichissante qui vous permettra de développer vos compétences managériales.</p>
|
<p>Préparez-vous à vivre une expérience enrichissante qui vous permettra de développer vos compétences managériales.</p>
|
||||||
@@ -194,6 +198,8 @@ export async function sendTeaserEmail(params: {
|
|||||||
nomSequence: params.sequenceNom,
|
nomSequence: params.sequenceNom,
|
||||||
dateDebut: params.dates[0]?.dateDebut.toLocaleDateString('fr-FR') || '',
|
dateDebut: params.dates[0]?.dateDebut.toLocaleDateString('fr-FR') || '',
|
||||||
dateFin: params.dates[params.dates.length - 1]?.dateFin.toLocaleDateString('fr-FR') || '',
|
dateFin: params.dates[params.dates.length - 1]?.dateFin.toLocaleDateString('fr-FR') || '',
|
||||||
|
lieu: params.lieu || '',
|
||||||
|
formateur: params.formateur || '',
|
||||||
};
|
};
|
||||||
|
|
||||||
return sendEmail({
|
return sendEmail({
|
||||||
@@ -282,6 +288,7 @@ export async function sendGroupEmail(params: {
|
|||||||
type: 'teaser' | 'rappel';
|
type: 'teaser' | 'rappel';
|
||||||
dates: Array<{ dateDebut: Date; dateFin: Date; ordre: number }>;
|
dates: Array<{ dateDebut: Date; dateFin: Date; ordre: number }>;
|
||||||
lieu?: string;
|
lieu?: string;
|
||||||
|
formateur?: string;
|
||||||
}): Promise<{ sent: number; failed: number }> {
|
}): Promise<{ sent: number; failed: number }> {
|
||||||
let sent = 0;
|
let sent = 0;
|
||||||
let failed = 0;
|
let failed = 0;
|
||||||
@@ -297,6 +304,8 @@ export async function sendGroupEmail(params: {
|
|||||||
formationNom: params.formationNom,
|
formationNom: params.formationNom,
|
||||||
sequenceNom: params.sequenceNom,
|
sequenceNom: params.sequenceNom,
|
||||||
dates: params.dates,
|
dates: params.dates,
|
||||||
|
lieu: params.lieu,
|
||||||
|
formateur: params.formateur,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
await sendRappelJ7Email({
|
await sendRappelJ7Email({
|
||||||
|
|||||||
@@ -525,6 +525,12 @@ export const appRouter = router({
|
|||||||
console.log(`[Email Group] Envoi de ${recipients.length} emails de type ${input.type}`);
|
console.log(`[Email Group] Envoi de ${recipients.length} emails de type ${input.type}`);
|
||||||
console.log(`[Email Group] Destinataires:`, recipients.map(r => r.email));
|
console.log(`[Email Group] Destinataires:`, recipients.map(r => r.email));
|
||||||
|
|
||||||
|
let formateurNom: string | undefined;
|
||||||
|
if (sequence.formateurId) {
|
||||||
|
const formateur = await db.getFormateurById(sequence.formateurId);
|
||||||
|
formateurNom = formateur?.nom;
|
||||||
|
}
|
||||||
|
|
||||||
const result = await sendGroupEmail({
|
const result = await sendGroupEmail({
|
||||||
recipients,
|
recipients,
|
||||||
formationNom: formation.nom,
|
formationNom: formation.nom,
|
||||||
@@ -536,6 +542,7 @@ export const appRouter = router({
|
|||||||
ordre: d.ordre,
|
ordre: d.ordre,
|
||||||
})),
|
})),
|
||||||
lieu: sequence.lieu,
|
lieu: sequence.lieu,
|
||||||
|
formateur: formateurNom,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(`[Email Group] Résultat: ${result.sent} envoyés, ${result.failed} échoués`);
|
console.log(`[Email Group] Résultat: ${result.sent} envoyés, ${result.failed} échoués`);
|
||||||
|
|||||||
9
todo.md
9
todo.md
@@ -793,3 +793,12 @@
|
|||||||
- [x] Vérifier le système de remplacement des tags ({{nomFormation}})
|
- [x] Vérifier le système de remplacement des tags ({{nomFormation}})
|
||||||
- [x] Corriger le remplacement du tag (ajout des variables dans sendTeaserEmail et sendRappelJ7Email)
|
- [x] Corriger le remplacement du tag (ajout des variables dans sendTeaserEmail et sendRappelJ7Email)
|
||||||
- [x] Corriger et préparer pour test en production
|
- [x] Corriger et préparer pour test en production
|
||||||
|
|
||||||
|
## Email teaser sans formateur ni lieu
|
||||||
|
|
||||||
|
- [x] Vérifier les données disponibles dans sendTeaserEmail
|
||||||
|
- [x] Ajouter le formateur et le lieu dans les paramètres de sendTeaserEmail
|
||||||
|
- [x] Récupérer le formateur depuis la base de données dans routers.ts
|
||||||
|
- [x] Modifier le template pour afficher lieu et formateur
|
||||||
|
- [x] Ajouter lieu et formateur dans les variables
|
||||||
|
- [x] Préparer pour test en production
|
||||||
|
|||||||
Reference in New Issue
Block a user