Commit Graph

369 Commits

Author SHA1 Message Date
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
Manus
806366db01 Checkpoint: Correction de l'erreur SQL lors du chargement manuel d'attestations - modification de la requête dans gestionAttestationsDb.ts pour sélectionner uniquement les colonnes existantes au lieu de toutes les colonnes 2026-01-30 07:41:39 -05:00
Manus
53609e901e Checkpoint: Ajout d'une colonne 'Mode d'envoi' dans l'historique des attestations pour distinguer les envois manuels des envois automatiques. Modifications: ajout du champ modeEnvoi dans la table historiqueAttestations, mise à jour du scheduler d'attestations, et ajout de la colonne dans l'interface utilisateur. Déployé sur le VPS de production. 2026-01-30 06:01:30 -05:00
Manus
dd581594b5 Checkpoint: Implémentation de l'envoi automatique des attestations : création d'un scheduler qui vérifie quotidiennement (à 10h00) les séquences terminées la veille et envoie automatiquement les attestations par email pour les formations ayant le mode d'envoi automatique activé (modeEnvoi='auto'). Le système utilise le template email personnalisable créé précédemment et enregistre les envois dans les logs de notifications pour éviter les doublons. Déployé et testé sur le VPS. 2026-01-30 04:37:31 -05:00
Manus
26a16327cf Checkpoint: Correction et finalisation du template email attestation : ajout du type 'attestation' dans le frontend, création automatique du template au démarrage de l'application, déploiement réussi sur le VPS. Le template est maintenant visible et modifiable dans l'interface de gestion des templates. 2026-01-30 04:04:16 -05:00
Manus
493366fa10 Checkpoint: Ajout d'un template d'email personnalisable pour l'envoi des attestations de formation. Le template utilise des variables dynamiques ({{prenomApprenant}}, {{nomApprenant}}, {{nomFormation}}) et peut être modifié depuis l'interface de gestion des templates. Déployé sur le VPS avec migration SQL. 2026-01-29 11:58:20 -05:00
Manus
a221deb4f1 Checkpoint: Correction des permissions : les super formateurs n'ont plus accès à la section Configuration, uniquement à Gestion, Traçabilité et Analyses. 2026-01-29 11:41:13 -05:00
Manus
c16392900c Checkpoint: Ajout du rôle super_formateur avec accès à toutes les formations et séquences. Migration SQL appliquée en local et sur le VPS de production. 2026-01-29 11:35:35 -05:00
Manus
1a8d598339 Checkpoint: Correction du bug d'envoi de la deuxième pièce jointe dans les emails de rappel. Les paramètres attachmentUrl2, attachmentFilename2 et attachmentMimeType2 ont été ajoutés dans la procédure d'envoi de test. Déployé et testé sur le VPS. 2026-01-28 12:32:05 -05:00
Manus
f0f3d83fae Checkpoint: Correction de l'affichage des labels des pièces jointes qui apparaissaient en double. Ajout d'un prop label au composant FileUpload pour personnaliser le texte. Déployé sur le VPS. 2026-01-28 12:21:05 -05:00
Manus
86d3d437bd Checkpoint: Évolution du système de rappels pour permettre jusqu'à 2 pièces jointes au lieu d'une seule. Migration SQL appliquée en local et sur le VPS de production. Les rappels existants sont préservés. 2026-01-28 10:13:32 -05:00
Manus
8c6dda473a Checkpoint: Intégration complète des signatures tactiles (matin et après-midi) dans les feuilles de présence PDF. Correction du bug apres-midi vs apres_midi. Logs de debug retirés. Déployé sur VPS. 2026-01-28 09:44:13 -05:00