Files
formation-manager-itinova/todo.md
Manus 8ecb856191 Checkpoint: Améliorations techniques et documentation complètes :
- Correction des 170 erreurs TypeScript liées aux types templateType dans les procédures rappels.create et rappels.update (passage de z.string() à z.enum() avec les valeurs correctes)
- Nettoyage complet des fichiers de migration Drizzle (suppression des 32 anciens fichiers et génération d'une nouvelle migration propre 0000_clean_justice.sql)
- Création du guide utilisateur GUIDE_CONFIGURATION_ATTESTATIONS.md expliquant en détail le nouveau workflow de configuration des attestations (modes de génération et d'envoi, workflows recommandés, bonnes pratiques, dépannage)
2026-01-13 04:24:27 -05:00

38 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

🔔 Système de notifications enrichi

  • Email de remerciement post-formation
  • Notification aux formateurs (nouvelle inscription)
  • Notification aux formateurs (annulation)
  • Alerte capacité atteinte (pour les admins)
  • Notification d'annulation aux apprenants en liste d'attente
  • Ajout du champ email pour les formateurs
  • Scheduler automatique pour les remerciements post-formation
  • Procédure tRPC pour envoi manuel des remerciements

Améliorations notifications (15/12/2025)

  • Interface de gestion des emails formateurs dans Configuration
  • Tableau de bord des notifications avec historique des emails envoyés
  • Lien vers questionnaire de satisfaction dans l'email de remerciement

Réimplémentation attestations (16/12/2025)

  • Recréer les tables en base de données
  • Recréer le service de génération PDF
  • Recréer les procédures tRPC
  • Créer la page de configuration
  • Intégrer le bouton dans la page de validation des présences
  • Tester la génération complète

Authentification et accès formateurs

  • Analyser le système d'authentification actuel (users, roles)
  • Créer le rôle "formateur" dans la base de données
  • Lier les comptes utilisateurs aux formateurs existants (champ formateurId)
  • Utiliser la page de connexion locale existante
  • 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

  • Ajouter les champs logoUrl et signatureUrl dans configAttestation (déjà existants)
  • Créer le composant d'upload d'images vers S3 (ImageUpload.tsx)
  • Créer l'endpoint d'upload serveur (/api/upload-image)
  • Intégrer l'upload dans la page de configuration des attestations
  • 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

  • Déplacer le menu "Notifications" de CONFIGURATION vers ANALYSES

Nouvelles modifications du menu

  • Renommer "Attestations" en "Attestations de formation"
  • Déplacer "Statistiques" de Rappels vers ANALYSES et le renommer "Rappels"

Création de la section TRAÇABILITÉ

  • Renommer "Rappels" (ANALYSES) en "Statistiques des rappels"
  • Créer une nouvelle section "TRAÇABILITÉ"
  • Déplacer "Notifications" vers TRAÇABILITÉ
  • Déplacer "Suivi Questionnaires" vers TRAÇABILITÉ
  • Déplacer "Établissements" vers TRAÇABILITÉ
  • Déplacer "Historique" (sous-menu de Rappels) vers TRAÇABILITÉ avec le nom "Rappels"

Centralisation de la création des formateurs

  • Retirer le bouton de création de formateur de la page Formateurs
  • Supprimer le dialogue de création et les mutations associées
  • Ajouter un message explicatif indiquant que la création se fait via la page Utilisateurs

Liaison formateurs existants avec utilisateurs

  • Analyser les formateurs existants dans la table formateurs
  • Créer une procédure listWithFormateurs pour afficher tous les formateurs
  • Afficher les formateurs sans compte dans une section dédiée
  • Ajouter un bouton "Créer un compte" qui pré-remplit le formulaire
  • Lier automatiquement le formateurId lors de la création

Renommage des templates de rappels

  • Renommer "Rappel J-7" en "Rappel 1" dans AdminEmailTemplates.tsx
  • Renommer "Rappel J-1" en "Rappel 2" dans AdminEmailTemplates.tsx
  • Renommer "Rappel J-7" en "Rappel 1" dans AdminRappels.tsx
  • Renommer "Rappel J-1" en "Rappel 2" dans AdminRappels.tsx

Remise du menu Rappels dans CONFIGURATION

  • Ajouter le menu "Rappels" dans la section CONFIGURATION
  • Pointer vers /admin/rappels pour la gestion des rappels

Renommage du label dans la gestion des rappels

  • Renommer "Type de rappel" en "Template d'email utilisé" dans les dialogues de création/modification
  • Renommer "Type" en "Template" dans le header du tableau

Ajout de 4 nouveaux templates de rappels

  • Ajouter "Rappel 3", "Rappel 4", "Rappel 5", "Rappel 6" dans AdminEmailTemplates.tsx
  • Ajouter les mêmes templates dans AdminRappels.tsx avec délais (14, 21, 30, 60 jours)
  • Modifier initializeDefaultEmailTemplates dans db.ts pour créer ces templates basés sur Rappel 1

Correction erreur emailTemplates.getByType

  • Modifier getEmailTemplateByType dans db.ts pour retourner null au lieu de undefined

Modification de la fenêtre de création des rappels

  • Analyser le schéma actuel de la table rappels
  • Ajouter un champ "timing" (pre_formation / post_formation) dans le schéma
  • Appliquer la modification en base de données (ALTER TABLE)
  • Modifier AdminRappels.tsx pour ajouter les radio buttons pré/post-formation
  • Ajouter un champ de saisie du nombre de jours avec label dynamique
  • Mettre à jour les procédures tRPC (create et update) pour gérer timing

Ajout de pièces jointes dans les rappels par email

  • Modifier le schéma de la table rappels pour ajouter les champs de fichier (nomFichier, urlFichier, s3Key, typeFichier, tailleFichier)
  • Appliquer la migration en base de données
  • Créer un composant FileUpload pour l'upload de fichiers vers S3
  • Modifier AdminRappels.tsx pour intégrer le composant d'upload
  • Créer un endpoint API pour l.upload de fichiers vers S3
  • Mettre à jour les procédures tRPC create et update pour gérer les fichiers
  • Modifier le service d.envoi d.emails pour inclure les pièces jointes
  • Tester l.upload et l.envoi d.emails avec pièce jointe

Correction affichage délai rappels post-formation

  • Corriger l.affichage de la colonne "Délai" pour afficher J+X pour les rappels post-formation
  • Tester l.affichage avec un rappel pré-formation et un rappel post-formation

Refonte système de rappels - Gestion par séquence

  • Créer la table rappelSequences (relation many-to-many entre rappels et séquences)
  • Appliquer la migration en base de données
  • Créer un composant de sélection multi-séquences
  • Modifier le formulaire AdminRappels pour intégrer le sélecteur de séquences
  • Créer les fonctions DB pour gérer les associations rappel-séquence
  • Mettre à jour les procédures tRPC create et update pour gérer les associations
  • 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

  • Modifier rappelSequences pour pointer vers dateFormationId au lieu de sequenceId
  • Créer le composant DateFormationMultiSelect hiérarchique
  • Intégrer le nouveau sélecteur dans AdminRappels
  • Adapter les fonctions DB pour gérer dateFormationId
  • Mettre à jour les procédures tRPC pour dateFormationId
  • 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

  • Renommer la colonne "Template" en "Template d'email"
  • Ajouter une colonne "Dates concernées" avec formations, séquences et dates
  • Modifier la procédure tRPC pour inclure les informations de dates
  • Tester l'affichage avec plusieurs rappels

Améliorations avancées du tableau des rappels

  • Ajouter des badges visuels Global/Ciblé dans la colonne Nom
  • Implémenter les filtres par formation et séquence
  • Créer la fonction d'export CSV des rappels
  • Tester toutes les fonctionnalités

Cohérence visuelle des icônes

  • Vérifier et corriger la couleur de l'icône corbeille (rouge) sur toutes les pages
  • Vérifier et corriger la couleur de l'icône œil (bleu) sur toutes les pages

Colorisation des icônes du menu latéral

  • Appliquer des couleurs par catégorie aux icônes du menu (Tableau de bord: bleu, Gestion: vert, Configuration: orange, Traçabilité: violet, Analyses: rose)
  • Vérifier l'affichage visuel du menu colorisé

Amélioration visuelle de la colonne Dates concernées dans les rappels

  • Ajouter des badges colorés pour distinguer formations, séquences et dates
  • Utiliser des icônes pour identifier chaque type d'élément
  • Améliorer la hiérarchie typographique pour faciliter la lecture

Colonne Rappels configurés dans la gestion des séquences

  • Modifier le backend pour récupérer les rappels associés à chaque date
  • Ajouter la colonne "Rappels configurés" dans le tableau des séquences
  • Afficher les rappels avec badges visuels similaires à la page des rappels

Vues complète et réduite pour la gestion des séquences

  • Ajouter un bouton de basculement entre vue complète et vue réduite
  • Masquer les colonnes Lieu, Public cible, Formateur en vue réduite
  • Simplifier l'affichage des rappels (supprimer "Date 1:", afficher sur une ligne)

Séparation des rappels pré et post-formation

  • Séparer l'affichage des rappels en deux catégories (pré-formation et post-formation)
  • Ajouter des labels visuels pour distinguer les deux types de rappels

Amélioration affichage des rappels dans les séquences

  • Remplacer la colonne "Rappels configurés" par deux colonnes distinctes
  • Créer colonne "Rappels pré-formation" avec badges bleus
  • Créer colonne "Rappels post-formation" avec badges verts
  • Tester l'affichage dans les vues complète et réduite

Restriction d'accès pour les formateurs

  • Ajouter le rôle "formateur" dans la table users
  • Modifier le menu DashboardLayout pour masquer Configuration et Traçabilité aux formateurs
  • Filtrer les formations pour ne montrer que celles du formateur connecté
  • Filtrer les séquences pour ne montrer que celles du formateur connecté
  • Filtrer les apprenants pour ne montrer que ceux inscrits aux séquences du formateur
  • Créer une procédure backend pour vérifier si un utilisateur est formateur
  • Tester avec un compte formateur

Tableau de bord personnalisé pour formateurs

  • Créer les procédures backend pour récupérer les prochaines séquences du formateur
  • Créer les procédures backend pour calculer les statistiques du formateur
  • Créer la page FormateurDashboard avec cartes de statistiques
  • Afficher la liste des prochaines séquences avec nombre d'inscrits
  • Afficher les rappels à venir pour chaque séquence
  • Modifier DashboardLayout pour rediriger les formateurs vers /formateur/dashboard

Notifications automatiques pour formateurs

  • Envoyer une notification au formateur lors d'une nouvelle inscription
  • Envoyer une notification au formateur lors d'une annulation
  • Envoyer une notification au formateur quand la capacité maximale est atteinte
  • Envoyer une notification au formateur quand une place se libère
  • Intégrer les notifications dans les mutations d'inscription existantes

Bug à corriger

  • Corriger l'affichage du menu latéral pour les formateurs (menu invisible actuellement)

Erreurs TypeScript à corriger pour publication

  • Corriger l'erreur dans AdminSequences.tsx (propriété formateur manquante)
  • Corriger les erreurs dans QuestionnaireReponse.tsx (questionnaire possibly null)

Émargement numérique et attestations automatiques

Schéma de base de données

  • Créer la table presences (inscription, date, heurePresence, modeValidation)
  • Créer la table attestations (inscription, sequence, dateGeneration, pdfUrl)
  • Ajouter le champ qrCodeToken dans la table sequences

Backend

  • Créer les procédures tRPC pour les présences (valider, lister, exporter)
  • Créer les procédures tRPC pour les attestations (générer, télécharger, lister)
  • Implémenter la génération de QR code unique par séquence
  • Implémenter la génération de PDF d'attestation avec logo Itinova
  • Créer la fonction d'envoi automatique d'attestation par email

Interface formateur

  • Créer la page FormateurEmargement avec affichage QR code
  • Ajouter la liste des apprenants avec statut de présence
  • Permettre la validation manuelle de présence
  • Afficher l'historique des présences par date

Interface publique

  • Créer la page publique de scan QR code (/emargement/:token)
  • Implémenter le scan avec la caméra du téléphone
  • Afficher la confirmation de présence validée
  • Gérer les erreurs (token invalide, déjà émargé, etc.)

Génération d'attestations

  • Créer le template PDF d'attestation personnalisable
  • Générer automatiquement après validation de toutes les présences
  • Envoyer par email aux apprenants
  • Permettre le téléchargement depuis l'espace formateur

Corrections techniques

  • Corriger le problème d'aperçu de l'application (erreurs TypeScript)

  • Corriger les références à heureDebut/heureFin dans AdminRappels.tsx

  • Corriger l'accès à la propriété dates dans EmargementScan.tsx

  • Corriger l'import manquant de QrCode dans DashboardLayout.tsx

  • Corriger les erreurs TypeScript dans DashboardLayout.tsx (subItems)

  • Ajouter downlevelIteration dans tsconfig.json

  • Corriger l'utilisation de Set dans DateFormationMultiSelect.tsx

  • Corriger l'appel à createAttestation (utiliser enregistrerAttestation)

  • Corriger le lien QR code pour utiliser l'URL publique au lieu de localhost

Page de paramètres de l'application

  • Créer la table parametres dans la base de données

  • Créer les procédures tRPC pour gérer les paramètres

  • Créer la page AdminParametres

  • Ajouter le lien dans le menu après "Configuration SMTP"

  • Modifier qrCodeGenerator pour utiliser l'URL de la BDD

  • Définir l'URL par défaut : https://formations.itinova.org

  • Ajouter DashboardLayout à la page AdminParametres

  • Ajouter DashboardLayout à la page FormateurEmargement

Améliorations page Paramètres

  • Ajouter les champs dans la table parametres : delaiExpirationQR, dureeValiditeToken, notificationsActives
  • Créer la table historiqueParametres pour tracer les modifications
  • Créer les fonctions backend pour gérer les nouveaux paramètres
  • Créer la procédure tRPC pour tester l'accessibilité d'une URL
  • Créer la procédure tRPC pour récupérer l'historique des modifications
  • Mettre à jour l'interface AdminParametres avec les nouveaux champs
  • Ajouter le bouton "Tester l'URL" avec indicateur de statut
  • Ajouter une section "Historique des modifications" dans la page
  • Tester toutes les fonctionnalités

Correction menu de navigation formateur

  • Identifier les pages formateur sans DashboardLayout
  • Ajouter DashboardLayout à toutes les pages formateur
  • Vérifier que le menu s'affiche correctement pour le rôle formateur
  • Tester la navigation dans l'espace formateur

Correction colonnes manquantes dans les tables

  • Vérifier les colonnes manquantes dans la table apprenants
  • Vérifier les colonnes manquantes dans la table sequences
  • Ajouter les colonnes manquantes via SQL
  • Tester les requêtes sur le dashboard admin

Correction table rappels

  • Vérifier les noms de colonnes dans la table rappels
  • Corriger le schéma Drizzle pour correspondre à la base de données
  • Tester les requêtes sur la page Rappels

Améliorations attestations de formation

Base de données

  • Ajouter le paramètre envoiAutomatiqueAttestations dans la table parametres
  • Créer la table historiqueAttestations pour tracer les envois

Backend

  • Créer les fonctions de gestion du paramètre d'envoi automatique
  • Créer les procédures tRPC pour l'historique des attestations
  • Créer la procédure de prévisualisation du PDF

Frontend

  • Ajouter le toggle d'envoi automatique dans AdminParametres
  • Ajouter la prévisualisation PDF dans AdminAttestations
  • Créer la page HistoriqueAttestations dans Traçabilité
  • Ajouter le lien dans le menu de navigation

Tes### Tests

  • Tester le paramètre d'envoi automatique
  • Tester la prévisualisation du modèle
  • Tester la page d'historique

Gestion des attestations de formation (Nouvelle page dans Gestion)

Phase 1 : Schéma de base de données

  • Ajouter les colonnes dans la table formations : modeAttestation (ENUM: 'auto', 'manuel'), modeEnvoi (ENUM: 'auto', 'manuel')
  • Modifier la table attestations pour supporter les documents uploadés manuellement
  • Ajouter les colonnes : documentUrl, documentS3Key, uploadedBy, uploadedAt

Phase 2 : Backend

  • Créer les procédures tRPC pour configurer le mode par formation
  • Créer les procédures pour uploader des documents par apprenant
  • Créer la procédure pour envoyer manuellement une attestation
  • Créer la procédure pour lister les attestations par formation avec filtres

Phase 3 : Interface utilisateur

  • Créer la page AdminGestionAttestations dans le menu Gestion
  • Ajouter la sélection de formation avec configuration des modes
  • Créer l'interface d'upload de documents par apprenant
  • Ajouter les boutons de prévisualisation et d'envoi manuel
  • Créer le tableau des apprenants avec statut des attestations

Phase 4 : Tests

  • Tester la configuration par formation
  • Tester l'upload de documents
  • Tester la prévisualisation
  • Tester l'envoi manuel

Retrait du paramètre d'envoi automatique de la page Paramètres

  • Retirer le paramètre d'envoi automatique des attestations de la fenêtre des paramètres (maintenant géré dans la gestion des attestations)

Finalisation du retrait du paramètre d'envoi automatique

  • Vérifier la cohérence des paramètres dans la page de gestion des attestations
  • Retirer le champ envoiAutomatiqueAttestations de la table parametres dans le schéma
  • Mettre à jour les procédures tRPC liées aux paramètres
  • Tester le workflow complet de configuration et d'envoi automatique des attestations

Améliorations techniques et documentation

  • Corriger les erreurs TypeScript liées aux types templateType dans les rappels
  • Nettoyer les fichiers de migration Drizzle pour éviter les conflits
  • Créer un guide utilisateur pour la configuration des attestations