19 KiB
19 KiB
Gestion des Formations Manager Itinova - TODO
Fonctionnalités principales
- Gestion des formations (CRUD)
- Gestion des séquences avec jusqu'à 4 dates par séquence
- Gestion des apprenants (CRUD)
- Système d'inscription avec validation de capacité
- Génération d'invitations Outlook (.ics)
- Envoi d'emails automatiques (confirmation, teaser, rappels)
- Exports PDF et Excel
- Filtres et recherche sur toutes les pages
- Champ "Fonction" dans la fiche apprenant
- Filtres par fonction sur les pages apprenants et inscrits
- Graphique de répartition par fonction sur le tableau de bord
- Personnalisation des templates d'emails
- Gestion des utilisateurs avec rôles (admin/user)
- Configuration SMTP pour l'envoi d'emails
- Authentification locale avec email/mot de passe
- Cohabitation OAuth Manus + authentification locale
Champ "Public cible" dans les séquences
- Ajouter le champ "Public cible" dans la table sequences
- Ajouter le champ dans le formulaire de création de séquence
- Ajouter le champ dans le formulaire de modification de séquence
- Afficher le public cible sur la page d'inscription publique
- Ajouter "Tous" dans la liste des publics cible
- Ajouter le badge de public cible dans le tableau des séquences
- Ajouter le filtre par public cible sur la page de gestion des séquences
- Ajouter le public cible dans tous les exports (Excel, PDF)
Alerte d'incohérence public cible / fonction
- Ajouter une alerte d'information lors de l'inscription
- Afficher l'alerte si le public cible ne correspond pas à la fonction
- Laisser l'inscription se faire (alerte non bloquante)
- Pas d'alerte si le public cible est "Tous"
Rapport d'analyse public cible
- Créer une page de rapport comparant public cible et fonction des inscrits
- Afficher les écarts entre public cible et fonction réelle
- Ajouter des statistiques et graphiques pour visualiser les écarts
- Ajouter le lien dans le menu de navigation
Gestion des formateurs
- Créer la table formateurs dans la base de données
- Créer les procédures tRPC (list, create, delete)
- Créer le composant FormateurCombobox avec autocomplétion
- Ajouter le champ formateur dans le formulaire de création de séquence
- Ajouter le champ formateur dans le formulaire de modification de séquence
- Afficher le formateur dans le tableau des séquences
- Afficher le formateur dans les emails d'invitation
- Corriger le stockage pour utiliser formateurId au lieu du nom
Barre de progression colorée pour les séquences
- Créer le composant CapacityProgressBar
- Afficher "nbInscrits / capacité" avec pourcentage
- Code couleur automatique : vert (<70%), orange (70-90%), rouge (>90%)
- Intégrer dans le tableau des séquences
- Corriger le composant Progress pour supporter indicatorClassName
Vue calendrier mensuel
- Créer la page AdminCalendrier
- Afficher un calendrier mensuel avec navigation
- Afficher les séquences sur leurs dates respectives
- Ajouter un dialog de détails au clic sur une séquence
- Ajouter le lien "Calendrier" dans le menu de navigation
- Afficher le nom de la formation + nom de la séquence
- Afficher le lieu, le formateur et le nombre d'inscrits
- Corriger le bug de dates (parseISO vs Date)
- Corriger le bug React #31 (clés stables pour les jours)
Système de rappels automatiques
- Créer la table rappels dans la base de données
- Créer les procédures tRPC (list, create, update, delete)
- Créer la page AdminRappels pour configurer les rappels
- Permettre de configurer des rappels multiples (J-15, J-7, J-1)
- Templates d'emails personnalisables avec variables dynamiques
- Activation/désactivation des rappels
- Infrastructure pour l'envoi automatique (scheduler)
- Ajouter le lien "Rappels" dans le menu de navigation
- Créer les templates J-7 et J-1 avec style Itinova
- Implémenter le scheduler automatique (vérification toutes les heures)
- Corriger le bug d'envois multiples (un seul email par séquence)
Améliorations diverses
- Réorganisation du menu de navigation en 4 zones (Tableau de bord, Gestion, Configuration, Analyses)
- Couleur bleue pour les titres des zones du menu
- Icône œil en bleu pour la visualisation
- Icône corbeille en rouge pour la suppression
- Badges de couleur pour les fonctions des apprenants
- Badges de couleur pour le public cible des séquences
- Couleurs uniques pour chaque formation dans le tableau des séquences
- Badges Actif/Inactif pour les apprenants
- Page dédiée aux établissements avec statistiques
Améliorations du calendrier
- Ajout de filtres (formation, lieu, public cible)
- Vues alternatives (semaine, jour) en plus de la vue mensuelle
- Export PDF du calendrier
- Export iCal (.ics) pour import dans Outlook/Google Calendar
Import Excel pour créer formations et séquences en masse
- Créer le template Excel avec colonnes prédéfinies
- Créer la procédure backend de parsing et validation
- Créer l'interface frontend avec upload et prévisualisation
- Ajouter la documentation utilisateur
- Corriger le bug de conflit de noms (formations vs table formations)
- Corriger le bug de colonne lienInscription → lienUnique
- Corriger le bug de récupération des IDs après insertion
- Ajouter le menu de navigation sur la page Import Excel
- Déplacer le menu Import Excel vers le bloc Configuration
Corrections décalage horaire
- Correction du décalage horaire dans le formulaire de création de séquence
- Correction du décalage horaire dans le formulaire d'édition de séquence
- Correction du décalage horaire dans l'affichage des séquences
- Correction du décalage horaire dans la page d'inscription publique
- Utilisation des méthodes locales (getHours, getMinutes) au lieu des méthodes UTC
Scripts de déploiement VPS
- Créer backup-before-update.sh (sauvegarde automatique)
- Créer update-app.sh (mise à jour automatique)
- Créer create-deployment-package.sh (création de package)
- Créer GUIDE_MISE_A_JOUR.md (documentation complète)
- Corriger les chemins pour utiliser formation-manager-itinova
- Corriger le bug "drizzle-kit: not found" (pnpm install sans --prod)
- Créer DEPLOIEMENT-MANUEL.md (guide déploiement sans Git)
- Créer deploy-update-manual.sh (script sans git pull)
- Créer DEPLOIEMENT-TARGZ.md (guide avec archive tar.gz)
- Créer deploy-update-targz.sh (script pour archive)
Support SMTP Direct (sans Resend)
- Ajouter les champs SMTP dans la table emailConfig
- Créer server/_core/smtpSender.ts avec Nodemailer
- Modifier emailSender.ts pour supporter SMTP et Resend
- Ajouter l'interface de configuration SMTP dans AdminEmailConfig
- Corriger le bug d'enregistrement des champs SMTP
- Corriger la fonction upsertEmailConfig pour éviter les doublons
- Corriger l'affichage du statut (SMTP Direct au lieu de Resend)
Améliorations emails groupés (teaser et rappel)
- Ajouter des logs serveur détaillés pour l'envoi groupé
- Afficher le nombre d'emails envoyés avec succès et échoués
- Avertir si aucun email n'est envoyé (aucun apprenant confirmé)
- Corriger le remplacement des tags {{nomFormation}}, {{nomSequence}}, etc.
- Ajouter le formateur et le lieu dans l'email de teaser
- Ajouter toutes les variables disponibles dans les templates
Améliorations templates d'emails
- Ajouter la possibilité de personnaliser le corps du message
- Ajouter un éditeur de texte riche (TipTap) pour formater le contenu
- Ajouter 7 boutons pour insérer rapidement des variables dynamiques
- Afficher la prévisualisation HTML en temps réel
- Implémenter le remplacement automatique des variables lors de l'envoi
- Ajouter un bouton d'aperçu avec données réelles d'un apprenant
- Ajouter le template de rappel J-1 dans la liste
- Corriger les templates J-7 et J-1 pour afficher toutes les dates
- Ajouter la variable {{datesHTML}} pour afficher toutes les dates formatées
- Ajouter le bouton {{datesHTML}} dans l'interface
- Corriger la variable {{datesHTML}} dans l'email de confirmation
Tableau de bord analytique
- Créer la page AdminTableauBordAnalytique
- Afficher les statistiques globales (cartes)
- Graphique d'évolution des inscriptions par mois
- Graphique du taux de remplissage des séquences
- Top 10 des établissements participants
- Répartition par fonction
- Ajouter des filtres de période (mois, trimestre, année)
- Implémenter l'export Excel des rapports analytiques
- Corriger l'incohérence des statistiques de répartition par fonction
- Ajouter le graphique de répartition par établissement sur le tableau de bord principal
Améliorations visuelles
- Afficher le taux de remplissage en couleur conditionnelle
- Icône corbeille en rouge pour la suppression
- Icône œil en bleu pour la visualisation
- Couleurs uniques pour chaque formation dans le tableau des séquences
- Badges de couleur pour les fonctions des apprenants
- Badges Actif/Inactif pour les apprenants
Feuilles de présence améliorées
- Ajouter le logo Itinova en haut à droite (40x15mm)
- Afficher le nom du formateur dans l'en-tête
- Ajouter deux colonnes de signature par apprenant (Matin / Après-midi)
- Générer une page par date de formation
- Ajouter la signature du formateur en bas de page avec date
Détail par apprenant
- Créer la procédure tRPC apprenants.getInscriptions
- Créer la page AdminApprenantDetail
- Afficher les informations personnelles de l'apprenant
- Afficher le tableau de toutes ses inscriptions
- Ajouter le bouton "Détail" dans la page AdminApprenants
- Ajouter la route /admin/apprenants/:id dans App.tsx
Correction problème création excessive d'utilisateurs
- Analyser la base de données pour identifier les doublons
- Nettoyer les utilisateurs en double
- Ajouter la contrainte UNIQUE sur la colonne openId
- Vérifier que onDuplicateKeyUpdate fonctionne correctement
Ajout identifiant de connexion et modification mot de passe
- Ajouter le champ username dans le schéma de la base de données
- Mettre à jour les procédures tRPC create et update
- Implémenter le hashage du mot de passe avec bcryptjs
- Ajouter la colonne "Identifiant" dans le tableau des utilisateurs
- Ajouter les champs dans le formulaire de création
- Ajouter les champs dans le formulaire d'édition
Utilisateur administrateur spécial
- Créer l'utilisateur "Administrateur" avec identifiant "adminServFormation"
- Désactiver le bouton de suppression pour cet utilisateur
- Rendre les champs nom et identifiant en lecture seule
- Permettre la modification de l'email et du mot de passe uniquement
- Garantir un accès administrateur permanent au système
Page de connexion locale
- Créer la route d'authentification backend avec hashage bcrypt
- Créer la page Login.tsx avec formulaire username/password
- Implémenter la session JWT
- Tester avec l'utilisateur adminServFormation
- Ajouter la route /login dans App.tsx
- Créer une page de choix de connexion à la racine (/)
- Corriger la redirection après déconnexion vers la page de choix
- Ajouter la détection automatique de l'état de connexion
- Corriger l'authentification locale pour compatibilité avec OAuth
Guide de configuration HTTPS
- Créer le guide complet de configuration HTTPS avec Let's Encrypt
- Créer le script d'installation automatique
- Créer le template nginx optimisé
Questionnaires de satisfaction et évaluation des acquis
- Créer le schéma de base de données (tables questionnaires, questions, réponses)
- Développer les procédures backend tRPC pour la gestion des questionnaires
- Créer l'interface d'administration des questionnaires
- Créer l'interface publique de réponse aux questionnaires
- Implémenter l'envoi automatique post-formation
- Créer les tableaux de bord d'analyse avec graphiques (satisfaction par formation/formateur)
- Implémenter les exports Excel/PDF des feedbacks
- Tester le système complet (création, envoi, réponse, analyse)
- Déployer sur le serveur VPS
Amélioration : Prévisualisation des questionnaires
- Ajouter un bouton "Prévisualiser" dans la page d'édition de questionnaire
- Créer un modal de prévisualisation avec le rendu exact du questionnaire
Exports et notifications pour les questionnaires
- Créer les fonctions backend d'export Excel des résultats
- Créer les fonctions backend d'export PDF des résultats
- Ajouter les boutons d'export dans la page d'analyse
- Implémenter le système de notifications pour les administrateurs
- Envoyer une notification lors de chaque nouvelle réponse à un questionnaire
Tableau de bord de suivi des questionnaires
- Créer les fonctions backend pour les statistiques par formation
- Créer les fonctions backend pour l'évolution temporelle
- Créer les fonctions backend pour la comparaison par formateur
- Créer les procédures tRPC pour le tableau de bord
- Créer la page AdminQuestionnaireSuivi avec graphiques
- Ajouter le lien dans le menu de navigation
- Tester toutes les fonctionnalités
Correction des erreurs SQL du tableau de bord de suivi
- Corriger la requête getEvolutionTemporelle (DATE_FORMAT)
- Corriger la requête getStatsByFormateur (sous-requête AVG)
- Simplifier les requêtes pour compatibilité MySQL
- Tester toutes les requêtes corrigées
Espace Formateur
Schéma de base de données
- Créer la table supportsFormation pour stocker les documents
- Ajouter les relations avec sequences
- Migrer le schéma avec pnpm db:push
Backend
- Créer formateurDb.ts avec les fonctions de requête
- Ajouter les procédures tRPC pour le calendrier du formateur
- Ajouter les procédures tRPC pour la liste des apprenants
- Ajouter les procédures tRPC pour l'upload de supports
- Ajouter les procédures tRPC pour la validation des présences
- Ajouter les procédures tRPC pour l'historique
Frontend
- Créer la page FormateurDashboard (calendrier)
- Créer la page FormateurSequence (détail séquence avec apprenants)
- Créer la page FormateurSupports (gestion des supports)
- Créer la page FormateurPresences (validation présences)
- Créer la page FormateurHistorique (historique formations)
- Ajouter les routes dans App.tsx
- Ajouter le menu de navigation formateur
Tests
- Tester toutes les fonctionnalités de l'espace formateur
Correction bug rappels multiples
- Analyser le code du scheduler de rappels
- Identifier pourquoi plusieurs emails sont envoyés
- Corriger la logique pour envoyer un seul email par séquence
- Tester avec la formation JetSki du 15/12/2025
Améliorations système de rappels
Historique des rappels
- Créer la table logsRappels dans le schéma
- Migrer le schéma avec pnpm db:push
- Créer les fonctions de log dans rappelDb.ts
- Intégrer le logging dans rappelScheduler.ts
- Ajouter la vérification des doublons avant envoi
Test manuel des rappels
- Créer la procédure tRPC pour tester un rappel
- Ajouter le bouton de test dans AdminRappels.tsx (optionnel)
- Implémenter la logique de test sans modifier les logs (optionnel)
Notifications d'échec
- Créer la fonction de notification admin
- Intégrer les notifications dans le catch des erreurs d'envoi
- Ajouter un résumé des échecs dans les logs
Historique et statistiques des rappels
Backend
- Créer les fonctions de récupération des logs avec filtres
- Créer les fonctions de statistiques (taux succès, emails problématiques)
- Ajouter les procédures tRPC pour l'historique
- Ajouter les procédures tRPC pour les statistiques
Page d'historique
- Créer AdminRappelsHistorique.tsx avec tableau des logs
- Ajouter les filtres (date, séquence, statut, email)
- Ajouter la recherche par email
- Ajouter la pagination
- Ajouter la route dans App.tsx
Tableau de bord statistiques
- Créer AdminRappelsStats.tsx avec cartes de statistiques
- Ajouter le graphique d'évolution des envois
- Ajouter le graphique du taux de succès
- Ajouter la liste des emails problématiques
- Ajouter la route dans App.tsx
Système de réessai automatique
- Ajouter le champ nbTentatives dans logsRappels
- Ajouter le champ prochainEssai dans logsRappels
- Créer la fonction de retry avec délai exponentiel
- Intégrer le retry dans rappelScheduler
- Limiter à 3 tentatives maximum
Correction erreurs tRPC (HTML au lieu de JSON)
- Analyser les logs du serveur pour identifier les requêtes qui échouent
- Identifier les procédures tRPC qui causent les erreurs
- Corriger les erreurs côté serveur (emailBody, reduce)
- Tester la page admin pour vérifier que les erreurs sont résolues
Rendre accessibles les pages d'historique et statistiques des rappels
- Vérifier que les routes sont bien définies dans App.tsx
- Vérifier que les liens sont bien dans le menu DashboardLayout
- Ajouter la gestion des sous-menus dans DashboardLayout
- Tester l'accès aux pages /admin/rappels/historique et /admin/rappels/statistiques
Système plier/déplier pour le menu de navigation
- Ajouter un état pour gérer les sections ouvertes/fermées
- Ajouter des icônes chevron pour indiquer l'état
- Implémenter la logique de toggle pour chaque section
- Garder la section active automatiquement ouverte
- Tester le comportement sur toutes les sections
Correction bug accordéons qui s'ouvrent tous
- Corriger le useEffect pour n'ouvrir que la section contenant l'item actif
- Supprimer le useEffect problématique (toutes sections ouvertes par défaut)
- Utiliser localStorage pour persister l'état des sections
- Tester le comportement en cliquant sur différents items
Modification comportement par défaut accordéon menu
- Modifier l'initialisation pour ouvrir uniquement TABLEAU DE BORD par défaut
- Fermer GESTION, CONFIGURATION, ANALYSES par défaut
- Tester le comportement à l'ouverture
Bug compteur d'inscrits après suppression
- Analyser le code de suppression d'inscription
- Identifier pourquoi le compteur ne se met pas à jour
- Corriger le bug de rafraîchissement du compteur
- Tester la suppression d'un apprenant et vérifier le compteur
Bug nom formateur dans email rappel J-7
- Analyser le code d'envoi des emails de rappel
- Comparer avec le code de prévisualisation
- Identifier pourquoi le nom du formateur n'est pas remplacé
- Corriger le bug de remplacement du nom du formateur
- Bug persistant : J-1 fonctionne mais J-7 ne fonctionne toujours pas
- Analyser la différence entre le template J-7 et J-1
- Corriger le template J-7 définitivement