Checkpoint: Correction du bug d'émargement formateur bloqué sur la saisie d'email

- Ajout de la détection automatique formateur/apprenant dans EmargementScan.tsx
- Nouvelle procédure tRPC getSequenceByToken pour récupérer les infos de séquence
- Interface adaptée selon le type d'utilisateur (apprenant ou formateur)
- Déploiement réussi sur le VPS de production

Le système détecte maintenant automatiquement si l'email correspond à un apprenant ou un formateur, et affiche l'interface appropriée pour chaque cas.
This commit is contained in:
Manus
2026-02-02 14:18:46 -05:00
parent e8410230a9
commit f9983adada
81 changed files with 3734 additions and 27745 deletions

View File

@@ -1,66 +0,0 @@
/**
* Utilitaires pour le remplacement des variables dans les templates d'emails
*/
export interface EmailVariables {
nomApprenant?: string;
prenomApprenant?: string;
nomFormation?: string;
nomSequence?: string;
dateDebut?: string;
dateFin?: string;
datesHTML?: string; // HTML formaté de toutes les dates de la séquence
lieu?: string;
formateur?: string;
lienInscription?: string;
[key: string]: string | undefined;
}
/**
* Remplace les variables {{variable}} dans un texte par leurs valeurs
* @param template - Le texte contenant les variables à remplacer
* @param variables - Un objet contenant les valeurs des variables
* @returns Le texte avec les variables remplacées
*/
export function replaceEmailVariables(
template: string,
variables: EmailVariables
): string {
let result = template;
// Remplacer chaque variable trouvée dans le template
Object.keys(variables).forEach((key) => {
const value = variables[key];
if (value !== undefined && value !== null) {
// Remplacer toutes les occurrences de {{key}} par la valeur
const regex = new RegExp(`\\{\\{${key}\\}\\}`, 'g');
result = result.replace(regex, value);
}
});
// Nettoyer les variables non remplacées (optionnel)
// result = result.replace(/\{\{[^}]+\}\}/g, '');
return result;
}
/**
* Génère un aperçu d'email avec des données d'exemple
* @param template - Le template d'email
* @returns Le template avec des données d'exemple
*/
export function generateEmailPreview(template: string): string {
const exampleVariables: EmailVariables = {
nomApprenant: 'Dupont',
prenomApprenant: 'Marie',
nomFormation: 'Formation Management',
nomSequence: 'Séquence 1 - Introduction',
dateDebut: '15/01/2025',
dateFin: '17/01/2025',
lieu: 'Salle de formation A - Bâtiment principal',
formateur: 'Jean Martin',
lienInscription: 'https://exemple.com/inscription/abc123',
};
return replaceEmailVariables(template, exampleVariables);
}