Commit Graph

390 Commits

Author SHA1 Message Date
Manus CI
d580c9a107 CI : workflow validate.yml, manifeste ci.required:true, garde VITEST, tests isolés 2026-08-21 11:10:29 +00:00
Manus
62e65ed32a chore: versionner le manifeste de déploiement 2026-08-18 09:42:16 +02:00
Manus
81d1871d40 Checkpoint: Fix: ajout timeZone Europe/Paris dans tous les toLocaleDateString avec heure dans emailService.ts et exportService.ts — corrige l'affichage 7h00 au lieu de 9h00 dans les mails de rappel 2026-07-15 10:30:59 +00:00
Manus
f3170d5f50 Checkpoint: V1.28 - Déploiement PROD de la fonctionnalité "Gestion des plans de formations" sur 180.149.196.138. Image Docker v2 construite et déployée. Règle iptables ajoutée pour autoriser le réseau Docker à accéder à MariaDB. Todo.md mis à jour. 2026-07-11 03:50:37 +00:00
Manus
61ba1a8d1d Checkpoint: Fonctionnalité complète "Gestion des plans de formations" :
- 3 nouvelles tables DB : catalogueFormation, planFormation, planFormationItem
- Backend tRPC : routers catalogue et planFormation avec CRUD complet, import CSV/Excel, suggestion automatique
- Frontend : pages PlanFormation, PlanFormationDetail, CatalogueFormation + menu sidebar
- Déployé sur le serveur de recette (TEST) : https://formations.recette.santinova-soft.org
- Portail applicatif mis à jour avec la carte de l'application
2026-05-27 17:31:02 +00:00
Manus
6952ae6907 Checkpoint: Implémentation complète de la fonctionnalité "Gestion des plans de formations" :
- Schéma DB : 3 nouvelles tables (catalogueFormation, planFormation, planFormationItem)
- Backend tRPC : routers catalogue et planFormation (CRUD, import bulk CSV, suggestions, toggle validée Itinova)
- Frontend : page Plans de formation (liste par établissement/année, CRUD, soumission/validation)
- Frontend : page Détail plan (items, liaison catalogue, suggestions automatiques)
- Frontend : page Catalogue de formation (liste, filtres thème/Itinova/OPCO, import CSV, badges)
- Menu sidebar : nouvelle section "Plans de formations" avec sous-menus
- Tests unitaires : 13 tests (scoring suggestions, validation données, parsing CSV)
2026-05-27 16:39:18 +00:00
Manus
54159fd872 Checkpoint: V1.27 - Optimisation taille PDFs feuille de présence : compression pngjs (résolution 500x160px), réduction de ~40 Mo à < 1 Mo par fichier 2026-03-04 09:40:42 -05:00
Manus
4063e298b9 Checkpoint: V1.26 - Feuille de présence : un PDF par jour (A4 portrait, colonnes sig. matin + après-midi sur même ligne, zone signature formateur). Correction des bugs d'upload attestations et de plantage PDF. 2026-03-02 04:39:32 -05:00
Manus
460d2f3922 Checkpoint: V1.25 - Correction plantage génération feuille de présence
Résolution du dépassement de largeur du tableau PDF (185mm > 182mm) qui causait un plantage lors de la génération de la feuille de présence pour les groupes avec beaucoup d'apprenants. Largeurs de colonnes optimisées à 180mm total avec marges réduites à 10mm. Déployé sur TEST et PROD.
2026-03-02 04:21:23 -05:00
Manus
2c3891f979 Checkpoint: V1.24 - Correction erreur SQL upload attestations
Suppression des colonnes obsolètes (signatureUrl, signatureS3Key, dateSigned) de la table attestations qui causaient une erreur SQL lors de l'upload de documents. La procédure uploadSignature obsolète a également été supprimée du code. Déployé et testé sur TEST et PROD.
2026-02-27 05:38:01 -05:00
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