Commit Graph

174 Commits

Author SHA1 Message Date
Manus
731a5b4d02 Checkpoint: Ajout manuel d'apprenant : Bouton et dialogue pour inscrire manuellement un apprenant à une séquence.
**Fonctionnalité ajoutée :**
- Bouton "Ajouter un inscrit" avec icône UserPlus dans le header de la liste des inscrits
- Dialogue de sélection avec liste déroulante des apprenants disponibles (filtrés pour exclure ceux déjà inscrits)
- Sélection du statut (Confirmé / Liste d'attente)
- Mutation backend `inscriptions.create` pour l'ajout manuel par l'admin (sans vérifications de blocage/capacité)

**Fichiers modifiés :**
- client/src/pages/AdminSequenceInscrits.tsx : Ajout du bouton et du dialogue
- client/src/components/AddInscritForm.tsx : Nouveau composant de formulaire
- server/routers.ts : Ajout de la mutation inscriptions.create

**Résultat :**
Les administrateurs peuvent maintenant ajouter manuellement des apprenants à une séquence depuis l'interface des inscrits.
2026-01-19 11:04:24 -05:00
Manus
032020eb42 Checkpoint: Amélioration visuelle : Ajout d'une alternance de couleurs blanc/bleu sur le tableau des rappels.
**Modification apportée :**
- Alternance de fond entre lignes paires (blanc) et impaires (bleu clair bg-blue-50/70)
- Bleu légèrement soutenu pour un meilleur contraste visuel que le gris
- Opacité à 70% pour un effet subtil et élégant

**Résultat :**
Tableau plus lisible avec une identité visuelle cohérente (thème bleu), améliore le suivi des lignes et la navigation visuelle.
2026-01-19 09:27:31 -05:00
Manus
b66d6b406f Checkpoint: Amélioration visuelle : Ajout d'une alternance de couleurs (zebra striping) sur le tableau des rappels.
**Modification apportée :**
- Alternance de fond entre lignes paires (blanc) et impaires (gris très clair bg-gray-50/50)
- Améliore la lisibilité et facilite le suivi visuel des lignes
- Effet subtil et élégant grâce à l'opacité réduite

**Résultat :**
Tableau plus lisible et professionnel, conforme aux standards modernes d'interface utilisateur.
2026-01-19 09:24:33 -05:00
Manus
ab19f2f325 Checkpoint: Amélioration complète de l'affichage des pièces jointes dans la gestion des rappels.
**Modifications apportées :**
1. Badge "Non" en rouge (bg-red-50, text-red-700, border-red-200) pour un meilleur contraste visuel avec le vert
2. Tooltip informatif au survol du badge "Oui" affichant le nom du fichier et sa taille en Ko
3. Badge "Oui" cliquable pour télécharger directement la pièce jointe sans ouvrir la fenêtre de modification
4. Effet hover vert clair (hover:bg-green-100) pour indiquer l'interactivité

**Résultat :**
Interface plus intuitive et fonctionnelle avec code couleur cohérent (vert = présent/actif, rouge = absent/inactif) et actions directes pour améliorer l'expérience utilisateur.
2026-01-19 09:13:38 -05:00
Manus
91785b4b4d Checkpoint: Amélioration visuelle : Ajout d'icônes colorées pour l'affichage des pièces jointes dans la configuration des rappels.
**Modification apportée :**
- Remplacement de l'affichage texte simple par des badges avec icônes SVG
- Badge vert avec icône check-circle (✓) pour "Oui" (pièce jointe présente)
- Badge gris avec icône x-circle (✗) pour "Non" (pas de pièce jointe)
- Alignement cohérent avec flex et gap pour une meilleure lisibilité

**Résultat :**
Interface plus moderne et visuelle, conforme aux préférences d'UI avec utilisation accrue de la couleur et des icônes de taille appropriée.
2026-01-19 09:01:14 -05:00
Manus
cf67f2b87f Checkpoint: Correction de l'ordre du menu : la section "Gestion technique" est maintenant en dernière position comme demandé. Rebuild complet forcé sur le VPS pour s'assurer que les modifications sont bien prises en compte par le navigateur. Le menu contient bien l'élément "Sécurité SSH (Fail2Ban)" dans la section Gestion technique. 2026-01-18 13:51:30 -05:00
Manus
c0076647d8 Checkpoint: Réorganisation du menu de navigation : création d'une nouvelle section "Gestion technique" et déplacement de "Sécurité SSH (Fail2Ban)" depuis Configuration vers cette nouvelle section. Intégration de la page AdminFail2Ban dans DashboardLayout pour afficher le menu latéral lors de la navigation. Déployé et testé sur le VPS de production. 2026-01-18 13:40:33 -05:00
Manus
4b407b9c83 Checkpoint: Système complet de monitoring Fail2Ban déployé avec succès. Tableau de bord admin affichant en temps réel les IPs bannies, statistiques d'attaques, et historique des bannissements. Fonctionnalité de débannissement manuel d'IPs. Système d'alertes email automatiques configuré : envoie une notification au propriétaire lorsque plus de 10 IPs sont bannies en 1 heure. Vérification toutes les 15 minutes. Déployé et testé sur le VPS de production avec logs confirmant l'initialisation correcte. 2026-01-18 13:26:55 -05:00
Manus
2c0f379c52 Checkpoint: Ajout d'un bouton "Tout renvoyer" dans la page de gestion des attestations pour envoyer en masse toutes les attestations d'une formation. Création de la procédure backend sendAllAttestations qui envoie toutes les attestations disponibles et enregistre chaque envoi dans l'historique. Correction du scheduler de rappels pour vérifier l'heure configurée (intervalle 15 min au lieu de 1h). 2026-01-18 08:39:13 -05:00
Manus
e9e39f6cdd Checkpoint: Corrections multiples pour le système d'attestations :
1. Ajout de l'enregistrement dans l'historique lors de l'envoi d'attestations (backend + frontend)
2. Correction du bouton Renvoyer inactif (selectedSequenceId -> apprenant.sequence.id)
3. Gestion des erreurs avec enregistrement dans l'historique en cas d'échec
4. Support des chemins locaux et URLs pour les fichiers PDF
2026-01-18 07:42:56 -05:00
Manus
b7abb929a5 Checkpoint: Ajout de la possibilité de renvoyer une attestation après qu'elle ait été envoyée :
- Modification de l'interface AdminGestionAttestations.tsx
- Le bouton d'envoi reste maintenant toujours visible (suppression de la condition !isSent)
- Le libellé du bouton change dynamiquement : "Envoyer" si jamais envoyée, "Renvoyer" si déjà envoyée
- Permet de renvoyer une attestation après remplacement ou suppression
- Le backend marque simplement l'attestation comme envoyée à chaque appel
- Déployé sur le VPS de production (https://formations.itinova.org)
- Les utilisateurs peuvent maintenant renvoyer une attestation à tout moment
2026-01-18 05:02:45 -05:00
Manus
7d62ade89b Checkpoint: Correction de l'erreur "aucune attestation disponible pour cet apprenant" lors de l'envoi manuel d'attestation :
- Modification de la fonction handleSendAttestation pour vérifier à la fois documentUrl et urlPdf
- Les attestations uploadées manuellement sont stockées dans documentUrl
- Les attestations générées automatiquement sont stockées dans urlPdf
- La fonction vérifie maintenant les deux champs (documentUrl en priorité, puis urlPdf en fallback)
- Déployé sur le VPS de production (https://formations.itinova.org)
- L'envoi manuel d'attestations uploadées fonctionne maintenant correctement
2026-01-18 04:29:40 -05:00
Manus
a79132e921 Checkpoint: Correction de l'erreur "refetchInscrits is not defined" lors de l'upload d'attestation manuelle :
- Remplacement de refetchInscrits() par refetchApprenants() dans AdminGestionAttestations.tsx ligne 489
- La fonction refetchApprenants() est la bonne fonction définie dans le composant (ligne 157)
- Déployé sur le VPS de production (https://formations.itinova.org)
- L'upload d'attestation manuelle fonctionne maintenant correctement sans erreur JavaScript
2026-01-17 18:30:13 -05:00
Manus
a203b70e27 Checkpoint: Corrections complètes du système de pièces jointes pour les rappels :
- Upload de fichiers avec fallback automatique vers stockage local
- Configuration Nginx pour uploads jusqu'à 10 Mo
- Colonne "Pièce jointe" dans le tableau de gestion des rappels
- Support des fichiers locaux et S3 dans l'envoi d'emails
- Correction de l'encoding base64 pour SMTP/Nodemailer
- Table logsrappels créée dans la base de données MySQL du VPS
2026-01-17 11:12:07 -05:00
Manus
512b989be7 Checkpoint: Ajout d'un bouton pour vider la table des logs d'historique des rappels avec boîte de dialogue de confirmation
**Fonctionnalités ajoutées :**

1. **Procédure tRPC `viderHistoriqueRappels`** (server/routers.ts) :
   - Mutation admin protégée pour supprimer tous les logs de la table logsRappels
   - Retourne le nombre de logs supprimés
   - Utilise une requête SQL directe pour optimiser les performances

2. **Bouton de vidage dans l'interface** (client/src/pages/admin/AdminRappelsHistorique.tsx) :
   - Bouton rouge "Vider l'historique" avec icône de corbeille
   - Dialogue de confirmation AlertDialog avec message d'avertissement
   - Invalidation automatique de la requête historique après suppression
   - Toast de succès avec le nombre de logs supprimés

3. **Correction d'une erreur TypeScript** :
   - Ajout d'une parenthèse fermante manquante dans le router gestionAttestations
   - Correction de l'erreur TS1135: Argument expression expected

**Fichiers modifiés :**
- server/routers.ts : Ajout de la procédure viderHistoriqueRappels
- client/src/pages/admin/AdminRappelsHistorique.tsx : Ajout du bouton avec dialogue

Déployé sur le VPS de production (https://formations.itinova.org)
2026-01-16 09:36:30 -05:00
Manus
e5bfb19558 Checkpoint: Checkpoint saved: Ajout de la colonne "Type d'envoi" dans l'historique des rappels et nettoyage des anciens logs erronés
**Améliorations apportées :**

1. **Colonne "Type d'envoi" avec badge coloré** :
   - Ajout d'une nouvelle colonne dans l'interface d'historique des rappels
   - Badge bleu pour les tests ("Test")
   - Badge vert pour les envois automatiques ("Automatique")
   - Permet de distinguer visuellement les envois de test des envois réels

2. **Correction des filtres** :
   - Correction de l'enum du statut : "succes"/"echec" au lieu de "success"/"failed"
   - Correction des noms de colonnes : "email" au lieu de "emailDestinataire", "type" au lieu de "typeRappel"

3. **Nettoyage des anciens logs** :
   - Ajout d'une procédure tRPC `nettoyerLogsErrones` pour supprimer les logs sans email
   - Exécution de la requête SQL sur le VPS pour nettoyer les données erronées
   - Tous les logs créés avant la correction du schéma ont été supprimés

**Fichiers modifiés :**
- client/src/pages/admin/AdminRappelsHistorique.tsx : Ajout de la colonne Type d'envoi avec badges colorés
- server/routers.ts : Ajout de la procédure nettoyerLogsErrones + correction des enums

**Résultat :**
- L'historique des rappels affiche maintenant clairement si un envoi est un test ou automatique
- Les anciens logs erronés ont été supprimés de la base de données
- Les statistiques sont maintenant plus fiables et précises

Déployé sur le VPS de production (https://formations.itinova.org)
2026-01-16 06:41:58 -05:00
Manus
c05d20dd19 Checkpoint: Checkpoint saved: Suppression des boutons obsolètes de rappel J-7 et J-1 dans la fenêtre de détails des séquences :
- Suppression de 4 boutons : "Aperçu rappel J-7", "Envoyer rappel J-7", "Aperçu rappel J-1", "Envoyer rappel J-1"
- Ces boutons sont maintenant remplacés par le bouton "Tester le rappel" qui envoie automatiquement le bon template configuré
- Fichier modifié : client/src/pages/AdminSequenceInscrits.tsx
- Déployé sur le VPS de production (https://formations.itinova.org)
- Mise à jour du fichier todo.md
2026-01-16 03:37:01 -05:00
Manus
c5f537e245 Checkpoint: Modifications de l'interface utilisateur :
- Page AdminSequences : ouvre en vue réduite par défaut
- DashboardLayout : seule la section "Gestion" est ouverte par défaut à la connexion
- Déployé sur le VPS de production
2026-01-16 03:23:57 -05:00
Manus
7577a58b70 Checkpoint: Création des pages de réinitialisation de mot de passe :
- Ajout de la page /forgot-password pour demander un lien de réinitialisation
- Ajout de la page /reset-password pour définir un nouveau mot de passe
- Ajout du lien "Mot de passe oublié ?" sur la page de connexion
- Installation du module bcrypt dans le sandbox
- Les procédures backend (requestPasswordReset, resetPassword) sont déjà implémentées
- Note: bcrypt temporairement désactivé sur le VPS en attendant la résolution du problème de store pnpm
2026-01-15 16:06:00 -05:00
Manus
e642f23170 Checkpoint: Amélioration du bouton "Tester le rappel" pour utiliser automatiquement le bon template configuré :
- Modification de la procédure testerRappel pour détecter automatiquement le premier rappel actif configuré pour la séquence
- Suppression du paramètre typeRappel (n'est plus nécessaire)
- Création de la fonction sendRappelEmail générique qui utilise le templateType du rappel configuré
- Le bouton frontend envoie maintenant le bon template (rappel 1, 3, 4, 5, 6, etc.) selon la configuration de la séquence
- Gestion des pièces jointes configurées dans le rappel
- Mise à jour du fichier todo.md pour marquer la tâche comme terminée
2026-01-15 12:22:24 -05:00
Manus
695f94ef77 Checkpoint: Correction de l'erreur de validation du type de rappel dans le bouton "Tester le rappel" :
- Ajout du paramètre typeRappel: 'rappel' dans l'appel à testerRappelMutation
- Le backend attendait ce paramètre avec les valeurs 'rappel' ou 'rappelJ1'
- Le bouton envoie maintenant un rappel J-7 par défaut lors du test
- Mise à jour du fichier todo.md pour marquer la tâche comme terminée
2026-01-15 11:57:20 -05:00
Manus
b9804ada14 Checkpoint: Ajout du bouton "Tester le rappel" dans AdminSequences.tsx :
- Ajout de la mutation testerRappelMutation connectée à la procédure tRPC rappels.testerRappel
- Ajout de l'icône Send dans les imports
- Ajout du bouton dans la colonne Actions du tableau des séquences (entre Edit et Delete)
- Le bouton envoie un email de test à l'administrateur avec les données de la séquence sélectionnée
- Validation : le bouton est désactivé si la séquence n'a pas de dates configurées
- Feedback utilisateur : toast de succès ou d'erreur après l'envoi
- Mise à jour du fichier todo.md pour marquer la tâche comme terminée
2026-01-15 11:48:33 -05:00
Manus
6068b0772a Checkpoint: Corrections multiples : template reset_password, bugs UI templates d'email, schémas DB, et table logsRappels
**Ajouts :**
- Template "Réinitialisation de mot de passe" (reset_password) ajouté à l'enum et au système

**Corrections de bugs :**
- Bug de mise à jour du type de template (ajout de key={selectedType} pour forcer remontage)
- Erreur SQL configuration SMTP (correction schéma emailConfig avec champs active, domainVerified, apiKey)
- Erreur de type formateurId (conversion string → number dans AdminSequences.tsx)
- Date de blocage non sauvegardée (ajout champ dateBlocage au schéma sequences)
- Table logsRappels incohérente (suppression colonnes obsolètes, correction enum statut)

**Schémas Drizzle mis à jour :**
- emailTemplates : ajout reset_password à l'enum type
- emailConfig : ajout active, domainVerified, correction apiKey
- sequences : ajout dateBlocage (datetime)
- logsRappels : structure nettoyée et conforme

**Déploiement VPS :**
- Toutes les migrations SQL exécutées avec succès
- Application redémarrée et fonctionnelle
- Historique des rappels prêt à fonctionner (table logsRappels corrigée)
2026-01-15 10:00:03 -05:00
Manus
4dc5aff7b5 Checkpoint: Ajout du template "Réinitialisation de mot de passe" (reset_password) :
- Ajout de "reset_password" à l'enum du schéma Drizzle (table emailTemplates)
- Migration SQL pour modifier l'enum dans la base de données
- Création du template dans la base de données avec un contenu par défaut approprié
- Mise à jour de la procédure tRPC emailTemplates.upsert pour utiliser les noms de colonnes français (titre, couleurPrincipale, couleurSecondaire, piedDePage)
- Mise à jour de la fonction upsertEmailTemplate dans server/db.ts pour utiliser les noms de colonnes français
- Réécriture complète de AdminEmailTemplates.tsx pour utiliser les noms de colonnes français
- Test complet de l'interface : le template s'affiche correctement, peut être modifié et prévisualisé
- Le template contient les variables {{prenom}}, {{nom}}, {{lienReinitialisation}} pour la réinitialisation de mot de passe
- Total de 9 templates d'emails maintenant disponibles (inscription, teaser, rappel, rappelJ1, rappel3-6, reset_password)
2026-01-15 03:18:57 -05:00
Manus
b53801c463 Checkpoint: Corrections multiples :
- Renommage questionnaire.nom → questionnaire.titre dans QuestionnaireReponse.tsx, AdminQuestionnaireEdit.tsx, questionnaireScheduler.ts, questionnaireExport.ts
- Correction des requêtes SQL dans questionnaireDb.ts (suppression de la condition complete inexistante)
- Ajout des colonnes valeurMin et valeurMax dans la table questions
- Renommage de la colonne nom en titre dans la table questionnaires
2026-01-14 03:08:54 -05:00
Manus
24296cc2bf Checkpoint: Retrait du paramètre d'envoi automatique des attestations de la page Paramètres. Ce paramètre est maintenant géré directement dans la page de gestion des attestations pour plus de cohérence. 2026-01-13 03:40:16 -05:00
Manus
bd9cb15f44 Checkpoint: Correction des erreurs tRPC qui retournaient du HTML au lieu de JSON :
- Changement du champ 'nom' en 'titre' pour les questionnaires (backend et frontend)
- Suppression de la propriété 'complete' inexistante dans reponsesQuestionnaires
- Correction du type 'provider' dans la configuration email
- Gestion des valeurs null pour le champ 'fonction' des apprenants
- Résolution de l'erreur logsRappels.email après redémarrage du serveur
2026-01-13 03:21:23 -05:00
Manus
a7602e6740 Checkpoint: Ajout de la page de gestion des attestations de formation
Nouvelle fonctionnalité complète pour gérer les attestations :

- Schéma de base de données : colonnes modeAttestation et modeEnvoi dans formations, colonnes documentUrl, documentS3Key, uploadedBy, uploadedAt dans attestations
- Backend : fichier gestionAttestationsDb.ts, procédures tRPC, fonction sendAttestationEmail
- Interface : page AdminGestionAttestations avec sélection de formation, configuration des modes, tableau des apprenants, boutons upload/prévisualisation/envoi/suppression
- Navigation : lien dans menu Gestion, route /admin/gestion-attestations
2026-01-12 14:57:30 -05:00
Manus
ce64c72f00 Checkpoint: Améliorations de la gestion des attestations de formation :
- Ajout du paramètre d'envoi automatique des attestations dans la page Paramètres
- Ajout de la prévisualisation du modèle d'attestation avec génération PDF
- Création de la page Historique des attestations dans la section Traçabilité
- Création de la table historiqueAttestations pour tracer les envois
- Ajout des procédures tRPC pour l'historique et la prévisualisation
2026-01-12 13:54:18 -05:00
Manus
393265987b Checkpoint: Correction du menu de navigation manquant dans l'espace formateur :
- Ajout du composant DashboardLayout à la page FormateurDashboard
- Le menu de navigation latéral s'affiche maintenant correctement pour les utilisateurs avec le rôle formateur
- Navigation cohérente entre toutes les pages de l'espace formateur (Dashboard et Émargement)
2026-01-12 06:07:28 -05:00
Manus
182b39e78a Checkpoint: Amélioration de la page Paramètres avec :
- Ajout de 3 nouveaux paramètres globaux : délai d'expiration QR codes (minutes), durée de validité tokens (heures), notifications actives (boolean)
- Création de la table historiqueParametres pour tracer toutes les modifications avec userId, userName, champModifié, ancienneValeur, nouvelleValeur et dateModification
- Ajout d'un bouton "Tester l'URL" avec indicateur visuel de statut (vert si accessible, rouge si erreur)
- Affichage de l'historique des modifications dans un tableau avec toutes les informations de traçabilité
- Mise à jour automatique de l'historique lors de chaque modification de paramètre
2026-01-12 03:34:33 -05:00
Manus
44c1cd65fa Checkpoint: Correction de l'affichage du menu de gauche dans les pages Paramètres et Émargement
Modifications :
- Ajout de DashboardLayout dans client/src/pages/AdminParametres.tsx
- Ajout de DashboardLayout dans client/src/pages/FormateurEmargement.tsx

Le menu de navigation s'affiche maintenant correctement dans toutes les pages de l'application.
2026-01-12 03:08:32 -05:00
Manus
0bebe04eea Checkpoint: Ajout d'une page de paramètres pour gérer l'URL des QR codes
Modifications apportées :
- Création de la table parametres dans la base de données
- Création du fichier server/parametresDb.ts avec les fonctions getParametres et updateUrlPublique
- Ajout du router parametres dans server/routers.ts avec les procédures get et updateUrlPublique
- Création de la page client/src/pages/AdminParametres.tsx avec formulaire de modification
- Ajout de la route /admin/parametres dans App.tsx
- Ajout du lien "Paramètres" dans le menu après "Configuration SMTP" dans DashboardLayout
- Modification de server/qrCodeGenerator.ts pour utiliser l'URL de la BDD au lieu de getAppBaseUrl
- URL par défaut définie : https://formations.itinova.org

Fonctionnalités :
- Interface graphique pour modifier l'URL publique de l'application
- Les QR codes d'émargement utilisent maintenant l'URL configurée dans la base de données
- Validation de l'URL avant enregistrement
- Message d'information sur l'impact des modifications
2026-01-12 02:24:59 -05:00
Manus
3981d719e3 Checkpoint: Correction du problème d'aperçu de l'application
Corrections apportées :
- Correction des références à heureDebut/heureFin dans AdminRappels.tsx (utilisation de dateDebut/dateFin)
- Correction de l'accès à la propriété dates dans EmargementScan.tsx (cast de type)
- Ajout de l'import manquant de QrCode dans DashboardLayout.tsx
- Correction des erreurs TypeScript dans DashboardLayout.tsx (gestion de subItems)
- Ajout de downlevelIteration dans tsconfig.json
- Correction de l'utilisation de Set dans DateFormationMultiSelect.tsx (Array.from)
- Correction de l'appel à createAttestation (utilisation de enregistrerAttestation)

L'application fonctionne maintenant correctement sans erreurs TypeScript.
2026-01-11 14:38:06 -05:00
Manus
b64dedc488 Checkpoint: Système d'émargement numérique avec QR code et génération automatique d'attestations :
## Base de données
-  Table `presences` créée (inscriptionId, dateFormationId, heurePresence, modeValidation, validateurId)
-  Colonne `qrCodeToken` ajoutée à la table `sequences`

## Backend
-  Génération de QR code unique par séquence (qrCodeGenerator.ts)
-  Procédures tRPC pour l'émargement (presences.generateQRCode, presences.valider, presences.listBySequence)
-  Fonctions de base de données (presenceDb.ts) pour gérer les présences
-  Génération automatique d'attestation après validation de toutes les présences
-  Intégration avec le service d'attestations existant

## Interface formateur (/formateur/emargement)
-  Sélection de la séquence
-  Génération et affichage du QR code en modal
-  Liste des inscrits avec statut de présence par date
-  Validation manuelle de présence possible
-  Actualisation en temps réel des présences
-  Entrée de menu "Émargement" dans DashboardLayout

## Interface publique (/emargement/:token)
-  Page de scan QR code accessible sans authentification
-  Recherche de l'apprenant par email
-  Sélection de la formation et de la date
-  Validation automatique de la présence via QR code
-  Écrans de confirmation (succès/erreur)
-  Gestion des erreurs (QR invalide, déjà émargé, etc.)

## Génération automatique d'attestations
-  Vérification automatique après chaque validation de présence
-  Génération du PDF d'attestation si toutes les présences sont validées
-  Enregistrement en base de données
-  Upload automatique sur S3

## Dépendances installées
- qrcode (génération de QR codes)
- @types/qrcode (types TypeScript)

Le système est entièrement fonctionnel et prêt à être utilisé par les formateurs et apprenants.
2026-01-11 14:01:22 -05:00
Manus
f9aa8f7838 Checkpoint: Corrections des erreurs TypeScript bloquantes pour la publication :
- 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.
2026-01-09 11:45:27 -05:00
Manus
e9023ed83a Checkpoint: Correction du bug d'affichage du menu latéral pour les formateurs. Le problème venait de l'initialisation de l'état des sections ouvertes/fermées qui ne tenait pas compte du rôle de l'utilisateur. Solution : toutes les sections du menu sont maintenant ouvertes par défaut (MENU_VERSION incrémentée à 3), ce qui garantit que les formateurs voient bien les sections "Tableau de bord" et "Gestion" qui leur sont accessibles. Les sections Configuration, Traçabilité et Analyses restent correctement masquées pour les formateurs grâce au filtrage existant. 2026-01-09 11:32:11 -05:00
Manus
55f0f2795e Checkpoint: Tableau de bord personnalisé pour formateurs avec statistiques (total séquences, séquences à venir, total apprenants) et liste des prochaines interventions avec détails (dates, lieu, capacité). Redirection automatique des formateurs vers /formateur au lieu de /admin. Notifications automatiques par email pour les formateurs lors de nouvelles inscriptions, annulations, capacité maximale atteinte et places disponibles. Menus Configuration, Traçabilité et Analyses masqués pour les formateurs. 2026-01-09 11:05:07 -05:00
Manus
5f1df3f9cc Checkpoint: Implémentation complète des restrictions d'accès pour les formateurs : (1) Ajout du rôle "formateur" dans le schéma de base de données avec champ formateurId pour lier un utilisateur à un formateur. (2) Modification du menu de navigation DashboardLayout pour masquer automatiquement les sections "Configuration", "Traçabilité" et "Analyses" aux utilisateurs ayant le rôle formateur. (3) Filtrage backend des données : création de getSequencesByFormateur, getFormationsByFormateur et getApprenantsByFormateur dans db.ts pour ne retourner que les données pertinentes. (4) Modification des procédures tRPC formations.list, sequences.list et apprenants.list pour utiliser protectedProcedure au lieu de adminProcedure et appliquer le filtrage selon le rôle (formateur vs admin). Les formateurs ne voient désormais que leurs propres formations (celles pour lesquelles ils ont des séquences), leurs propres séquences (où ils sont assignés comme formateur) et uniquement les apprenants inscrits à leurs séquences. Les administrateurs conservent l'accès complet à toutes les données. Cette implémentation garantit une séparation claire des accès et protège les données sensibles tout en permettant aux formateurs de gérer efficacement leurs formations. 2026-01-09 10:32:25 -05:00
Manus
70c45ab064 Checkpoint: Refonte de l'affichage des rappels dans le tableau de gestion des séquences : remplacement de la colonne unique "Rappels configurés" par deux colonnes distinctes "Rappels pré-formation" et "Rappels post-formation". Chaque colonne affiche les rappels correspondants avec leurs badges colorés (bleu pour pré-formation, vert pour post-formation) et l'icône Bell. Les rappels sont organisés par date de formation (une ligne par date). Affichage d'un tiret "-" quand aucun rappel n'est configuré pour une catégorie. Cette séparation en deux colonnes améliore considérablement la lisibilité et permet de visualiser instantanément la configuration des rappels avant et après chaque formation. Les deux colonnes restent visibles dans les vues complète et réduite car ce sont des informations essentielles pour la gestion des communications automatiques. 2026-01-08 11:40:10 -05:00
Manus
8c71e715a8 Checkpoint: Séparation de l'affichage des rappels configurés en deux catégories distinctes dans la gestion des séquences : rappels pré-formation (timing = 'pre_formation') affichés en bleu avec label "Pré-formation", et rappels post-formation (timing = 'post_formation') affichés en vert avec label "Post-formation". Chaque catégorie possède son propre label coloré (text-blue-600 pour pré, text-green-600 pour post) et ses badges sont stylisés en conséquence (bg-blue-50/text-blue-700/border-blue-300 pour pré, bg-green-50/text-green-700/border-green-300 pour post). Les rappels sont filtrés dynamiquement par date : rappelsPre = date.rappels?.filter((r: any) => r.timing === 'pre_formation') et rappelsPost = date.rappels?.filter((r: any) => r.timing === 'post_formation'). L'affichage est organisé verticalement avec space-y-1 entre les catégories, chaque catégorie ayant son propre conteneur avec space-y-0.5 pour le label et les badges. Cette séparation visuelle claire permet de distinguer instantanément les rappels envoyés avant la formation (préparation des apprenants) des rappels envoyés après (suivi et feedback). Les badges conservent l'icône Bell et affichent le nom du rappel. Si aucun rappel n'existe dans les deux catégories, le message "Aucun rappel" est affiché en italique gris. 2026-01-08 11:18:00 -05:00
Manus
8965dd0ea6 Checkpoint: Ajout de deux vues (complète et réduite) pour la gestion des séquences avec un bouton de basculement permettant d'alterner entre les deux modes d'affichage. Vue complète : affiche toutes les colonnes (Formation, Nom, Dates, Rappels configurés, Lieu, Formateur, Public cible, Capacité, Statut, Actions). Vue réduite : masque les colonnes Lieu, Formateur et Public cible pour un affichage plus compact et focalisé sur les informations essentielles. Simplification de l'affichage des rappels configurés : suppression des titres "Date 1:", "Date 2:" etc., les badges de rappels sont maintenant affichés directement sur une seule ligne par date, rendant la colonne plus compacte et lisible. Le bouton de basculement utilise les icônes Maximize2 (pour passer en vue complète) et Minimize2 (pour passer en vue réduite) avec un état géré par isCompactView. Les colonnes conditionnelles utilisent {!isCompactView && (<>...</>)} pour masquer/afficher dynamiquement Lieu, Formateur et Public cible. Cette double vue améliore l'expérience utilisateur en permettant d'adapter l'affichage selon le contexte d'utilisation : vue réduite pour un aperçu rapide, vue complète pour des informations détaillées. 2026-01-08 10:54:11 -05:00
Manus
b0fcb4d573 Checkpoint: Ajout d'une colonne "Rappels configurés" dans le tableau de gestion des séquences permettant de visualiser instantanément les rappels automatiques associés à chaque date de formation. Modification backend : création de la fonction getRappelsByDateFormation() dans db.ts qui récupère les rappels spécifiques à une date ainsi que les rappels globaux (sans dates spécifiques). Modification du router sequences.list pour inclure les rappels dans les données des séquences via Promise.all. Interface frontend : ajout de la colonne entre "Dates" et "Lieu" avec badges violets (bg-purple-50, text-purple-700, border-purple-300) et icône Bell pour chaque rappel, organisés par date avec labels "Date 1:", "Date 2:", etc. Affichage "Aucun rappel" en italique gris pour les dates sans rappels. Cette fonctionnalité améliore considérablement la visibilité de la configuration des rappels et facilite la gestion globale des communications automatiques. 2026-01-08 10:37:10 -05:00
Manus
bb3baf813a Checkpoint: Amélioration majeure de la lisibilité de la colonne "Dates concernées" dans le tableau des rappels automatiques avec un système de badges colorés et iconographiques : formations en bleu avec icône GraduationCap, séquences en vert avec icône CalendarDays, dates individuelles en orange, et "Toutes les dates" en gris avec icône Calendar. Hiérarchie visuelle claire avec formations/séquences sur la première ligne et dates en dessous légèrement indentées. Chaque groupe formation/séquence est visuellement séparé pour faciliter le scan rapide. Les badges utilisent des couleurs de fond pastel (bg-blue-100, bg-green-100, bg-orange-50, bg-gray-50) avec texte contrasté pour une excellente lisibilité. Cette refonte transforme une colonne dense et difficile à lire en une interface intuitive et visuellement agréable. 2026-01-08 10:24:58 -05:00
Manus
6b047e74cb Checkpoint: Colorisation des icônes du menu latéral par catégorie pour améliorer la navigation visuelle et l'identification rapide des sections : Tableau de bord en bleu (text-blue-600), Gestion en vert (text-green-600), Configuration en orange (text-orange-600), Traçabilité en violet (text-purple-600), et Analyses en rose (text-pink-600). Ajout d'une fonction getCategoryColor() dans DashboardLayout.tsx qui applique automatiquement la couleur appropriée aux titres de section, chevrons et icônes de menu selon la catégorie. Les icônes actives conservent la couleur primaire pour indiquer la page courante. Cette amélioration visuelle facilite la navigation et rend l'interface plus intuitive et moderne. 2026-01-08 10:15:07 -05:00
Manus
09ace5f5b6 Checkpoint: Harmonisation des couleurs des icônes sur toutes les pages de l'application pour une meilleure cohérence visuelle et ergonomie : icônes corbeille (Trash2) en rouge (#dc2626 / text-red-600) pour les actions de suppression, et icônes œil (Eye) en bleu (#2563eb / text-blue-600) pour les actions de visualisation/aperçu. Pages corrigées : AdminFormations, AdminRappels, AdminQuestionnaires, AdminEmailTemplates, AdminSequenceInscrits (3 boutons), AdminQuestionnaireEdit. Les pages AdminApprenants, AdminSequences, AdminUsers et AdminQuestionnaireEdit avaient déjà les bonnes couleurs. 2026-01-08 09:56:14 -05:00
Manus
727a6678e7 Checkpoint: Implémentation de 3 fonctionnalités avancées pour le tableau des rappels : (1) Badges visuels 🌍 Global (bleu) et 🎯 Ciblé (orange) dans la colonne Nom pour identifier rapidement le type de rappel, (2) Filtres par formation et séquence permettant de filtrer les rappels affichés (les rappels globaux passent tous les filtres), (3) Export CSV avec bouton dédié générant un fichier contenant toutes les informations des rappels (nom, type, template, délai, heure, formations, séquences, dates, statut) en respectant les filtres actifs. Interface utilisateur améliorée avec une meilleure organisation visuelle et des outils de gestion plus puissants. 2026-01-08 09:21:10 -05:00
Manus
2b31900255 Checkpoint: Améliorations du tableau des rappels : renommage de la colonne "Template" en "Template d'email" et ajout d'une colonne "Dates concernées" affichant les formations, séquences et dates spécifiques associées à chaque rappel. La fonction getRappels a été enrichie pour récupérer automatiquement les détails des dates de formation (formation, séquence, ordre). L'affichage groupé permet de voir en un coup d'œil si un rappel s'applique à toutes les dates ou seulement à des dates spécifiques. 2026-01-08 09:08:27 -05:00
Manus
f331f9bb5f Checkpoint: Refonte majeure du système de rappels : sélection granulaire au niveau des dates de formation individuelles (dateFormationId) au lieu des séquences. Permet de choisir précisément quelles dates d'une séquence recevront un rappel. Interface hiérarchique avec séquences dépliables et checkboxes par date. Scheduler adapté pour traiter date par date. 2026-01-08 08:53:41 -05:00
Manus
6ee87f9b22 Checkpoint: Refonte complète du système de rappels pour permettre une gestion granulaire par séquence
Fonctionnalités ajoutées :
- Table de liaison rappelSequences pour associer rappels et séquences
- Composant SequenceMultiSelect avec recherche et multi-sélection
- Gestion des associations dans les procédures create/update
- Modification du scheduler pour filtrer les séquences selon les associations
- Si aucune séquence n'est sélectionnée, le rappel s'applique à toutes les séquences (comportement par défaut)

Le système permet maintenant de configurer des rappels spécifiques pour certaines dates/séquences particulières, offrant une flexibilité complète dans la gestion des rappels automatiques.
2026-01-08 08:27:20 -05:00