Commit Graph

12 Commits

Author SHA1 Message Date
Manus
a3fd588fb8 Checkpoint: Correction critique du scheduler de rappels automatiques qui ne trouvait aucune date de formation. Le problème venait de l'utilisation de rappel.dateFormationIds (colonne inexistante) au lieu de la table de liaison rappelDates, et de l'utilisation de rappel.heure au lieu de rappel.heureEnvoi. Le scheduler utilise maintenant correctement la table rappelDates pour récupérer les dates de formation associées à chaque rappel et vérifie l'heure configurée avec une tolérance de 20 minutes toutes les 15 minutes. 2026-01-18 08:55:38 -05:00
Manus
6c4ca249a9 Checkpoint: Correction du système d'envoi automatique des rappels :
1. Ajout de la vérification de l'heure configurée avant l'envoi (tolérance de 20 minutes)
2. Réduction de l'intervalle du scheduler de 1 heure à 15 minutes pour plus de précision
3. Ajout de logs détaillés pour le débogage
4. Les rappels sont maintenant envoyés à l'heure exacte configurée (ex: 13h51)
2026-01-18 08:22:08 -05:00
Manus
1fc4c89c0a Checkpoint: Système de rappels complètement générique et correction du problème de casse MySQL
- Simplification du scheduler pour utiliser uniquement sendRappelEmail pour tous les types de rappels (rappel, rappelJ1, rappel3, rappel4, rappel5, rappel6)
- Correction du problème de casse MySQL (logsRappels vs logsrappels)
- Le système supporte maintenant tous les types de rappels actuels et futurs sans modification du code
- Les emails sont envoyés et les logs sont correctement enregistrés
2026-01-16 11:15:07 -05:00
Manus
8f21fdd276 Checkpoint: Checkpoint saved: Correction complète de l'enregistrement des logs de rappels :
**Problèmes corrigés :**
1. Type de rappel erroné : utilisait typeRappel au lieu de type, affichait le mauvais template (J-1 au lieu de J+2)
2. Statut erroné : utilisait "success"/"failed" (anglais) au lieu de "succes"/"echec" (français)
3. Email erroné : utilisait emailDestinataire au lieu de email
4. Champs obsolètes : supprimé dateSequence qui n'existe plus dans le schéma

**Fichiers modifiés :**
- server/rappelDb.ts : Réécriture complète avec les bons noms de colonnes (email, type, statut, typeEnvoi)
- server/rappelScheduler.ts : Correction des appels à logRappelEnvoye avec les bons paramètres
- server/routers.ts : Correction de l'enum du statut dans la procédure historique (succes/echec)

**Résultat :**
- Les logs de rappels enregistrent maintenant correctement le type de rappel (J+2, J-7, etc.)
- Le statut est correctement enregistré en français (succes/echec)
- L'email du destinataire est correctement enregistré
- Les tests de rappel sont distingués des envois automatiques via typeEnvoi

Déployé sur le VPS de production (https://formations.itinova.org)
2026-01-16 06:33:12 -05:00
Manus
f331f9bb5f Checkpoint: Refonte majeure du système de rappels : sélection granulaire au niveau des dates de formation individuelles (dateFormationId) au lieu des séquences. Permet de choisir précisément quelles dates d'une séquence recevront un rappel. Interface hiérarchique avec séquences dépliables et checkboxes par date. Scheduler adapté pour traiter date par date. 2026-01-08 08:53:41 -05:00
Manus
6ee87f9b22 Checkpoint: Refonte complète du système de rappels pour permettre une gestion granulaire par séquence
Fonctionnalités ajoutées :
- Table de liaison rappelSequences pour associer rappels et séquences
- Composant SequenceMultiSelect avec recherche et multi-sélection
- Gestion des associations dans les procédures create/update
- Modification du scheduler pour filtrer les séquences selon les associations
- Si aucune séquence n'est sélectionnée, le rappel s'applique à toutes les séquences (comportement par défaut)

Le système permet maintenant de configurer des rappels spécifiques pour certaines dates/séquences particulières, offrant une flexibilité complète dans la gestion des rappels automatiques.
2026-01-08 08:27:20 -05:00
Manus
5308b7921e Checkpoint: Ajout de la possibilité de joindre un fichier dans l'envoi des rappels par email
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
2026-01-08 06:00:27 -05:00
Manus Sandbox
ea57cfc0cb Checkpoint: Ajout du système de notifications enrichi comprenant : email de remerciement post-formation automatique, notifications aux formateurs (nouvelle inscription et annulation), alertes de capacité atteinte pour les admins, notifications aux apprenants en liste d'attente quand une place se libère, ajout du champ email pour les formateurs, et scheduler automatique pour les remerciements. 2025-12-15 14:59:59 -05:00
Manus Sandbox
97b8af438c Checkpoint: Correction du bug où le nom du formateur n'était pas affiché dans les emails de rappel J-7 et J-1 alors que la prévisualisation fonctionnait correctement. Modifications : 1) Ajout du paramètre formateur? dans la signature de sendRappelJ7Email (server/emailService.ts ligne 231), 2) Ajout de l'affichage du formateur dans le template HTML de rappel J-7 (ligne 261), 3) Passage du paramètre formateur dans sendGroupEmail pour le type rappel (ligne 406), 4) Passage du paramètre formateur dans rappelScheduler pour J-7 et J-1 (lignes 160 et 178), 5) Récupération et passage du formateur dans testerRappel (routers.ts lignes 913-917, 955, 971). Le nom du formateur s'affiche maintenant correctement dans tous les emails de rappel envoyés. 2025-12-10 10:46:32 -05:00
Manus Sandbox
bb0ec9e3b0 Checkpoint: Amélioration système de rappels - Historique et notifications d'échec
**Nouvelles fonctionnalités** :

1. **Historique des rappels envoyés**
   - Nouvelle table `logsRappels` pour tracer tous les emails de rappels
   - Enregistrement automatique de chaque envoi (succès ou échec)
   - Prévention des doublons : vérification avant envoi
   - Informations stockées : rappelId, sequenceId, apprenantId, email, type, statut, message d'erreur

2. **Notifications automatiques à l'administrateur**
   - Alerte par email en cas d'échec d'envoi de rappels
   - Détail des échecs : liste des emails et messages d'erreur
   - Résumé : nombre d'envois réussis vs échecs

3. **Procédure de test manuel** (backend uniquement)
   - Nouvelle procédure tRPC `rappels.testerRappel`
   - Permet de tester l'envoi d'un rappel J-7 ou J-1 pour une séquence
   - Envoie au premier apprenant inscrit uniquement

**Fichiers créés** :
- `server/rappelDb.ts` : Fonctions de gestion des logs de rappels
- `drizzle/schema.ts` : Ajout de la table `logsRappels`

**Fichiers modifiés** :
- `server/rappelScheduler.ts` : Intégration du logging et des notifications
- `server/routers.ts` : Ajout de la procédure `testerRappel`

**Bénéfices** :
-  Aucun doublon même en cas de redémarrage du serveur
-  Traçabilité complète de tous les rappels envoyés
-  Alertes automatiques en cas de problème d'envoi
-  Possibilité de tester les rappels avant envoi automatique
2025-12-08 03:01:50 -05:00
Manus Sandbox
4077c57c49 Checkpoint: Correction bug rappels multiples - Un seul email par séquence
**Problème identifié** :
Les apprenants recevaient plusieurs emails de rappel (J-7 ou J-1) pour une même séquence de formation. Par exemple, 5 emails pour la formation JetSki du 15/12/2025 au lieu d'un seul.

**Cause du bug** :
La requête SQL dans `rappelScheduler.ts` cherchait dans la table `datesFormation` et retournait une ligne par date de formation trouvée. Si une séquence avait 5 dates, la requête retournait 5 lignes, déclenchant l'envoi de 5 emails identiques au même apprenant.

**Solution implémentée** :
Modification de la logique dans `server/rappelScheduler.ts` (fonction `processRappel`) :
1. Récupération de toutes les séquences d'abord
2. Pour chaque séquence, vérification de sa **première date** uniquement (ordre = 1)
3. Si cette première date correspond à la date cible (J-7 ou J-1), envoi d'un seul email par apprenant inscrit

**Résultat** :
-  Un seul email de rappel par séquence et par apprenant
-  Toutes les dates de la séquence sont incluses dans l'email
-  Pas de doublons même si la formation comporte plusieurs dates

**Fichiers modifiés** :
- `server/rappelScheduler.ts` : Réécriture complète de la fonction `processRappel`

**Test** :
La prochaine exécution automatique du scheduler (toutes les heures) n'enverra plus qu'un seul email par séquence.
2025-12-08 02:54:09 -05:00
Manus Sandbox
1255124c3d Checkpoint: Rappels automatiques J-7 et J-1 finalisés avec templates personnalisés Itinova
- Correction du bug d'insertion SQL des rappels (champ derniereExecution)
- Création de la table rappels et des fonctions CRUD
- Implémentation du scheduler automatique (vérification toutes les heures)
- Personnalisation des templates J-7 et J-1 avec logo et couleurs Itinova (Bleu #283581, Bleu clair #0578BE, Orange #E94E1B, Vert #45ac34)
- Style sobre et professionnel appliqué
- Variable {{datesHTML}} pour afficher toutes les dates de chaque séquence
2025-12-01 03:34:08 -05:00