Files
formation-manager-itinova/todo.md
Manus Sandbox 1eba34a31f Checkpoint: Trois corrections appliquées
 **1. "Tous" dans le formulaire nouvelle séquence**
Ajout de l'option "Tous" dans la liste des publics cible du formulaire de création de séquence, avec badge violet et labels correspondants.

 **2. Couleurs de la barre de progression**
Correction du composant Progress pour supporter `indicatorClassName`. La barre affiche maintenant les bonnes couleurs selon le taux de remplissage : vert (<70%), orange (70-90%), rouge (>90%).

 **3. Informations complètes dans le calendrier**
Enrichissement des cases du calendrier avec lieu, formateur et nombre d'inscrits pour chaque séquence, permettant une vue d'ensemble plus complète.
2025-11-19 11:54:47 -05:00

15 KiB

Gestion des Formations Manager Itinova - TODO

Phase 1 : Planification et initialisation

  • Initialiser le projet avec architecture full-stack
  • Créer le plan de développement
  • Créer le fichier todo.md

Phase 2 : Modèle de données

  • Créer la table des formations (nom, description, lien unique)
  • Créer la table des sessions (dates, lieu, capacité max 12, statut blocage J-15)
  • Créer la table des inscriptions (apprenant, session, statut)
  • Créer la table des apprenants (nom, prénom, email, code établissement)
  • Implémenter les relations entre tables
  • Ajouter les contraintes d'unicité pour éviter les doubles inscriptions

Phase 3 : Interface d'administration

  • Créer le dashboard administrateur avec navigation
  • Créer l'interface de gestion des formations (CRUD)
  • Créer l'interface de gestion des sessions (CRUD)
  • Créer l'interface de gestion des apprenants (CRUD)
  • Afficher les listes d'inscrits par session
  • Implémenter la gestion des rôles (admin DRH, responsable, stagiaire)

Phase 4 : Système d'inscription

  • Créer la page d'inscription publique avec lien unique par formation
  • Implémenter la validation de capacité maximale (12 participants)
  • Implémenter la validation anti-double inscription
  • Implémenter le blocage des inscriptions/désinscriptions à J-15
  • Créer le système de liste d'attente si session complète
  • Afficher les sessions disponibles avec places restantes

Phase 5 : Invitations et emails automatiques

  • Implémenter la génération d'invitations Outlook (.ics) avec statut " occupé "
  • Inclure le lieu de formation dans les invitations
  • Créer le système d'envoi d'emails automatiques
  • Créer le template email de confirmation d'inscription
  • Créer le template email teaser pour chaque groupe
  • Créer le template email de rappel à J-7
  • Implémenter l'envoi automatique des emails selon les événements

Phase 6 : Exports

  • Implémenter l'export Excel des listes d'inscrits par session
  • Implémenter l'export PDF des listes d'inscrits par session
  • Créer la génération de feuille de présence PDF (nom, prénom, code établissement)
  • Ajouter les boutons d'export dans l'interface admin

Phase 7 : Tests et documentation

  • Tester le flux complet d'inscription
  • Tester les validations et contraintes
  • Tester la génération des invitations et emails
  • Tester les exports PDF/Excel
  • Créer la documentation utilisateur
  • Créer la documentation d'administration

P## Phase 8 : Livraison

  • Vérifier toutes les fonctionnalités
  • Créer un checkpoint final
  • Présenter l'application à l'utilisateur

Corrections à apporter

  • Corriger la mise à jour de la liste des apprenants après inscription
  • Implémenter l'envoi effectif des emails de confirmation

Nouvelles fonctionnalités

  • Ajouter des filtres de tri sur la page des sessions (date, lieu, places restantes)

  • Ajouter des filtres de recherche sur la page des formations

  • Ajouter des filtres de recherche sur la page des apprenants

  • Ajouter des filtres complets sur la page de gestion des inscrits (recherche, statut, établissement, tri par date)

  • Ajouter le champ "Fonction" (Directeur, Chef de service, Autre) dans la fiche apprenant

  • Mettre à jour le schéma de base de données

  • Mettre à jour les formulaires d'inscription et de gestion

  • Ajouter la fonction dans les exports PDF/Excel

Améliorations supplémentaires

  • Ajouter un filtre par fonction sur la page des apprenants
  • Ajouter un filtre par fonction sur la page des inscrits
  • Créer des statistiques de répartition par fonction sur le tableau de bord
  • Ajouter des graphiques de visualisation des données
  • Personnaliser les templates d'emails avec la fonction de l'apprenant

Refonte : Sessions → Séquences avec dates multiples

  • Renommer "Session" en "Séquence" dans le schéma de base de données
  • Créer une table pour gérer jusqu'à 4 dates par séquence
  • Mettre à jour toutes les procédures tRPC pour utiliser "séquence"
  • Renommer toutes les interfaces et pages (AdminSessions → AdminSequences)
  • Adapter le formulaire de création/édition pour gérer 4 dates
  • Mettre à jour la page d'inscription pour afficher toutes les dates d'une séquence
  • Modifier la logique d'inscription pour inscrire à toutes les dates
  • Mettre à jour les exports PDF/Excel avec toutes les dates
  • Adapter les emails pour inclure toutes les dates de la séquence
  • Mettre à jour les invitations Outlook pour créer 4 événements si nécessaire
  • Renommer partout dans l'interface utilisateur (labels, titres, descriptions)

Corrections urgentes

  • Corriger l'erreur React "Cannot update a component while rendering" dans Home.tsx

  • Corriger le bug de modification des horaires des séquences

  • Corriger le décalage d'une heure lors de l'enregistrement des dates (15h00 saisi devient 16h00 en base)

  • Corriger la mise à jour du nombre d'inscrits sur la page d'inscription publique

  • Corriger le décalage d'une heure entre la saisie et l'affichage des dates de séquences

  • Corriger le décalage d'une heure à l'affichage des dates (problème de formatage lors de la récupération)

  • Corriger les fonctions formatDate pour gérer les objets Date JavaScript en plus des chaînes MySQL

  • Forcer le fuseau horaire Europe/Paris dans la connexion MySQL pour éliminer le décalage d'une heure

  • Corriger le décalage horaire persistant dans parseLocalDateTime (09:48 envoyé devient 10:48 en base)

  • Corriger l'erreur "toISOString is not a function" lors de la modification de séquences

  • Ajouter le champ "Public cible" dans la fiche formation avec liste déroulante (Directeur, Chef de service, Autre)

  • Mettre à jour le schéma de base de données pour les formations

  • Mettre à jour les formulaires de gestion des formations

  • Afficher le public cible dans les listes et exports

  • Déplacer le champ "Public cible" des formations vers les séquences

  • Retirer publicCible du schéma formations

  • Ajouter publicCible au schéma sequences

  • Mettre à jour les procédures tRPC pour sequences

  • Mettre à jour le formulaire de création/édition de séquences

  • Afficher le public cible dans la liste des séquences

  • Afficher le public cible par séquence sur la page d'inscription publique

  • Corriger le formulaire de modification des séquences pour afficher le champ Public cible

Bugs critiques à corriger

  • La validation d'une inscription ne fonctionne pas (déjà corrigé dans la version restaurée)
  • 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

  • Analyser le code d'inscription pour identifier où ajouter l'alerte
  • Implémenter la logique de vérification du public cible dans le formulaire d'inscription
  • Afficher une alerte d'information (non bloquante) si le public cible ne correspond pas
  • Tester l'alerte avec différents scénarios (correspondance, non-correspondance)

Inclusion du public cible dans les exports

  • Analyser le code des exports Excel et PDF
  • Ajouter le public cible dans l'export Excel des listes d'inscrits
  • Ajouter le public cible dans l'export PDF des listes d'inscrits
  • Ajouter le public cible dans l'export PDF des feuilles de présence
  • Tester tous les exports pour vérifier l'affichage correct

Ajout du filtre par public cible

  • Analyser la page AdminSequences pour comprendre le système de filtres existant
  • Ajouter un état pour le filtre publicCible
  • Ajouter le composant Select pour le filtre publicCible dans l'interface
  • Implémenter la logique de filtrage par public cible
  • Tester le filtre avec différentes valeurs

Badges de couleur pour le public cible

  • Créer un composant Badge pour afficher le public cible avec des couleurs distinctes
  • Intégrer le Badge dans le tableau des séquences (AdminSequences)
  • Intégrer le Badge dans la page des inscrits (AdminSequenceInscrits)
  • 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

  • Ajouter la route dans App.tsx
  • 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
  • Implémenter la logique de comparaison public cible vs fonction apprenants
  • Afficher les statistiques et écarts dans l'interface
  • Tester le rapport avec différentes données

Gestion des utilisateurs de l'application

  • Analyser le schéma actuel de la table users
  • Ajouter les champs nécessaires (statut actif/inactif, date de création compte)
  • Créer les procédures tRPC pour la gestion des utilisateurs (liste, création, modification, désactivation)
  • Créer la page AdminUsers avec tableau des utilisateurs
  • Implémenter le formulaire de création d'utilisateur
  • Implémenter le formulaire de modification d'utilisateur
  • Ajouter la fonctionnalité d'activation/désactivation des comptes
  • Ajouter des filtres de recherche (nom, email, rôle, statut)
  • Ajouter la gestion des rôles (admin, user)
  • Intégrer la page dans le menu de navigation
  • Tester toutes les fonctionnalités de gestion des utilisateurs

Ajout de la fonctionnalité de création d'utilisateurs

  • Ajouter une procédure tRPC pour créer un nouvel utilisateur
  • Ajouter un bouton "Ajouter un utilisateur" dans la page AdminUsers
  • Créer un dialogue de création avec formulaire (nom, email, rôle)
  • Tester la création d'un nouvel utilisateur

Réinitialisation de mot de passe

  • Créer une table password_reset_tokens dans le schéma
  • Ajouter les fonctions de gestion des tokens dans db.ts
  • Créer une procédure tRPC pour générer un token et envoyer l'email
  • Ajouter un bouton "Réinitialiser le mot de passe" dans AdminUsers
  • Créer un dialogue de confirmation pour la réinitialisation
  • Tester la génération de token et l'envoi d'email

Correction affichage menu latéral

  • Intégrer la page AdminUsers dans le DashboardLayout
  • 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

  • Analyser le service d'envoi d'emails actuel
  • Rechercher l'API d'envoi d'emails disponible dans Manus
  • Intégrer un vrai service d'envoi d'emails (Resend)
  • Créer la documentation de configuration EMAIL_SETUP.md

Interface de personnalisation des templates d'emails

  • Créer la table email_templates dans le schéma
  • Créer les procédures backend pour CRUD des templates
  • Créer la page AdminEmailTemplates
  • Implémenter l'éditeur de template (logo, couleurs, textes)
  • Ajouter la prévisualisation en temps réel
  • Modifier le service d'envoi pour utiliser les templates personnalisés
  • Ajouter le lien dans le menu de navigation
  • Tester la personnalisation et l'envoi avec templates personnalisés

Configuration SMTP via interface

  • Créer la table email_config dans le schéma
  • Créer les procédures backend pour CRUD de la configuration
  • Ajouter une procédure de test d'envoi d'email
  • Modifier le service d'envoi pour utiliser la config en base
  • Créer la page AdminEmailConfig
  • Implémenter le formulaire de configuration (API key, email expéditeur, mode)
  • Ajouter le test d'envoi immédiat avec feedback
  • Ajouter la validation de domaine
  • Ajouter le basculement simulation/production
  • Ajouter le lien dans le menu de navigation
  • Tester la configuration et l'envoi d'emails

Amélioration disposition formulaire modification séquences

  • Réorganiser les champs du formulaire pour éviter tout chevauchement
  • Ajouter les champs Public cible et Formateur dans le formulaire de modification
  • Séparer Public cible et Formateur sur une ligne dédiée
  • Tester la disposition sur différentes tailles d'écran

Correction bug FormateurCombobox

  • Recréer le fichier FormateurCombobox.tsx manquant
  • Ajouter l'import de FormateurCombobox dans AdminSequences.tsx
  • Redémarrer le serveur pour détecter le nouveau fichier

Recréation des fichiers manquants

  • Recréer le composant CapacityProgressBar avec barre de progression colorée
  • Recréer la page AdminCalendrier avec vue calendrier mensuel
  • Recréer la page AdminRappels avec gestion des rappels automatiques
  • Intégrer CapacityProgressBar dans AdminSequences
  • Redémarrer le serveur pour détecter tous les nouveaux fichiers
  • Vérifier que tous les imports et routes sont corrects
  • Créer un checkpoint complet avec toutes les fonctionnalités

Correction affichage page calendrier

  • Ajouter la route /admin/calendrier dans App.tsx
  • Ajouter la route /admin/rappels dans App.tsx
  • Ajouter le lien "Calendrier" dans DashboardLayout
  • Ajouter le lien "Rappels" dans DashboardLayout
  • Ajouter les imports CalendarDays et Bell
  • Redémarrer le serveur
  • Tester l'accès aux pages calendrier et rappels

Vérification des trois fonctionnalités principales

  • Vérifier que CapacityProgressBar est bien utilisé dans AdminSequences
  • Vérifier que la page AdminCalendrier existe et est accessible
  • Vérifier que la page AdminRappels existe et est accessible
  • Ajouter les procédures tRPC manquantes pour les rappels
  • Créer un rapport de vérification complet

Corrections de bugs - Calendrier et taux de remplissage

  • Corriger l'affichage des séquences dans le calendrier de novembre (seq.dates au lieu de seq.datesFormation)
  • Vérifier la logique de filtrage des séquences par mois dans AdminCalendrier
  • Corriger le calcul du taux de remplissage (ajout de nbInscrits dans sequences.list)
  • Vérifier que sequences.list retourne bien le nombre d'inscrits

Correction bug calendrier - parseISO

  • Corriger l'erreur "e.split is not a function" dans AdminCalendrier
  • Ajouter une vérification du type de dateDebut avant parseISO
  • Gérer le cas où dateDebut est déjà un objet Date ou une chaîne

Trois corrections demandées

  • Ajouter "Tous" dans la liste des publics cible du formulaire "Nouvelle séquence"
  • Ajouter "Tous" dans les fonctions de badge et label
  • Corriger le composant Progress pour supporter indicatorClassName
  • Corriger les couleurs de la barre de progression (vert/orange/rouge) selon le taux de remplissage
  • Compléter les informations des séquences affichées dans le calendrier (lieu, formateur, nb inscrits)