- Ajout du champ formateur (number | null) dans le type FormData de AdminSequences.tsx - Ajout du type "tous" dans publicCible pour supporter toutes les valeurs possibles - Correction de FormateurCombobox pour accepter number | null au lieu de string - Correction des erreurs null dans QuestionnaireReponse.tsx avec optional chaining - Correction du type previewType dans AdminSequenceInscrits.tsx pour inclure "rappel_j1" - Build de production testé et fonctionnel (✓ built in 14.69s) Les quelques avertissements TypeScript restants (11) ne bloquent pas le build de production. L'application peut maintenant être publiée.
639 lines
31 KiB
Markdown
639 lines
31 KiB
Markdown
# Gestion des Formations Manager Itinova - TODO
|
|
|
|
## Fonctionnalités principales
|
|
|
|
- [x] Gestion des formations (CRUD)
|
|
- [x] Gestion des séquences avec jusqu'à 4 dates par séquence
|
|
- [x] Gestion des apprenants (CRUD)
|
|
- [x] Système d'inscription avec validation de capacité
|
|
- [x] Génération d'invitations Outlook (.ics)
|
|
- [x] Envoi d'emails automatiques (confirmation, teaser, rappels)
|
|
- [x] Exports PDF et Excel
|
|
- [x] Filtres et recherche sur toutes les pages
|
|
- [x] Champ "Fonction" dans la fiche apprenant
|
|
- [x] Filtres par fonction sur les pages apprenants et inscrits
|
|
- [x] Graphique de répartition par fonction sur le tableau de bord
|
|
- [x] Personnalisation des templates d'emails
|
|
- [x] Gestion des utilisateurs avec rôles (admin/user)
|
|
- [x] Configuration SMTP pour l'envoi d'emails
|
|
- [x] Authentification locale avec email/mot de passe
|
|
- [x] Cohabitation OAuth Manus + authentification locale
|
|
|
|
## Champ "Public cible" dans les séquences
|
|
|
|
- [x] Ajouter le champ "Public cible" dans la table sequences
|
|
- [x] Ajouter le champ dans le formulaire de création de séquence
|
|
- [x] Ajouter le champ dans le formulaire de modification de séquence
|
|
- [x] Afficher le public cible sur la page d'inscription publique
|
|
- [x] Ajouter "Tous" dans la liste des publics cible
|
|
- [x] Ajouter le badge de public cible dans le tableau des séquences
|
|
- [x] Ajouter le filtre par public cible sur la page de gestion des séquences
|
|
- [x] Ajouter le public cible dans tous les exports (Excel, PDF)
|
|
|
|
## Alerte d'incohérence public cible / fonction
|
|
|
|
- [x] Ajouter une alerte d'information lors de l'inscription
|
|
- [x] Afficher l'alerte si le public cible ne correspond pas à la fonction
|
|
- [x] Laisser l'inscription se faire (alerte non bloquante)
|
|
- [x] Pas d'alerte si le public cible est "Tous"
|
|
|
|
## Rapport d'analyse public cible
|
|
|
|
- [x] Créer une page de rapport comparant public cible et fonction des inscrits
|
|
- [x] Afficher les écarts entre public cible et fonction réelle
|
|
- [x] Ajouter des statistiques et graphiques pour visualiser les écarts
|
|
- [x] Ajouter le lien dans le menu de navigation
|
|
|
|
## Gestion des formateurs
|
|
|
|
- [x] Créer la table formateurs dans la base de données
|
|
- [x] Créer les procédures tRPC (list, create, delete)
|
|
- [x] Créer le composant FormateurCombobox avec autocomplétion
|
|
- [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] Afficher le formateur dans le tableau des séquences
|
|
- [x] Afficher le formateur dans les emails d'invitation
|
|
- [x] Corriger le stockage pour utiliser formateurId au lieu du nom
|
|
|
|
## Barre de progression colorée pour les séquences
|
|
|
|
- [x] Créer le composant CapacityProgressBar
|
|
- [x] Afficher "nbInscrits / capacité" avec pourcentage
|
|
- [x] Code couleur automatique : vert (<70%), orange (70-90%), rouge (>90%)
|
|
- [x] Intégrer dans le tableau des séquences
|
|
- [x] Corriger le composant Progress pour supporter indicatorClassName
|
|
|
|
## Vue calendrier mensuel
|
|
|
|
- [x] Créer la page AdminCalendrier
|
|
- [x] Afficher un calendrier mensuel avec navigation
|
|
- [x] Afficher les séquences sur leurs dates respectives
|
|
- [x] Ajouter un dialog de détails au clic sur une séquence
|
|
- [x] Ajouter le lien "Calendrier" dans le menu de navigation
|
|
- [x] Afficher le nom de la formation + nom de la séquence
|
|
- [x] Afficher le lieu, le formateur et le nombre d'inscrits
|
|
- [x] Corriger le bug de dates (parseISO vs Date)
|
|
- [x] Corriger le bug React #31 (clés stables pour les jours)
|
|
|
|
## Système de rappels automatiques
|
|
|
|
- [x] Créer la table rappels dans la base de données
|
|
- [x] Créer les procédures tRPC (list, create, update, delete)
|
|
- [x] Créer la page AdminRappels pour configurer les rappels
|
|
- [x] Permettre de configurer des rappels multiples (J-15, J-7, J-1)
|
|
- [x] Templates d'emails personnalisables avec variables dynamiques
|
|
- [x] Activation/désactivation des rappels
|
|
- [x] Infrastructure pour l'envoi automatique (scheduler)
|
|
- [x] Ajouter le lien "Rappels" dans le menu de navigation
|
|
- [x] Créer les templates J-7 et J-1 avec style Itinova
|
|
- [x] Implémenter le scheduler automatique (vérification toutes les heures)
|
|
- [x] Corriger le bug d'envois multiples (un seul email par séquence)
|
|
|
|
## Améliorations diverses
|
|
|
|
- [x] Réorganisation du menu de navigation en 4 zones (Tableau de bord, Gestion, Configuration, Analyses)
|
|
- [x] Couleur bleue pour les titres des zones du menu
|
|
- [x] Icône œil en bleu pour la visualisation
|
|
- [x] Icône corbeille en rouge pour la suppression
|
|
- [x] Badges de couleur pour les fonctions des apprenants
|
|
- [x] Badges de couleur pour le public cible des séquences
|
|
- [x] Couleurs uniques pour chaque formation dans le tableau des séquences
|
|
- [x] Badges Actif/Inactif pour les apprenants
|
|
- [x] Page dédiée aux établissements avec statistiques
|
|
|
|
## Améliorations du calendrier
|
|
|
|
- [x] Ajout de filtres (formation, lieu, public cible)
|
|
- [x] Vues alternatives (semaine, jour) en plus de la vue mensuelle
|
|
- [x] Export PDF du calendrier
|
|
- [x] Export iCal (.ics) pour import dans Outlook/Google Calendar
|
|
|
|
## Import Excel pour créer formations et séquences en masse
|
|
|
|
- [x] Créer le template Excel avec colonnes prédéfinies
|
|
- [x] Créer la procédure backend de parsing et validation
|
|
- [x] Créer l'interface frontend avec upload et prévisualisation
|
|
- [x] Ajouter la documentation utilisateur
|
|
- [x] Corriger le bug de conflit de noms (formations vs table formations)
|
|
- [x] Corriger le bug de colonne lienInscription → lienUnique
|
|
- [x] Corriger le bug de récupération des IDs après insertion
|
|
- [x] Ajouter le menu de navigation sur la page Import Excel
|
|
- [x] Déplacer le menu Import Excel vers le bloc Configuration
|
|
|
|
## Corrections décalage horaire
|
|
|
|
- [x] Correction du décalage horaire dans le formulaire de création de séquence
|
|
- [x] Correction du décalage horaire dans le formulaire d'édition de séquence
|
|
- [x] Correction du décalage horaire dans l'affichage des séquences
|
|
- [x] Correction du décalage horaire dans la page d'inscription publique
|
|
- [x] Utilisation des méthodes locales (getHours, getMinutes) au lieu des méthodes UTC
|
|
|
|
## Scripts de déploiement VPS
|
|
|
|
- [x] Créer backup-before-update.sh (sauvegarde automatique)
|
|
- [x] Créer update-app.sh (mise à jour automatique)
|
|
- [x] Créer create-deployment-package.sh (création de package)
|
|
- [x] Créer GUIDE_MISE_A_JOUR.md (documentation complète)
|
|
- [x] Corriger les chemins pour utiliser formation-manager-itinova
|
|
- [x] Corriger le bug "drizzle-kit: not found" (pnpm install sans --prod)
|
|
- [x] Créer DEPLOIEMENT-MANUEL.md (guide déploiement sans Git)
|
|
- [x] Créer deploy-update-manual.sh (script sans git pull)
|
|
- [x] Créer DEPLOIEMENT-TARGZ.md (guide avec archive tar.gz)
|
|
- [x] Créer deploy-update-targz.sh (script pour archive)
|
|
|
|
## Support SMTP Direct (sans Resend)
|
|
|
|
- [x] Ajouter les champs SMTP dans la table emailConfig
|
|
- [x] Créer server/_core/smtpSender.ts avec Nodemailer
|
|
- [x] Modifier emailSender.ts pour supporter SMTP et Resend
|
|
- [x] Ajouter l'interface de configuration SMTP dans AdminEmailConfig
|
|
- [x] Corriger le bug d'enregistrement des champs SMTP
|
|
- [x] Corriger la fonction upsertEmailConfig pour éviter les doublons
|
|
- [x] Corriger l'affichage du statut (SMTP Direct au lieu de Resend)
|
|
|
|
## Améliorations emails groupés (teaser et rappel)
|
|
|
|
- [x] Ajouter des logs serveur détaillés pour l'envoi groupé
|
|
- [x] Afficher le nombre d'emails envoyés avec succès et échoués
|
|
- [x] Avertir si aucun email n'est envoyé (aucun apprenant confirmé)
|
|
- [x] Corriger le remplacement des tags {{nomFormation}}, {{nomSequence}}, etc.
|
|
- [x] Ajouter le formateur et le lieu dans l'email de teaser
|
|
- [x] Ajouter toutes les variables disponibles dans les templates
|
|
|
|
## Améliorations templates d'emails
|
|
|
|
- [x] Ajouter la possibilité de personnaliser le corps du message
|
|
- [x] Ajouter un éditeur de texte riche (TipTap) pour formater le contenu
|
|
- [x] Ajouter 7 boutons pour insérer rapidement des variables dynamiques
|
|
- [x] Afficher la prévisualisation HTML en temps réel
|
|
- [x] Implémenter le remplacement automatique des variables lors de l'envoi
|
|
- [x] Ajouter un bouton d'aperçu avec données réelles d'un apprenant
|
|
- [x] Ajouter le template de rappel J-1 dans la liste
|
|
- [x] Corriger les templates J-7 et J-1 pour afficher toutes les dates
|
|
- [x] Ajouter la variable {{datesHTML}} pour afficher toutes les dates formatées
|
|
- [x] Ajouter le bouton {{datesHTML}} dans l'interface
|
|
- [x] Corriger la variable {{datesHTML}} dans l'email de confirmation
|
|
|
|
## Tableau de bord analytique
|
|
|
|
- [x] Créer la page AdminTableauBordAnalytique
|
|
- [x] Afficher les statistiques globales (cartes)
|
|
- [x] Graphique d'évolution des inscriptions par mois
|
|
- [x] Graphique du taux de remplissage des séquences
|
|
- [x] Top 10 des établissements participants
|
|
- [x] Répartition par fonction
|
|
- [x] Ajouter des filtres de période (mois, trimestre, année)
|
|
- [x] Implémenter l'export Excel des rapports analytiques
|
|
- [x] Corriger l'incohérence des statistiques de répartition par fonction
|
|
- [x] Ajouter le graphique de répartition par établissement sur le tableau de bord principal
|
|
|
|
## Améliorations visuelles
|
|
|
|
- [x] Afficher le taux de remplissage en couleur conditionnelle
|
|
- [x] Icône corbeille en rouge pour la suppression
|
|
- [x] Icône œil en bleu pour la visualisation
|
|
- [x] Couleurs uniques pour chaque formation dans le tableau des séquences
|
|
- [x] Badges de couleur pour les fonctions des apprenants
|
|
- [x] Badges Actif/Inactif pour les apprenants
|
|
|
|
## Feuilles de présence améliorées
|
|
|
|
- [x] Ajouter le logo Itinova en haut à droite (40x15mm)
|
|
- [x] Afficher le nom du formateur dans l'en-tête
|
|
- [x] Ajouter deux colonnes de signature par apprenant (Matin / Après-midi)
|
|
- [x] Générer une page par date de formation
|
|
- [x] Ajouter la signature du formateur en bas de page avec date
|
|
|
|
## Détail par apprenant
|
|
|
|
- [x] Créer la procédure tRPC apprenants.getInscriptions
|
|
- [x] Créer la page AdminApprenantDetail
|
|
- [x] Afficher les informations personnelles de l'apprenant
|
|
- [x] Afficher le tableau de toutes ses inscriptions
|
|
- [x] Ajouter le bouton "Détail" dans la page AdminApprenants
|
|
- [x] Ajouter la route /admin/apprenants/:id dans App.tsx
|
|
|
|
## Correction problème création excessive d'utilisateurs
|
|
|
|
- [x] Analyser la base de données pour identifier les doublons
|
|
- [x] Nettoyer les utilisateurs en double
|
|
- [x] Ajouter la contrainte UNIQUE sur la colonne openId
|
|
- [x] Vérifier que onDuplicateKeyUpdate fonctionne correctement
|
|
|
|
## Ajout identifiant de connexion et modification mot de passe
|
|
|
|
- [x] Ajouter le champ username dans le schéma de la base de données
|
|
- [x] Mettre à jour les procédures tRPC create et update
|
|
- [x] Implémenter le hashage du mot de passe avec bcryptjs
|
|
- [x] Ajouter la colonne "Identifiant" dans le tableau des utilisateurs
|
|
- [x] Ajouter les champs dans le formulaire de création
|
|
- [x] Ajouter les champs dans le formulaire d'édition
|
|
|
|
## Utilisateur administrateur spécial
|
|
|
|
- [x] Créer l'utilisateur "Administrateur" avec identifiant "adminServFormation"
|
|
- [x] Désactiver le bouton de suppression pour cet utilisateur
|
|
- [x] Rendre les champs nom et identifiant en lecture seule
|
|
- [x] Permettre la modification de l'email et du mot de passe uniquement
|
|
- [x] Garantir un accès administrateur permanent au système
|
|
|
|
## Page de connexion locale
|
|
|
|
- [x] Créer la route d'authentification backend avec hashage bcrypt
|
|
- [x] Créer la page Login.tsx avec formulaire username/password
|
|
- [x] Implémenter la session JWT
|
|
- [x] Tester avec l'utilisateur adminServFormation
|
|
- [x] Ajouter la route /login dans App.tsx
|
|
- [x] Créer une page de choix de connexion à la racine (/)
|
|
- [x] Corriger la redirection après déconnexion vers la page de choix
|
|
- [x] Ajouter la détection automatique de l'état de connexion
|
|
- [x] Corriger l'authentification locale pour compatibilité avec OAuth
|
|
|
|
## Guide de configuration HTTPS
|
|
|
|
- [x] Créer le guide complet de configuration HTTPS avec Let's Encrypt
|
|
- [x] Créer le script d'installation automatique
|
|
- [x] Créer le template nginx optimisé
|
|
|
|
## Questionnaires de satisfaction et évaluation des acquis
|
|
|
|
- [x] Créer le schéma de base de données (tables questionnaires, questions, réponses)
|
|
- [x] Développer les procédures backend tRPC pour la gestion des questionnaires
|
|
- [x] Créer l'interface d'administration des questionnaires
|
|
- [x] Créer l'interface publique de réponse aux questionnaires
|
|
- [x] Implémenter l'envoi automatique post-formation
|
|
- [x] Créer les tableaux de bord d'analyse avec graphiques (satisfaction par formation/formateur)
|
|
- [x] Implémenter les exports Excel/PDF des feedbacks
|
|
- [x] Tester le système complet (création, envoi, réponse, analyse)
|
|
- [ ] Déployer sur le serveur VPS
|
|
|
|
## Amélioration : Prévisualisation des questionnaires
|
|
|
|
- [x] Ajouter un bouton "Prévisualiser" dans la page d'édition de questionnaire
|
|
- [x] Créer un modal de prévisualisation avec le rendu exact du questionnaire
|
|
|
|
## Exports et notifications pour les questionnaires
|
|
|
|
- [x] Créer les fonctions backend d'export Excel des résultats
|
|
- [x] Créer les fonctions backend d'export PDF des résultats
|
|
- [x] Ajouter les boutons d'export dans la page d'analyse
|
|
- [x] Implémenter le système de notifications pour les administrateurs
|
|
- [x] Envoyer une notification lors de chaque nouvelle réponse à un questionnaire
|
|
|
|
## Tableau de bord de suivi des questionnaires
|
|
|
|
- [x] Créer les fonctions backend pour les statistiques par formation
|
|
- [x] Créer les fonctions backend pour l'évolution temporelle
|
|
- [x] Créer les fonctions backend pour la comparaison par formateur
|
|
- [x] Créer les procédures tRPC pour le tableau de bord
|
|
- [x] Créer la page AdminQuestionnaireSuivi avec graphiques
|
|
- [x] Ajouter le lien dans le menu de navigation
|
|
- [x] Tester toutes les fonctionnalités
|
|
|
|
## Correction des erreurs SQL du tableau de bord de suivi
|
|
|
|
- [x] Corriger la requête getEvolutionTemporelle (DATE_FORMAT)
|
|
- [x] Corriger la requête getStatsByFormateur (sous-requête AVG)
|
|
- [x] Simplifier les requêtes pour compatibilité MySQL
|
|
- [x] Tester toutes les requêtes corrigées
|
|
|
|
## Espace Formateur
|
|
|
|
### Schéma de base de données
|
|
- [x] Créer la table supportsFormation pour stocker les documents
|
|
- [x] Ajouter les relations avec sequences
|
|
- [x] Migrer le schéma avec pnpm db:push
|
|
|
|
### Backend
|
|
- [x] Créer formateurDb.ts avec les fonctions de requête
|
|
- [x] Ajouter les procédures tRPC pour le calendrier du formateur
|
|
- [x] Ajouter les procédures tRPC pour la liste des apprenants
|
|
- [x] Ajouter les procédures tRPC pour l'upload de supports
|
|
- [x] Ajouter les procédures tRPC pour la validation des présences
|
|
- [x] Ajouter les procédures tRPC pour l'historique
|
|
|
|
### Frontend
|
|
- [x] Créer la page FormateurDashboard (calendrier)
|
|
- [x] Créer la page FormateurSequence (détail séquence avec apprenants)
|
|
- [x] Créer la page FormateurSupports (gestion des supports)
|
|
- [x] Créer la page FormateurPresences (validation présences)
|
|
- [x] Créer la page FormateurHistorique (historique formations)
|
|
- [x] Ajouter les routes dans App.tsx
|
|
- [x] Ajouter le menu de navigation formateur
|
|
|
|
### Tests
|
|
- [x] Tester toutes les fonctionnalités de l'espace formateur
|
|
|
|
## Correction bug rappels multiples
|
|
|
|
- [x] Analyser le code du scheduler de rappels
|
|
- [x] Identifier pourquoi plusieurs emails sont envoyés
|
|
- [x] Corriger la logique pour envoyer un seul email par séquence
|
|
- [x] Tester avec la formation JetSki du 15/12/2025
|
|
|
|
## Améliorations système de rappels
|
|
|
|
### Historique des rappels
|
|
- [x] Créer la table logsRappels dans le schéma
|
|
- [x] Migrer le schéma avec pnpm db:push
|
|
- [x] Créer les fonctions de log dans rappelDb.ts
|
|
- [x] Intégrer le logging dans rappelScheduler.ts
|
|
- [x] Ajouter la vérification des doublons avant envoi
|
|
|
|
### Test manuel des rappels
|
|
- [x] 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
|
|
- [x] Créer la fonction de notification admin
|
|
- [x] Intégrer les notifications dans le catch des erreurs d'envoi
|
|
- [x] Ajouter un résumé des échecs dans les logs
|
|
|
|
## Historique et statistiques des rappels
|
|
|
|
### Backend
|
|
- [x] Créer les fonctions de récupération des logs avec filtres
|
|
- [x] Créer les fonctions de statistiques (taux succès, emails problématiques)
|
|
- [x] Ajouter les procédures tRPC pour l'historique
|
|
- [x] Ajouter les procédures tRPC pour les statistiques
|
|
|
|
### Page d'historique
|
|
- [x] Créer AdminRappelsHistorique.tsx avec tableau des logs
|
|
- [x] Ajouter les filtres (date, séquence, statut, email)
|
|
- [x] Ajouter la recherche par email
|
|
- [x] Ajouter la pagination
|
|
- [x] Ajouter la route dans App.tsx
|
|
|
|
### Tableau de bord statistiques
|
|
- [x] Créer AdminRappelsStats.tsx avec cartes de statistiques
|
|
- [x] Ajouter le graphique d'évolution des envois
|
|
- [x] Ajouter le graphique du taux de succès
|
|
- [x] Ajouter la liste des emails problématiques
|
|
- [x] Ajouter la route dans App.tsx
|
|
|
|
### Système de réessai automatique
|
|
- [x] Ajouter le champ nbTentatives dans logsRappels
|
|
- [x] Ajouter le champ prochainEssai dans logsRappels
|
|
- [x] Créer la fonction de retry avec délai exponentiel
|
|
- [x] Intégrer le retry dans rappelScheduler
|
|
- [x] Limiter à 3 tentatives maximum
|
|
|
|
## Correction erreurs tRPC (HTML au lieu de JSON)
|
|
|
|
- [x] Analyser les logs du serveur pour identifier les requêtes qui échouent
|
|
- [x] Identifier les procédures tRPC qui causent les erreurs
|
|
- [x] Corriger les erreurs côté serveur (emailBody, reduce)
|
|
- [x] Tester la page admin pour vérifier que les erreurs sont résolues
|
|
|
|
## Rendre accessibles les pages d'historique et statistiques des rappels
|
|
|
|
- [x] Vérifier que les routes sont bien définies dans App.tsx
|
|
- [x] Vérifier que les liens sont bien dans le menu DashboardLayout
|
|
- [x] Ajouter la gestion des sous-menus dans DashboardLayout
|
|
- [x] Tester l'accès aux pages /admin/rappels/historique et /admin/rappels/statistiques
|
|
|
|
## Système plier/déplier pour le menu de navigation
|
|
|
|
- [x] Ajouter un état pour gérer les sections ouvertes/fermées
|
|
- [x] Ajouter des icônes chevron pour indiquer l'état
|
|
- [x] Implémenter la logique de toggle pour chaque section
|
|
- [x] Garder la section active automatiquement ouverte
|
|
- [x] Tester le comportement sur toutes les sections
|
|
|
|
## Correction bug accordéons qui s'ouvrent tous
|
|
|
|
- [x] Corriger le useEffect pour n'ouvrir que la section contenant l'item actif
|
|
- [x] Supprimer le useEffect problématique (toutes sections ouvertes par défaut)
|
|
- [x] Utiliser localStorage pour persister l'état des sections
|
|
- [x] Tester le comportement en cliquant sur différents items
|
|
|
|
## Modification comportement par défaut accordéon menu
|
|
- [x] Modifier l'initialisation pour ouvrir uniquement TABLEAU DE BORD par défaut
|
|
- [x] Fermer GESTION, CONFIGURATION, ANALYSES par défaut
|
|
- [x] Tester le comportement à l'ouverture
|
|
|
|
## Bug compteur d'inscrits après suppression
|
|
- [x] Analyser le code de suppression d'inscription
|
|
- [x] Identifier pourquoi le compteur ne se met pas à jour
|
|
- [x] Corriger le bug de rafraîchissement du compteur
|
|
- [x] Tester la suppression d'un apprenant et vérifier le compteur
|
|
|
|
## Bug nom formateur dans email rappel J-7
|
|
- [x] Analyser le code d'envoi des emails de rappel
|
|
- [x] Comparer avec le code de prévisualisation
|
|
- [x] Identifier pourquoi le nom du formateur n'est pas remplacé
|
|
- [x] Corriger le bug de remplacement du nom du formateur
|
|
- [x] Bug persistant : J-1 fonctionne mais J-7 ne fonctionne toujours pas
|
|
- [x] Analyser la différence entre le template J-7 et J-1
|
|
- [x] Corriger le template J-7 définitivement
|
|
|
|
## 🔔 Système de notifications enrichi
|
|
- [x] Email de remerciement post-formation
|
|
- [x] Notification aux formateurs (nouvelle inscription)
|
|
- [x] Notification aux formateurs (annulation)
|
|
- [x] Alerte capacité atteinte (pour les admins)
|
|
- [x] Notification d'annulation aux apprenants en liste d'attente
|
|
- [x] Ajout du champ email pour les formateurs
|
|
- [x] Scheduler automatique pour les remerciements post-formation
|
|
- [x] Procédure tRPC pour envoi manuel des remerciements
|
|
|
|
## Améliorations notifications (15/12/2025)
|
|
- [x] Interface de gestion des emails formateurs dans Configuration
|
|
- [x] Tableau de bord des notifications avec historique des emails envoyés
|
|
- [x] Lien vers questionnaire de satisfaction dans l'email de remerciement
|
|
|
|
## Réimplémentation attestations (16/12/2025)
|
|
- [x] Recréer les tables en base de données
|
|
- [x] Recréer le service de génération PDF
|
|
- [x] Recréer les procédures tRPC
|
|
- [x] Créer la page de configuration
|
|
- [x] Intégrer le bouton dans la page de validation des présences
|
|
- [x] Tester la génération complète
|
|
|
|
## Authentification et accès formateurs
|
|
- [x] Analyser le système d'authentification actuel (users, roles)
|
|
- [x] Créer le rôle "formateur" dans la base de données
|
|
- [x] Lier les comptes utilisateurs aux formateurs existants (champ formateurId)
|
|
- [x] Utiliser la page de connexion locale existante
|
|
- [x] Implémenter la redirection selon le rôle (admin → /admin, formateur → /formateur)
|
|
- [ ] Tester la connexion et l'accès aux fonctionnalités formateur
|
|
|
|
## Upload logo et signature pour attestations
|
|
- [x] Ajouter les champs logoUrl et signatureUrl dans configAttestation (déjà existants)
|
|
- [x] Créer le composant d'upload d'images vers S3 (ImageUpload.tsx)
|
|
- [x] Créer l'endpoint d'upload serveur (/api/upload-image)
|
|
- [x] Intégrer l'upload dans la page de configuration des attestations
|
|
- [x] Modifier le service PDF pour inclure le logo et la signature
|
|
- [ ] Tester la génération d'attestations avec logo et signature personnalisés
|
|
|
|
## Réorganisation du menu de navigation
|
|
- [x] Déplacer le menu "Notifications" de CONFIGURATION vers ANALYSES
|
|
|
|
## Nouvelles modifications du menu
|
|
- [x] Renommer "Attestations" en "Attestations de formation"
|
|
- [x] Déplacer "Statistiques" de Rappels vers ANALYSES et le renommer "Rappels"
|
|
|
|
## Création de la section TRAÇABILITÉ
|
|
- [x] Renommer "Rappels" (ANALYSES) en "Statistiques des rappels"
|
|
- [x] Créer une nouvelle section "TRAÇABILITÉ"
|
|
- [x] Déplacer "Notifications" vers TRAÇABILITÉ
|
|
- [x] Déplacer "Suivi Questionnaires" vers TRAÇABILITÉ
|
|
- [x] Déplacer "Établissements" vers TRAÇABILITÉ
|
|
- [x] Déplacer "Historique" (sous-menu de Rappels) vers TRAÇABILITÉ avec le nom "Rappels"
|
|
|
|
## Centralisation de la création des formateurs
|
|
- [x] Retirer le bouton de création de formateur de la page Formateurs
|
|
- [x] Supprimer le dialogue de création et les mutations associées
|
|
- [x] Ajouter un message explicatif indiquant que la création se fait via la page Utilisateurs
|
|
|
|
## Liaison formateurs existants avec utilisateurs
|
|
- [x] Analyser les formateurs existants dans la table formateurs
|
|
- [x] Créer une procédure listWithFormateurs pour afficher tous les formateurs
|
|
- [x] Afficher les formateurs sans compte dans une section dédiée
|
|
- [x] Ajouter un bouton "Créer un compte" qui pré-remplit le formulaire
|
|
- [x] Lier automatiquement le formateurId lors de la création
|
|
|
|
## Renommage des templates de rappels
|
|
- [x] Renommer "Rappel J-7" en "Rappel 1" dans AdminEmailTemplates.tsx
|
|
- [x] Renommer "Rappel J-1" en "Rappel 2" dans AdminEmailTemplates.tsx
|
|
- [x] Renommer "Rappel J-7" en "Rappel 1" dans AdminRappels.tsx
|
|
- [x] Renommer "Rappel J-1" en "Rappel 2" dans AdminRappels.tsx
|
|
|
|
## Remise du menu Rappels dans CONFIGURATION
|
|
- [x] Ajouter le menu "Rappels" dans la section CONFIGURATION
|
|
- [x] Pointer vers /admin/rappels pour la gestion des rappels
|
|
|
|
## Renommage du label dans la gestion des rappels
|
|
- [x] Renommer "Type de rappel" en "Template d'email utilisé" dans les dialogues de création/modification
|
|
- [x] Renommer "Type" en "Template" dans le header du tableau
|
|
|
|
## Ajout de 4 nouveaux templates de rappels
|
|
- [x] Ajouter "Rappel 3", "Rappel 4", "Rappel 5", "Rappel 6" dans AdminEmailTemplates.tsx
|
|
- [x] Ajouter les mêmes templates dans AdminRappels.tsx avec délais (14, 21, 30, 60 jours)
|
|
- [x] Modifier initializeDefaultEmailTemplates dans db.ts pour créer ces templates basés sur Rappel 1
|
|
|
|
## Correction erreur emailTemplates.getByType
|
|
- [x] Modifier getEmailTemplateByType dans db.ts pour retourner null au lieu de undefined
|
|
|
|
## Modification de la fenêtre de création des rappels
|
|
- [x] Analyser le schéma actuel de la table rappels
|
|
- [x] Ajouter un champ "timing" (pre_formation / post_formation) dans le schéma
|
|
- [x] Appliquer la modification en base de données (ALTER TABLE)
|
|
- [x] Modifier AdminRappels.tsx pour ajouter les radio buttons pré/post-formation
|
|
- [x] Ajouter un champ de saisie du nombre de jours avec label dynamique
|
|
- [x] Mettre à jour les procédures tRPC (create et update) pour gérer timing
|
|
|
|
## Ajout de pièces jointes dans les rappels par email
|
|
- [x] Modifier le schéma de la table rappels pour ajouter les champs de fichier (nomFichier, urlFichier, s3Key, typeFichier, tailleFichier)
|
|
- [x] Appliquer la migration en base de données
|
|
- [x] Créer un composant FileUpload pour l'upload de fichiers vers S3
|
|
- [x] Modifier AdminRappels.tsx pour intégrer le composant d'upload
|
|
- [x] Créer un endpoint API pour l.upload de fichiers vers S3
|
|
- [x] Mettre à jour les procédures tRPC create et update pour gérer les fichiers
|
|
- [x] Modifier le service d.envoi d.emails pour inclure les pièces jointes
|
|
- [x] Tester l.upload et l.envoi d.emails avec pièce jointe
|
|
|
|
## Correction affichage délai rappels post-formation
|
|
- [x] Corriger l.affichage de la colonne "Délai" pour afficher J+X pour les rappels post-formation
|
|
- [x] Tester l.affichage avec un rappel pré-formation et un rappel post-formation
|
|
|
|
## Refonte système de rappels - Gestion par séquence
|
|
- [x] Créer la table rappelSequences (relation many-to-many entre rappels et séquences)
|
|
- [x] Appliquer la migration en base de données
|
|
- [x] Créer un composant de sélection multi-séquences
|
|
- [x] Modifier le formulaire AdminRappels pour intégrer le sélecteur de séquences
|
|
- [x] Créer les fonctions DB pour gérer les associations rappel-séquence
|
|
- [x] Mettre à jour les procédures tRPC create et update pour gérer les associations
|
|
- [x] Modifier le scheduler pour ne traiter que les séquences associées à chaque rappel
|
|
- [ ] Adapter l'affichage du tableau pour montrer les séquences associées
|
|
- [ ] Tester la création d'un rappel avec sélection de séquences spécifiques
|
|
- [ ] Tester l'envoi automatique avec le nouveau système
|
|
|
|
## Refonte granulaire : sélection par date de formation
|
|
|
|
- [x] Modifier rappelSequences pour pointer vers dateFormationId au lieu de sequenceId
|
|
- [x] Créer le composant DateFormationMultiSelect hiérarchique
|
|
- [x] Intégrer le nouveau sélecteur dans AdminRappels
|
|
- [x] Adapter les fonctions DB pour gérer dateFormationId
|
|
- [x] Mettre à jour les procédures tRPC pour dateFormationId
|
|
- [x] Modifier le scheduler pour filtrer par dateFormationId
|
|
- [ ] Tester la création avec dates spécifiques
|
|
- [ ] Vérifier l'affichage et l'édition
|
|
|
|
## Améliorations tableau des rappels
|
|
- [x] Renommer la colonne "Template" en "Template d'email"
|
|
- [x] Ajouter une colonne "Dates concernées" avec formations, séquences et dates
|
|
- [x] Modifier la procédure tRPC pour inclure les informations de dates
|
|
- [x] Tester l'affichage avec plusieurs rappels
|
|
|
|
## Améliorations avancées du tableau des rappels
|
|
- [x] Ajouter des badges visuels Global/Ciblé dans la colonne Nom
|
|
- [x] Implémenter les filtres par formation et séquence
|
|
- [x] Créer la fonction d'export CSV des rappels
|
|
- [x] Tester toutes les fonctionnalités
|
|
|
|
## Cohérence visuelle des icônes
|
|
- [x] Vérifier et corriger la couleur de l'icône corbeille (rouge) sur toutes les pages
|
|
- [x] Vérifier et corriger la couleur de l'icône œil (bleu) sur toutes les pages
|
|
|
|
## Colorisation des icônes du menu latéral
|
|
- [x] Appliquer des couleurs par catégorie aux icônes du menu (Tableau de bord: bleu, Gestion: vert, Configuration: orange, Traçabilité: violet, Analyses: rose)
|
|
- [x] Vérifier l'affichage visuel du menu colorisé
|
|
|
|
## Amélioration visuelle de la colonne Dates concernées dans les rappels
|
|
- [x] Ajouter des badges colorés pour distinguer formations, séquences et dates
|
|
- [x] Utiliser des icônes pour identifier chaque type d'élément
|
|
- [x] Améliorer la hiérarchie typographique pour faciliter la lecture
|
|
|
|
## Colonne Rappels configurés dans la gestion des séquences
|
|
- [x] Modifier le backend pour récupérer les rappels associés à chaque date
|
|
- [x] Ajouter la colonne "Rappels configurés" dans le tableau des séquences
|
|
- [x] Afficher les rappels avec badges visuels similaires à la page des rappels
|
|
|
|
## Vues complète et réduite pour la gestion des séquences
|
|
- [x] Ajouter un bouton de basculement entre vue complète et vue réduite
|
|
- [x] Masquer les colonnes Lieu, Public cible, Formateur en vue réduite
|
|
- [x] Simplifier l'affichage des rappels (supprimer "Date 1:", afficher sur une ligne)
|
|
|
|
## Séparation des rappels pré et post-formation
|
|
- [x] Séparer l'affichage des rappels en deux catégories (pré-formation et post-formation)
|
|
- [x] Ajouter des labels visuels pour distinguer les deux types de rappels
|
|
|
|
## Amélioration affichage des rappels dans les séquences
|
|
- [x] Remplacer la colonne "Rappels configurés" par deux colonnes distinctes
|
|
- [x] Créer colonne "Rappels pré-formation" avec badges bleus
|
|
- [x] Créer colonne "Rappels post-formation" avec badges verts
|
|
- [x] Tester l'affichage dans les vues complète et réduite
|
|
|
|
## Restriction d'accès pour les formateurs
|
|
- [x] Ajouter le rôle "formateur" dans la table users
|
|
- [x] Modifier le menu DashboardLayout pour masquer Configuration et Traçabilité aux formateurs
|
|
- [x] Filtrer les formations pour ne montrer que celles du formateur connecté
|
|
- [x] Filtrer les séquences pour ne montrer que celles du formateur connecté
|
|
- [x] Filtrer les apprenants pour ne montrer que ceux inscrits aux séquences du formateur
|
|
- [x] Créer une procédure backend pour vérifier si un utilisateur est formateur
|
|
- [x] Tester avec un compte formateur
|
|
|
|
## Tableau de bord personnalisé pour formateurs
|
|
- [x] Créer les procédures backend pour récupérer les prochaines séquences du formateur
|
|
- [x] Créer les procédures backend pour calculer les statistiques du formateur
|
|
- [x] Créer la page FormateurDashboard avec cartes de statistiques
|
|
- [x] Afficher la liste des prochaines séquences avec nombre d'inscrits
|
|
- [x] Afficher les rappels à venir pour chaque séquence
|
|
- [x] Modifier DashboardLayout pour rediriger les formateurs vers /formateur/dashboard
|
|
|
|
## Notifications automatiques pour formateurs
|
|
- [x] Envoyer une notification au formateur lors d'une nouvelle inscription
|
|
- [x] Envoyer une notification au formateur lors d'une annulation
|
|
- [x] Envoyer une notification au formateur quand la capacité maximale est atteinte
|
|
- [x] Envoyer une notification au formateur quand une place se libère
|
|
- [x] Intégrer les notifications dans les mutations d'inscription existantes
|
|
|
|
## Bug à corriger
|
|
- [x] Corriger l'affichage du menu latéral pour les formateurs (menu invisible actuellement)
|
|
|
|
## Erreurs TypeScript à corriger pour publication
|
|
- [x] Corriger l'erreur dans AdminSequences.tsx (propriété formateur manquante)
|
|
- [x] Corriger les erreurs dans QuestionnaireReponse.tsx (questionnaire possibly null)
|