- Modification de la fonction sendAttestationEmail dans server/emailService.ts
- Le PDF est maintenant téléchargé depuis l'URL et converti en Buffer
- Le PDF est joint à l'email en pièce jointe (base64) au lieu d'un lien de téléchargement
- Nom du fichier joint : Attestation_Nom_Prenom.pdf
- Texte de l'email adapté : "Vous trouverez votre attestation en pièce jointe de cet email"
- Déployé sur le VPS de production (https://formations.itinova.org)
- Les attestations sont maintenant envoyées directement en pièce jointe
- Upload de fichiers avec fallback automatique vers stockage local
- Configuration Nginx pour uploads jusqu'à 10 Mo
- Colonne "Pièce jointe" dans le tableau de gestion des rappels
- Support des fichiers locaux et S3 dans l'envoi d'emails
- Correction de l'encoding base64 pour SMTP/Nodemailer
- Table logsrappels créée dans la base de données MySQL du VPS
- Modification de la procédure testerRappel pour détecter automatiquement le premier rappel actif configuré pour la séquence
- Suppression du paramètre typeRappel (n'est plus nécessaire)
- Création de la fonction sendRappelEmail générique qui utilise le templateType du rappel configuré
- Le bouton frontend envoie maintenant le bon template (rappel 1, 3, 4, 5, 6, etc.) selon la configuration de la séquence
- Gestion des pièces jointes configurées dans le rappel
- Mise à jour du fichier todo.md pour marquer la tâche comme terminée
- Ajout de la mutation testerRappelMutation connectée à la procédure tRPC rappels.testerRappel
- Ajout de l'icône Send dans les imports
- Ajout du bouton dans la colonne Actions du tableau des séquences (entre Edit et Delete)
- Le bouton envoie un email de test à l'administrateur avec les données de la séquence sélectionnée
- Validation : le bouton est désactivé si la séquence n'a pas de dates configurées
- Feedback utilisateur : toast de succès ou d'erreur après l'envoi
- Mise à jour du fichier todo.md pour marquer la tâche comme terminée
Nouvelle fonctionnalité complète pour gérer les attestations :
- Schéma de base de données : colonnes modeAttestation et modeEnvoi dans formations, colonnes documentUrl, documentS3Key, uploadedBy, uploadedAt dans attestations
- Backend : fichier gestionAttestationsDb.ts, procédures tRPC, fonction sendAttestationEmail
- Interface : page AdminGestionAttestations avec sélection de formation, configuration des modes, tableau des apprenants, boutons upload/prévisualisation/envoi/suppression
- Navigation : lien dans menu Gestion, route /admin/gestion-attestations
Modifications apportées :
- Ajout des colonnes nomFichier, urlFichier, s3Key, typeFichier, tailleFichier dans la table rappels
- Création du composant FileUpload pour l'upload de fichiers vers S3 (max 10 Mo)
- Création de l'endpoint API /api/upload-file pour gérer l'upload
- Intégration du composant FileUpload dans les formulaires de création et modification de rappels
- Mise à jour des procédures tRPC create et update pour gérer les informations de fichier
- Modification des fonctions sendRappelJ7Email et sendRappelJ1Email pour inclure les pièces jointes
- Mise à jour du scheduler de rappels pour passer les informations de fichier lors de l'envoi
- Les fichiers sont téléchargés depuis S3 et convertis en base64 pour être attachés aux emails
Problème identifié :
- La variable datesHTML était générée dans le code (lignes 60-80) pour créer le HTML formaté des dates
- Mais elle n'était pas ajoutée dans l'objet variables passé au template personnalisé
- Résultat : {{datesHTML}} n'était pas remplacée dans le template
Solution appliquée :
- Ajout de datesHTML dans l'objet variables (ligne 134)
- La variable contient le HTML formaté de toutes les dates de la séquence
- Format : <div class="date-item"><strong>Date X :</strong><br/>Du ... au ...</div>
La variable {{datesHTML}} est maintenant correctement remplacée dans les templates d'emails personnalisés.
- Ajout d'alias de variables pour supporter les deux formats : {{prenom}} et {{prenomApprenant}}
- Les templates peuvent maintenant utiliser indifféremment les noms courts (prenom, nom, formation, sequence) ou les noms longs (prenomApprenant, nomApprenant, nomFormation, nomSequence)
- Correction appliquée dans sendInscriptionConfirmation
1. Personnalisation des templates d'emails avec variables {{lieu}} et {{formateur}} (déjà disponible)
2. Aperçu avant envoi avec données réelles d'un apprenant (modal avec iframe)
3. Email de rappel J-1 avec bouton d'envoi et d'aperçu
Les templates personnalisés supportent maintenant toutes les variables disponibles.
L'aperçu permet de vérifier le rendu final avant l'envoi groupé.
Le rappel J-1 complète le système de communication avec les apprenants.
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.
Problème corrigé :
- Les tags {{nomFormation}}, {{nomSequence}}, etc. n'étaient pas remplacés dans les emails de teaser et rappel
- Les fonctions sendTeaserEmail et sendRappelJ7Email ne passaient pas les variables au générateur de template
Solution appliquée :
- Ajout de l'objet variables dans sendTeaserEmail avec : nomApprenant, prenomApprenant, nomFormation, nomSequence, dateDebut, dateFin
- Ajout de l'objet variables dans sendRappelJ7Email avec les mêmes variables plus le lieu
- Les variables sont maintenant correctement transmises à getEmailTemplate() pour le remplacement
Variables disponibles dans les templates :
- {{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 (rappel uniquement)
✅ **1. Affichage dans le tableau des séquences**
- Nouvelle colonne "Formateur" ajoutée au tableau de gestion
- Affiche le nom du formateur ou "-" si non renseigné
✅ **2. Liste prédéfinie avec autocomplétion**
- Nouvelle table `formateurs` dans la base de données
- Procédures tRPC (list, create, delete) pour gérer les formateurs
- Composant `FormateurCombobox` avec autocomplétion intelligente
- Possibilité d'ajouter rapidement un nouveau formateur depuis le formulaire
- Recherche en temps réel parmi les formateurs existants
✅ **3. Inclusion dans les emails d'invitation**
- Le nom du formateur est maintenant affiché dans les emails de confirmation d'inscription
- Affichage conditionnel (uniquement si un formateur est renseigné)
- Améliore la communication avec les apprenants
Ces améliorations standardisent la gestion des formateurs, évitent les doublons/fautes de frappe, et enrichissent l'information transmise aux apprenants.