# Gestion des Formations Manager Itinova - TODO ## Phase 1 : Planification et initialisation - [x] Initialiser le projet avec architecture full-stack - [x] Créer le plan de développement - [x] Créer le fichier todo.md ## Phase 2 : Modèle de données - [x] Créer la table des formations (nom, description, lien unique) - [x] Créer la table des sessions (dates, lieu, capacité max 12, statut blocage J-15) - [x] Créer la table des inscriptions (apprenant, session, statut) - [x] Créer la table des apprenants (nom, prénom, email, code établissement) - [x] Implémenter les relations entre tables - [x] Ajouter les contraintes d'unicité pour éviter les doubles inscriptions ## Phase 3 : Interface d'administration - [x] Créer le dashboard administrateur avec navigation - [x] Créer l'interface de gestion des formations (CRUD) - [x] Créer l'interface de gestion des sessions (CRUD) - [x] Créer l'interface de gestion des apprenants (CRUD) - [x] Afficher les listes d'inscrits par session - [x] Implémenter la gestion des rôles (admin DRH, responsable, stagiaire) ## Phase 4 : Système d'inscription - [x] Créer la page d'inscription publique avec lien unique par formation - [x] Implémenter la validation de capacité maximale (12 participants) - [x] Implémenter la validation anti-double inscription - [x] Implémenter le blocage des inscriptions/désinscriptions à J-15 - [x] Créer le système de liste d'attente si session complète - [x] Afficher les sessions disponibles avec places restantes ## Phase 5 : Invitations et emails automatiques - [x] Implémenter la génération d'invitations Outlook (.ics) avec statut " occupé " - [x] Inclure le lieu de formation dans les invitations - [x] Créer le système d'envoi d'emails automatiques - [x] Créer le template email de confirmation d'inscription - [x] Créer le template email teaser pour chaque groupe - [x] Créer le template email de rappel à J-7 - [x] Implémenter l'envoi automatique des emails selon les événements ## Phase 6 : Exports - [x] Implémenter l'export Excel des listes d'inscrits par session - [x] Implémenter l'export PDF des listes d'inscrits par session - [x] Créer la génération de feuille de présence PDF (nom, prénom, code établissement) - [x] Ajouter les boutons d'export dans l'interface admin ## Phase 7 : Tests et documentation - [x] Tester le flux complet d'inscription - [x] Tester les validations et contraintes - [x] Tester la génération des invitations et emails - [x] Tester les exports PDF/Excel - [x] Créer la documentation utilisateur - [x] Créer la documentation d'administration ## P## Phase 8 : Livraison - [x] Vérifier toutes les fonctionnalités - [x] Créer un checkpoint final - [x] Présenter l'application à l'utilisateur ## Corrections à apporter - [x] Corriger la mise à jour de la liste des apprenants après inscription - [x] Implémenter l'envoi effectif des emails de confirmation ## Nouvelles fonctionnalités - [x] Ajouter des filtres de tri sur la page des sessions (date, lieu, places restantes) - [x] Ajouter des filtres de recherche sur la page des formations - [x] Ajouter des filtres de recherche sur la page des apprenants - [x] Ajouter des filtres complets sur la page de gestion des inscrits (recherche, statut, établissement, tri par date) - [x] Ajouter le champ "Fonction" (Directeur, Chef de service, Autre) dans la fiche apprenant - [x] Mettre à jour le schéma de base de données - [x] Mettre à jour les formulaires d'inscription et de gestion - [x] Ajouter la fonction dans les exports PDF/Excel ## Améliorations supplémentaires - [x] Ajouter un filtre par fonction sur la page des apprenants - [x] Ajouter un filtre par fonction sur la page des inscrits - [x] Créer des statistiques de répartition par fonction sur le tableau de bord - [x] Ajouter des graphiques de visualisation des données - [x] Personnaliser les templates d'emails avec la fonction de l'apprenant ## Refonte : Sessions → Séquences avec dates multiples - [x] Renommer "Session" en "Séquence" dans le schéma de base de données - [x] Créer une table pour gérer jusqu'à 4 dates par séquence - [x] Mettre à jour toutes les procédures tRPC pour utiliser "séquence" - [x] Renommer toutes les interfaces et pages (AdminSessions → AdminSequences) - [x] Adapter le formulaire de création/édition pour gérer 4 dates - [x] Mettre à jour la page d'inscription pour afficher toutes les dates d'une séquence - [x] Modifier la logique d'inscription pour inscrire à toutes les dates - [x] Mettre à jour les exports PDF/Excel avec toutes les dates - [x] Adapter les emails pour inclure toutes les dates de la séquence - [x] Mettre à jour les invitations Outlook pour créer 4 événements si nécessaire - [x] Renommer partout dans l'interface utilisateur (labels, titres, descriptions) ## Corrections urgentes - [x] Corriger l'erreur React "Cannot update a component while rendering" dans Home.tsx - [x] Corriger le bug de modification des horaires des séquences - [x] Corriger le décalage d'une heure lors de l'enregistrement des dates (15h00 saisi devient 16h00 en base) - [x] Corriger la mise à jour du nombre d'inscrits sur la page d'inscription publique - [x] Corriger le décalage d'une heure entre la saisie et l'affichage des dates de séquences - [x] Corriger le décalage d'une heure à l'affichage des dates (problème de formatage lors de la récupération) - [x] Corriger les fonctions formatDate pour gérer les objets Date JavaScript en plus des chaînes MySQL - [x] Forcer le fuseau horaire Europe/Paris dans la connexion MySQL pour éliminer le décalage d'une heure - [x] Corriger le décalage horaire persistant dans parseLocalDateTime (09:48 envoyé devient 10:48 en base) - [x] Corriger l'erreur "toISOString is not a function" lors de la modification de séquences - [x] Ajouter le champ "Public cible" dans la fiche formation avec liste déroulante (Directeur, Chef de service, Autre) - [x] Mettre à jour le schéma de base de données pour les formations - [x] Mettre à jour les formulaires de gestion des formations - [x] Afficher le public cible dans les listes et exports - [x] Déplacer le champ "Public cible" des formations vers les séquences - [x] Retirer publicCible du schéma formations - [x] Ajouter publicCible au schéma sequences - [x] Mettre à jour les procédures tRPC pour sequences - [x] Mettre à jour le formulaire de création/édition de séquences - [x] Afficher le public cible dans la liste des séquences - [x] Afficher le public cible par séquence sur la page d'inscription publique - [x] Corriger le formulaire de modification des séquences pour afficher le champ Public cible ## Bugs critiques à corriger - [x] La validation d'une inscription ne fonctionne pas (déjà corrigé dans la version restaurée) - [x] Lorsqu'un apprenant s'inscrit, il n'apparaît pas dans la liste des apprenants (déjà corrigé dans la version restaurée) ## Nouvelle fonctionnalité - Alerte public cible - [x] Analyser le code d'inscription pour identifier où ajouter l'alerte - [x] Implémenter la logique de vérification du public cible dans le formulaire d'inscription - [x] Afficher une alerte d'information (non bloquante) si le public cible ne correspond pas - [x] Tester l'alerte avec différents scénarios (correspondance, non-correspondance) ## Inclusion du public cible dans les exports - [x] Analyser le code des exports Excel et PDF - [x] Ajouter le public cible dans l'export Excel des listes d'inscrits - [x] Ajouter le public cible dans l'export PDF des listes d'inscrits - [x] Ajouter le public cible dans l'export PDF des feuilles de présence - [x] Tester tous les exports pour vérifier l'affichage correct ## Ajout du filtre par public cible - [x] Analyser la page AdminSequences pour comprendre le système de filtres existant - [x] Ajouter un état pour le filtre publicCible - [x] Ajouter le composant Select pour le filtre publicCible dans l'interface - [x] Implémenter la logique de filtrage par public cible - [x] Tester le filtre avec différentes valeurs ## Badges de couleur pour le public cible - [x] Créer un composant Badge pour afficher le public cible avec des couleurs distinctes - [x] Intégrer le Badge dans le tableau des séquences (AdminSequences) - [x] Intégrer le Badge dans la page des inscrits (AdminSequenceInscrits) - [x] Tester l'affichage des badges avec différents publics cibles ## Rapport d'analyse public cible vs fonction appre- [x] Créer une nouvelle page AdminRapportPublicCible - [x] Ajouter la route dans App.tsx - [x] Ajouter un lien dans le menu de navigation (DashboardLayout- [x] Créer une procédure tRPC pour récupérer les données d'analyse - [x] Implémenter la logique de comparaison public cible vs fonction apprenants - [x] Afficher les statistiques et écarts dans l'interface - [x] Tester le rapport avec différentes données ## Gestion des utilisateurs de l'application - [x] Analyser le schéma actuel de la table users - [x] Ajouter les champs nécessaires (statut actif/inactif, date de création compte) - [x] Créer les procédures tRPC pour la gestion des utilisateurs (liste, création, modification, désactivation) - [x] Créer la page AdminUsers avec tableau des utilisateurs - [x] Implémenter le formulaire de création d'utilisateur - [x] Implémenter le formulaire de modification d'utilisateur - [x] Ajouter la fonctionnalité d'activation/désactivation des comptes - [x] Ajouter des filtres de recherche (nom, email, rôle, statut) - [x] Ajouter la gestion des rôles (admin, user) - [x] Intégrer la page dans le menu de navigation - [x] Tester toutes les fonctionnalités de gestion des utilisateurs ## Ajout de la fonctionnalité de création d'utilisateurs - [x] Ajouter une procédure tRPC pour créer un nouvel utilisateur - [x] Ajouter un bouton "Ajouter un utilisateur" dans la page AdminUsers - [x] Créer un dialogue de création avec formulaire (nom, email, rôle) - [x] Tester la création d'un nouvel utilisateur ## Réinitialisation de mot de passe - [x] Créer une table password_reset_tokens dans le schéma - [x] Ajouter les fonctions de gestion des tokens dans db.ts - [x] Créer une procédure tRPC pour générer un token et envoyer l'email - [x] Ajouter un bouton "Réinitialiser le mot de passe" dans AdminUsers - [x] Créer un dialogue de confirmation pour la réinitialisation - [x] Tester la génération de token et l'envoi d'email ## Correction affichage menu latéral - [x] Intégrer la page AdminUsers dans le DashboardLayout - [x] Vérifier l'affichage du menu latéral sur la page utilisateurs ## Correction de l'envoi d'emails pour réinitialisation de mot de passe - [x] Analyser le service d'envoi d'emails actuel - [x] Rechercher l'API d'envoi d'emails disponible dans Manus - [x] Intégrer un vrai service d'envoi d'emails (Resend) - [x] Créer la documentation de configuration EMAIL_SETUP.md ## Interface de personnalisation des templates d'emails - [x] Créer la table email_templates dans le schéma - [x] Créer les procédures backend pour CRUD des templates - [x] Créer la page AdminEmailTemplates - [x] Implémenter l'éditeur de template (logo, couleurs, textes) - [x] Ajouter la prévisualisation en temps réel - [x] Modifier le service d'envoi pour utiliser les templates personnalisés - [x] Ajouter le lien dans le menu de navigation - [x] Tester la personnalisation et l'envoi avec templates personnalisés ## Configuration SMTP via interface - [x] Créer la table email_config dans le schéma - [x] Créer les procédures backend pour CRUD de la configuration - [x] Ajouter une procédure de test d'envoi d'email - [x] Modifier le service d'envoi pour utiliser la config en base - [x] Créer la page AdminEmailConfig - [x] Implémenter le formulaire de configuration (API key, email expéditeur, mode) - [x] Ajouter le test d'envoi immédiat avec feedback - [x] Ajouter la validation de domaine - [x] Ajouter le basculement simulation/production - [x] Ajouter le lien dans le menu de navigation - [x] Tester la configuration et l'envoi d'emails ## Correction erreur OAuth callback failed - [x] Vérifier les logs du serveur pour identifier l'erreur exacte (colonne openId manquante) - [x] Corriger le problème dans le code OAuth (ajout manuel des colonnes openId et loginMethod) - [x] Tester l'authentification OAuth complète ## Ajout "Tous" dans les publics cible - [x] Localiser où la liste des publics cible est définie dans le code - [x] Ajouter "Tous" dans la liste des publics cible (schéma DB + frontend) - [x] Mettre à jour AdminSequences.tsx (types, options, badges violet) - [x] Mettre à jour AdminSequenceInscrits.tsx (labels et badges) - [x] Mettre à jour AdminRapportPublicCible.tsx (labels et badges) - [x] Mettre à jour Inscription.tsx (mapping, affichage, logique d'alerte) - [x] Tester l'affichage dans le formulaire de création/édition de séquence ## Corrections demandées - Gestion des séquences - [x] Ajouter le champ "Public cible" dans le dialogue de modification des séquences - [x] Afficher "nombre d'inscrits / capacité" dans la colonne capacité du tableau des séquences ## Ajout du champ Formateur dans les séquences - [x] Ajouter la colonne "formateur" dans la table sequences (texte nullable) - [x] Mettre à jour les procédures tRPC create et update pour inclure le champ formateur - [x] Ajouter le champ formateur dans le formulaire de création de séquence - [x] Ajouter le champ formateur dans le formulaire de modification de séquence - [x] Tester la création et modification avec le nouveau champ ## Améliorations du champ Formateur - [x] Afficher le formateur dans le tableau des séquences (nouvelle colonne) - [x] Créer une table formateurs dans la base de données - [x] Ajouter les procédures tRPC pour gérer les formateurs (CRUD) - [x] Remplacer le champ texte par un composant avec autocomplétion - [x] Permettre l'ajout rapide de nouveaux formateurs depuis le formulaire - [x] Ajouter le formateur dans les templates d'emails d'invitation - [x] Tester l'autocomplétion et l'affichage dans les emails ## Améliorations de la gestion des séquences ### 1. Indicateur visuel de remplissage - [x] Créer un composant ProgressBar avec couleurs (vert/orange/rouge) - [x] Intégrer la barre de progression dans la colonne capacité du tableau - [x] Définir les seuils de couleur (vert <70%, orange 70-90%, rouge >90%) ### 2. Vue calendrier des séquences - [x] Créer la page AdminCalendrier.tsx - [x] Intégrer un composant calendrier mensuel - [x] Afficher les séquences sur les dates correspondantes - [x] Ajouter la navigation mois précédent/suivant - [x] Permettre le clic sur une séquence pour voir les détails - [x] Ajouter le lien dans le menu de navigation ### 3. Rappels automatiques personnalisables - [x] Créer une table rappels dans la base de données - [x] Ajouter les procédures tRPC pour gérer les rappels - [x] Créer la page de configuration des rappels - [x] Permettre de définir plusieurs rappels (J-15, J-7, J-1) - [x] Associer un template d'email à chaque rappel - [x] Interface de gestion complète (création, modification, suppression) - [ ] Implémenter le système d'envoi automatique des rappels (nécessite service externe) - [ ] Ajouter un job/cron pour vérifier et envoyer les rappels (nécessite service externe)