Files
formation-manager-itinova/todo.md

163 lines
7.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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