Commit Graph

380 Commits

Author SHA1 Message Date
Manus
429d6cf264 Checkpoint: V1.23 - Amélioration boîte de dialogue d'ajout manuel d'apprenant : tri alphabétique (nom puis prénom) et champ de recherche en temps réel sur nom/prénom/email 2026-02-26 12:52:34 -05:00
Manus
feee0d803e Checkpoint: V1.22 - Correction complète des invitations ICS : envoi des 3 fichiers + encodage UTF-8 correct
## Problèmes résolus

### Bug 1 : Seulement 2 invitations sur 3 envoyées
**Cause :** Tentative de conversion base64 incorrecte qui corrompait la première invitation
**Solution :** Conversion explicite Buffer → base64 avec encodage UTF-8 pour toutes les invitations

### Bug 2 : Fichiers ICS corrompus (erreur Outlook "Nous n'avons pas pu importer le calendrier")
**Cause :** Encodage incorrect lors de la transmission SMTP
**Solution :** Conversion UTF-8 → base64 explicite avec contentType correct

## Modifications techniques

- `server/emailService.ts` : Conversion explicite en base64 UTF-8 pour chaque invitation ICS
- `server/_core/smtpSender.ts` : Ajout de logs détaillés pour tracer les pièces jointes
- ContentType : `text/calendar; charset=utf-8` (sans method=REQUEST qui posait problème)

## Déploiement

 Serveur TEST (108.143.67.56) - Validé
 Serveur PROD (98.71.216.234) - Déployé

Les apprenants reçoivent maintenant les 3 invitations ICS et peuvent les importer correctement dans Outlook.
2026-02-26 10:35:14 -05:00
Manus
77e5544a90 Checkpoint: Correction du bug d'importation des invitations Outlook (ICS) - ajout de l'encodage UTF-8 explicite et des en-têtes corrects pour les pièces jointes calendrier 2026-02-26 09:42:34 -05:00
Manus
35eb0e78f8 Checkpoint: Implémentation du paramètre notificationsActives pour contrôler les notifications d'inscription et d'annulation aux formateurs. Le paramètre permet maintenant de désactiver les notifications formateur tout en gardant les rappels actifs. Déployé sur TEST. 2026-02-26 09:00:42 -05:00
Manus
bf12b9b680 Checkpoint: V1.20 - Amélioration de l'envoi d'attestations par groupe. Le bouton d'envoi par séquence est maintenant toujours visible dès qu'il y a des attestations disponibles, permettant d'envoyer les nouvelles attestations ou de renvoyer celles déjà envoyées. Message de confirmation adapté selon la situation. 2026-02-26 07:53:53 -05:00
Manus
198656947f Checkpoint: V1.19 - Ajout de l'affichage de l'URL complète sous le QR code d'émargement apprenant. L'URL est maintenant visible et cliquable, permettant de tester l'émargement directement depuis un navigateur web sans avoir besoin de scanner le QR code. 2026-02-26 03:30:45 -05:00
Manus
844118251b Checkpoint: V1.18 - Correction définitive et robuste de l'erreur "(void 0) is not a function" lors de la suppression de dates. Utilisation de useCallback pour stabiliser la référence de la fonction removeDate et éviter les problèmes de closure React. Préservation des signatures lors de l'ajout de dates grâce au champ id dans le schéma Zod. 2026-02-11 09:16:33 -05:00
Manus
33abf134e4 Checkpoint: V1.17 PROD - Correction définitive du bug de perte de signatures déployée sur production. Le schéma Zod de sequences.update inclut maintenant le champ id optionnel, permettant la mise à jour intelligente des dates sans suppression des signatures existantes. 2026-02-11 08:36:51 -05:00
Manus
0f0695a4c7 Checkpoint: V1.17 - Correction DÉFINITIVE du bug de perte de signatures : ajout du champ id dans le schéma Zod de sequences.update. Le backend peut maintenant recevoir et traiter les IDs des dates existantes envoyés par le frontend. 2026-02-11 08:32:22 -05:00
Manus
69fd3f01cc Checkpoint: V1.16 - Correction définitive perte de signatures lors de l'ajout de dates dans une séquence. Le frontend envoie maintenant les IDs des dates existantes pour permettre au backend de les mettre à jour au lieu de les supprimer/recréer. 2026-02-11 08:24:34 -05:00
Manus
6761044f4a Checkpoint: Correction critique : préservation des signatures lors de l'ajout/modification de dates dans une séquence - Remplacement de la logique de suppression/recréation par une mise à jour intelligente 2026-02-11 08:07:04 -05:00
Manus
2b01c4ba6c Checkpoint: Correction définitive du stockage local pour les signatures formateur - Remplacement de storagePut() par fs.writeFileSync() pour éviter les timeouts liés à l'API Manus non configurée sur le VPS 2026-02-10 11:46:00 -05:00
Manus
3e7b15c54c Rollback to 9c6a5028 2026-02-10 11:34:51 -05:00
Manus
5cf4313f10 Checkpoint: Correction de l'affichage des présences formateur dans la fenêtre des émargements
## Problème identifié
Les présences formateur validées n'apparaissaient pas dans la fenêtre des émargements. La fonction `getSignaturesFormateursBySequence()` lisait la table `presences` avec un filtre `typeUtilisateur = "formateur"`, alors que les présences formateur sont enregistrées dans une table séparée `presences_formateur`.

## Solution implémentée
- Modification de `getSignaturesFormateursBySequence()` dans `presenceDb.ts` pour lire directement la table `presences_formateur`
- Suppression du filtre `typeUtilisateur` devenu inutile
- Correction définitive et robuste pour éviter toute récurrence

## Déploiement
 Serveur de production (98.71.216.234) - Compilé et redémarré
 Toutes les présences formateur sont maintenant visibles dans l'interface
2026-02-10 11:30:23 -05:00
Manus
9c6a5028e0 Rollback to fcb05034 2026-02-10 11:15:22 -05:00
Manus
1c5ed12845 Checkpoint: Correction définitive de l'erreur "fetch failed" lors de l'émargement formateur
## Problème identifié
Redéclaration de la variable `signatureS3Key` à la ligne 2645 du fichier `server/routers.ts` qui causait une erreur JavaScript et faisait planter la mutation tRPC.

## Solution implémentée
Changement de `const signatureS3Key = ...` en `signatureS3Key = ...` pour utiliser l'assignation au lieu de la redéclaration.

## Déploiement
 Serveur de production (98.71.216.234) - Compilé et redémarré
 Application online et fonctionnelle

La validation formateur devrait maintenant fonctionner correctement.
2026-02-10 10:58:11 -05:00
Manus
343aca9de7 Rollback to fcb05034 2026-02-10 10:41:43 -05:00
Manus
80c5797321 Checkpoint: Correction du bug "Formateur introuvable avec cet email"
## Problème identifié
La recherche du formateur par email était sensible à la casse et aux espaces, ce qui empêchait de trouver le formateur même s'il existait dans la base de données.

## Solution implémentée
Modification de la logique de recherche dans `server/routers.ts` (lignes 2617-2623) :
- Normalisation de l'email saisi : `trim().toLowerCase()`
- Utilisation de SQL `LOWER(TRIM())` pour la comparaison en base de données
- La recherche est maintenant insensible à la casse et aux espaces

## Déploiement
 Serveur de production (98.71.216.234) - Bundle: index-C6kRdcg-.js
 Application redémarrée avec PM2

Le formateur peut maintenant être trouvé quelle que soit la casse utilisée lors de la saisie de l'email.
2026-02-10 10:35:03 -05:00
Manus
fcb0503488 Checkpoint: Correction de deux bugs critiques de l'émargement formateur
## Bug 1 : Erreur "inscription requise pour un apprenant"
**Problème :** Le paramètre typeUtilisateur: "formateur" n'était pas passé dans l'appel à la mutation validerPresence
**Solution :** Ajout du paramètre manquant dans EmargementFormateurScan.tsx (ligne 101)

## Bug 2 : Erreur "Aucune date de formation ne correspond à aujourd'hui"
**Problème :** Le backend cherchait automatiquement la date du jour avec CURDATE() au lieu d'utiliser le dateFormationId sélectionné par le formateur
**Solution :** Remplacement de la logique de recherche automatique par l'utilisation directe du dateFormationId fourni (routers.ts lignes 2631-2635)

## Déploiements effectués
 Serveur de production (98.71.216.234) - Bundle: index-C6kRdcg-.js
 Serveur de recette (108.143.67.56) - Bundle: index-CHmE9ro_.js

Les formateurs peuvent maintenant :
- Signer leur présence sans erreur d'inscription
- Sélectionner n'importe quelle date de la séquence (pas seulement aujourd'hui)
2026-02-10 10:23:55 -05:00
Manus
6e27e3909e Checkpoint: Correction du bug "inscription requise pour un apprenant" lors de l'émargement formateur
Problème identifié :
- Le paramètre typeUtilisateur: "formateur" n'était pas passé dans l'appel à la mutation validerPresence depuis EmargementFormateurScan.tsx
- Sans ce paramètre, le backend traitait la requête comme un apprenant et déclenchait l'erreur "Inscription requise pour un apprenant"

Correction appliquée :
- Ajout du paramètre typeUtilisateur: "formateur" dans l'appel à validerPresence (ligne 101 de EmargementFormateurScan.tsx)
- Le backend peut maintenant distinguer correctement les formateurs des apprenants

Prochaines étapes :
- Déployer sur les serveurs VPS (recette et production)
- Tester avec l'email marianne.tarrieu@gmail.com sur la séquence 1 du 03/02/26
2026-02-10 10:04:15 -05:00
Manus
62bf5f3a99 Checkpoint: Ajout d'un cadre bleu (border-2 border-blue-500) autour des images de signature des apprenants et formateurs dans la page d'émargement. L'effet hover passe au bleu foncé (border-blue-700) pour une meilleure interactivité visuelle. 2026-02-10 09:54:35 -05:00
Manus
023a047ee0 Checkpoint: Affichage des images de signature (matin et après-midi) directement dans la page d'émargement pour les apprenants et formateurs. Les images s'affichent en miniature (h-8 w-16) à côté des informations de présence et sont cliquables pour agrandissement. 2026-02-10 05:09:37 -05:00
Manus
672494ccc0 Checkpoint: Intégration des signatures formateurs dans la feuille de présence PDF - Les signatures tactiles des formateurs (matin et après-midi) sont maintenant affichées dans la section dédiée de la feuille de présence au lieu des lignes vides 2026-02-09 11:53:03 -05:00
Manus
5d8054b4b8 Checkpoint: Modification du format d'affichage des signatures formateurs
Modifications apportées :
- Format d'affichage identique à celui des apprenants
- Une zone par date avec deux lignes (matin et après-midi)
- Case verte (CheckCircle2) pour indiquer qu'une signature est présente
- Affichage du nom "Formateur", de la date/heure de signature
- Icône de signature cliquable pour voir la signature tactile en grand
- Suppression de l'affichage avec les grandes images de signature
- Ergonomie cohérente avec la section apprenants
- Déployé sur recette (108.143.67.56) et production (98.71.216.234)
2026-02-09 11:43:12 -05:00
Manus
04d8faf919 Checkpoint: Amélioration de l'ergonomie de l'encart des signatures formateurs
Modifications apportées :
- Regroupement des signatures formateurs par date (au lieu d'une signature par ligne)
- Affichage d'une zone par date avec les signatures matin et après-midi à l'intérieur
- Ergonomie identique à celle des apprenants pour une meilleure cohérence visuelle
- Affichage de "Aucune signature" pour les périodes sans signature
- Heure de signature affichée dans un badge pour chaque période
- Design distinct avec bordure bleue pour différencier des signatures apprenants
- Déployé sur recette (108.143.67.56) et production (98.71.216.234)
2026-02-09 11:10:56 -05:00
Manus
37924ad4fd Checkpoint: Ajout d'un encart dédié pour afficher les signatures des formateurs sur la page d'émargement numérique
Modifications apportées :
- Backend : Ajout de la fonction getSignaturesFormateursBySequence dans presenceDb.ts
- Backend : Ajout de la procédure tRPC presences.listSignaturesFormateurs dans routers.ts
- Frontend : Ajout de l'encart visuel des signatures formateurs dans FormateurEmargement.tsx
- L'encart affiche les signatures avec date, période (matin/après-midi), heure et image de signature
- Rafraîchissement automatique toutes les 30 secondes
- Design distinct avec bordure bleue pour différencier des signatures apprenants
- Déployé sur recette (108.143.67.56) et production (98.71.216.234)
2026-02-09 11:04:09 -05:00
Manus
a40e0bf6cd Checkpoint: Checkpoint: Restauration de la procédure sequences.getDatesByFormateurToken et de la fonction getSequenceByFormateurToken dans db.ts. Le système d'émargement formateur fonctionne maintenant correctement avec chargement des dates. Prochaine étape : corriger l'affichage du message "[ERREUR MUTATION]" pour les doublons. 2026-02-06 09:43:43 -05:00
Manus
98c3b21ec1 Checkpoint: Implémentation complète de la fonctionnalité QR code formateur :
- Procédure generateQRCodeFormateur dans routers.ts
- Fonction validerPresenceFormateur dans presenceDb.ts
- Bouton "QR Code Formateur" dans FormateurEmargement.tsx
- Page EmargementFormateurScan.tsx pour le scan du QR code
- Route /emargement-formateur/{token}
- Gestion automatique de la date du jour
- Stockage de la signature sur S3
- Champ qrCodeFormateurToken dans le schéma sequences

Prêt pour déploiement et tests sur le VPS.
2026-02-03 11:04:37 -05:00
Manus
70f9055073 Rollback to eebcb648 2026-02-02 17:32:58 -05:00
Manus
04001e7bcd Checkpoint: Implémentation du QR code dédié pour l'émargement formateur avec signature tactile
- Création de la page /emargement-formateur/:token avec formulaire simplifié
- Procédure backend presences.validerFormateur dédiée
- Deux boutons QR code dans l'interface formateur (apprenants + formateur)
- Génération automatique des URL distinctes pour chaque type d'utilisateur
- Déploiement réussi sur le VPS de production
2026-02-02 15:11:18 -05:00
Manus
f9983adada Checkpoint: Correction du bug d'émargement formateur bloqué sur la saisie d'email
- Ajout de la détection automatique formateur/apprenant dans EmargementScan.tsx
- Nouvelle procédure tRPC getSequenceByToken pour récupérer les infos de séquence
- Interface adaptée selon le type d'utilisateur (apprenant ou formateur)
- Déploiement réussi sur le VPS de production

Le système détecte maintenant automatiquement si l'email correspond à un apprenant ou un formateur, et affiche l'interface appropriée pour chaque cas.
2026-02-02 14:18:46 -05:00
Manus
e8410230a9 Checkpoint: Implémentation de l'émargement formateur par QR code avec signature tactile
Modifications principales :
- Ajout des champs typeUtilisateur et formateurId dans la table presences pour distinguer formateurs et apprenants
- Détection automatique du rôle (formateur/apprenant) via l'email lors du scan du QR code
- Interface de signature tactile réutilisée pour les formateurs
- Intégration des signatures tactiles formateur dans la génération PDF de la feuille de présence
- QR code dans l'espace formateur accessible pour l'émargement
- Tests unitaires validés avec succès

Le système permet maintenant aux formateurs d'émarger (matin et après-midi) via le même QR code que les apprenants, avec détection automatique du rôle et intégration des signatures dans le PDF.
2026-02-02 13:24:08 -05:00
Manus
eebcb64848 Checkpoint: Session d'améliorations multiples :
- Amélioration du feedback visuel lors du chargement des attestations (affichage immédiat du nom de fichier)
- Ergonomie unifiée pour tous les uploads de fichiers (composant FileUpload)
- Réorganisation de la modal des rappels (largeur optimisée, disposition horizontale)
- Modification de la feuille de présence (signatures formateur matin/après-midi sans date)
- Permissions de gestion des attestations pour formateurs et super-formateurs
- Rafraîchissement automatique de la page d'émargement numérique (30 secondes)
- Indicateur visuel de rafraîchissement "Mis à jour il y a X secondes"
- Vérification empêchant l'émargement avant la date de formation

Toutes les modifications sont déployées sur le VPS de production.
2026-02-02 10:59:38 -05:00
Manus
b74e575d11 Checkpoint: Retrait des compteurs dynamiques de taux de présence et ajout d'une vérification backend empêchant l'émargement avant la date de formation concernée 2026-02-02 10:27:19 -05:00
Manus
68df39a072 Checkpoint: Ajout d'un indicateur visuel de rafraîchissement (badge "Mis à jour il y a X secondes" avec icône animée) et de statistiques en temps réel du taux de présence par période (matin/après-midi) sur la page d'émargement numérique 2026-02-02 10:17:14 -05:00
Manus
0163b46e5d Checkpoint: Ajout d'un rafraîchissement automatique toutes les 30 secondes sur la page d'émargement numérique pour mettre à jour automatiquement la liste des inscrits et des présences sans recharger manuellement la page 2026-02-02 10:09:48 -05:00
Manus
42d57c6e7c Checkpoint: Ajout des permissions de gestion des attestations pour les formateurs et super-formateurs : création de formateurProcedure, fonction canAccessSequence pour vérifier les accès par séquence, modification des procédures uploadDocument, deleteDocument, sendAttestation et sendAllAttestations avec vérifications de permissions 2026-02-02 09:53:28 -05:00
Manus
fadadf0d7d Checkpoint: Retrait de la ligne de date en dessous des signatures du formateur dans la feuille de présence, ne conservant que les deux lignes de signature (Matin et Après-midi) 2026-02-02 09:41:57 -05:00
Manus
b1a140449a Checkpoint: Modification de la feuille de présence : ajout de deux colonnes de signature pour le formateur (Matin et Après-midi), disposition horizontale optimisée, date unique en dessous des signatures 2026-02-02 09:38:48 -05:00
Manus
fec271c19a Checkpoint: Réorganisation complète de la modal des rappels : largeur optimisée (50vw), labels et champs sur une seule ligne horizontale pour Configuration générale et Timing d'envoi, pièces jointes compactes avec icône et textes alignés, 4 zones colorées distinctes, espacement optimisé pour écran 24 pouces 2026-02-02 08:00:46 -05:00
Manus
014c2cd68b Checkpoint: Unification de l'ergonomie de chargement de fichiers dans toute l'application : le composant FileUpload utilise maintenant la même interface élégante que la boîte de dialogue d'attestations. Affichage immédiat du nom de fichier, animation de chargement avec barre de progression, feedback visuel cohérent (gris → bleu → vert). Cette amélioration s'applique automatiquement à toutes les pièces jointes des rappels (2 par rappel). Déployé sur le VPS de production. 2026-02-02 06:13:58 -05:00
Manus
a77123e07f Checkpoint: Solution finale pour le feedback instantané lors de l'upload d'attestations : affichage immédiat du nom du fichier sélectionné dans la boîte de dialogue dès la sélection. Le nom reste visible pendant toute la durée de l'upload avec la barre de progression. Cette approche simple et fiable résout définitivement le problème de latence en donnant un feedback visuel instantané à l'utilisateur. Déployé sur le VPS de production. 2026-01-30 09:54:14 -05:00
Manus
e68949baeb Checkpoint: Résolution du problème de latence d'affichage avec double requestAnimationFrame : cette technique garantit que le navigateur peint l'animation à l'écran avant de bloquer sur le fetch. Le premier requestAnimationFrame permet à React de mettre à jour l'état, le second force le navigateur à afficher visuellement l'animation avant de démarrer l'upload. Déployé sur le VPS de production. 2026-01-30 09:37:18 -05:00
Manus
1bbbe842b5 Checkpoint: Résolution définitive de la latence d'affichage du message d'upload : utilisation de flushSync() de React DOM pour forcer un rendu synchrone et immédiat de l'interface avant le traitement du fichier. L'animation "Upload en cours..." s'affiche maintenant instantanément dès la sélection du fichier, sans aucune latence. Déployé sur le VPS de production. 2026-01-30 09:09:14 -05:00
Manus
f9401dcb72 Checkpoint: Correction définitive de la latence d'affichage du message d'upload : ajout d'un délai de 50ms après setUploading(true) pour permettre à React de rafraîchir l'interface avant de démarrer le traitement du fichier. L'animation "Upload en cours..." s'affiche maintenant instantanément dès la sélection du fichier. Déployé sur le VPS de production. 2026-01-30 08:57:56 -05:00
Manus
41af13c47e Checkpoint: Amélioration du feedback visuel pendant le chargement du fichier d'attestation : l'indicateur de progression s'affiche maintenant immédiatement dès la sélection du fichier, sans délai d'attente. Déployé sur le VPS de production. 2026-01-30 08:50:31 -05:00
Manus
c102572403 Checkpoint: Corrections multiples sur les attestations : bug de modal bloquée corrigé, remplacement des variables dans l'email d'attestation fonctionnel, et type attestation ajouté au schéma de validation 2026-01-30 08:46:39 -05:00
Manus
8bfc851fe8 Checkpoint: Corrections multiples : 1) Bug de statut d'attestation résolu - le statut passe maintenant à "Aucune attestation" après suppression. 2) Erreur de validation du template attestation corrigée - ajout de "attestation" dans l'enum des types de templates autorisés. 3) Interface de chargement d'attestations modernisée. Déployé sur le VPS de production. 2026-01-30 08:26:24 -05:00
Manus
15728cda48 Checkpoint: Correction du bug où le statut restait "envoyé" après la suppression d'une attestation. Maintenant, lors de la suppression, les champs emailEnvoye et dateEnvoiEmail sont réinitialisés, faisant passer le statut à "Aucune attestation". Déployé sur le VPS de production. 2026-01-30 08:12:31 -05:00
Manus
7032fd890f Checkpoint: Interface modernisée de chargement d'attestations avec design coloré (dégradés bleu-violet), icônes grandes et expressives, zone de drop stylisée, et meilleure hiérarchie visuelle. Déployé sur le VPS de production. 2026-01-30 08:04:36 -05:00