Commit Graph

321 Commits

Author SHA1 Message Date
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
Manus
700e4956fc Checkpoint: Correction du bug : signatures manquantes dans les feuilles de présence PDF
🐛 Problème identifié :
- Le code utilisait `dateInfo.ordre` (1, 2, 3...) pour chercher les présences
- Mais les présences sont indexées par `dateFormationId` (ID réel de la date en base)
- Résultat : aucune correspondance trouvée, signatures non affichées

 Corrections apportées :
- Ajout du champ `id` dans l'interface `FeuillePresenceInfo` (exportService.ts)
- Modification de la logique de recherche : `dateInfo.ordre` → `dateInfo.id` (ligne 228)
- Ajout de l'ID dans le mapping des dates (routers.ts, ligne 1178)
- Déploiement sur VPS (98.71.216.234)
- Application redémarrée avec PM2

📋 Fonctionnement corrigé :
- Les dates incluent maintenant leur ID réel de la base de données
- La recherche des présences utilise cet ID pour la correspondance
- Les signatures sont chargées et affichées dans les bonnes colonnes du PDF

🔍 Test requis :
- Exporter une feuille de présence pour une séquence avec signatures
- Vérifier que les signatures apparaissent dans le PDF généré
2026-01-28 06:14:11 -05:00
Manus
3029e797c9 Checkpoint: Déploiement VPS réussi - Intégration des signatures tactiles dans les feuilles de présence PDF
 Déploiement effectué :
- Fichiers copiés sur le VPS (98.71.216.234)
  * server/exportService.ts
  * server/routers.ts
- Application redémarrée avec PM2 (formation-manager)
- Vérification des logs : application en ligne et fonctionnelle
- URL de production : https://formations.itinova.org

📋 Fonctionnalités déployées :
- Export PDF avec signatures tactiles intégrées
- Chargement automatique des images depuis uploads/signatures/
- Affichage dans les colonnes Matin/Après-midi du tableau
- Gestion des cas sans signature (cellule vide)

🔍 Tests requis :
- Tester l'export de feuille de présence sur une séquence avec présences signées
- Vérifier la qualité et la taille des signatures dans le PDF généré
- Valider que les signatures correspondent aux bonnes dates/périodes
2026-01-28 05:54:40 -05:00
Manus
8f808980dc Checkpoint: Intégration des signatures tactiles dans les feuilles de présence PDF :
 Modifications implémentées :
- Interface ApprenantPresence étendue pour inclure les présences avec signatures
- Fonction generateFeuillePresence modifiée pour charger et afficher les images de signatures
- Hook didDrawCell ajouté pour insérer les images dans les cellules du tableau PDF
- Procédure exportFeuillePresence modifiée pour récupérer toutes les présences avec signatures
- Signatures chargées depuis le système de fichiers local (uploads/signatures/)
- Gestion automatique des cas où la signature n'existe pas (cellule vide)
- Hauteur des cellules augmentée (minCellHeight: 15) pour accommoder les signatures

📋 Fonctionnement :
- Lors de l'export PDF, le système récupère toutes les présences de la séquence
- Pour chaque apprenant, les signatures sont associées à leurs dates respectives
- Les images PNG sont chargées depuis le disque et converties en base64
- Les signatures sont insérées dans les colonnes Matin/Après-midi correspondantes
- Si aucune signature n'existe, la cellule reste vide pour signature manuscrite

🔧 Technique :
- Utilisation de jsPDF avec jspdf-autotable
- Chargement des images avec fs.readFileSync
- Conversion en data URL base64 pour insertion dans le PDF
- Gestion des erreurs avec console.warn si fichier manquant
2026-01-28 05:21:57 -05:00
Manus
a0141e3f71 Checkpoint: Système de signature tactile pour émargement numérique - Version finale :
 Fonctionnalités implémentées :
- Signature tactile obligatoire lors de l'émargement via QR code sur smartphone
- Stockage des signatures en local dans uploads/signatures/[formation-id]-[sequence-id]/
- Affichage des informations de validation dans l'interface formateur : "Prénom Nom a validé(e) le [date et heure]"
- Icône cliquable pour visualiser la signature en grand format dans une modale
- Correction du bug Drizzle ORM avec sql.raw() pour les colonnes de signature

 Corrections techniques :
- Retrait des logs de debug de routers.ts
- Utilisation de sql.raw() au lieu de l'accès direct aux colonnes dans presenceDb.ts
- Gestion robuste des signatures nulles dans l'affichage

 Déploiement :
- Système testé et fonctionnel sur le VPS (formations.itinova.org)
- Signatures stockées localement (S3 abandonné pour problème DNS avec forge.manus.im)

📝 Améliorations futures possibles :
- Intégration des signatures dans les exports PDF des feuilles de présence
- Configuration Nginx pour servir /uploads/signatures/ avec les bons headers
- Validation de signature (nombre minimum de traits, taille minimale)
- Historique/audit trail des signatures
2026-01-28 02:27:52 -05:00
Manus
5821f82eb2 Rollback to feb708bb 2026-01-27 08:14:31 -05:00
Manus
6c48a8fae0 Checkpoint: Correction du bug d'affichage de l'icône de signature :
- Ajout des champs signatureUrl, signatureS3Key et dateSigned dans getPresencesBySequence
- L'icône de signature s'affiche maintenant correctement quand une signature existe
2026-01-27 07:48:51 -05:00
Manus
abca9956ff Checkpoint: Correction de l'affichage des signatures dans l'émargement :
- Format modifié : "Prénom Nom a validé(e) le date et heure"
- Icône de signature agrandie (h-5 w-5) et plus visible avec hover bleu
- Ajout d'un title "Voir la signature" sur l'icône
- Espacement amélioré (ml-3)
2026-01-27 07:44:50 -05:00
Manus
feb708bb3e Checkpoint: Affichage des informations de signature dans la fenêtre d'émargement numérique :
- Ajout des champs signatureUrl, signatureS3Key et dateSigned dans getPresencesByInscription
- Affichage du nom du signataire, date/heure de validation à côté de chaque puce matin/après-midi
- Icône cliquable pour visualiser la signature en grand format
- Modale Dialog pour afficher la signature manuscrite
- Fonction getPresenceInfo pour récupérer les détails de présence
- Interface moderne avec icône de stylo SVG pour les signatures
2026-01-27 07:38:59 -05:00
Manus
5356819ceb Checkpoint: Modification du stockage des signatures d'émargement pour utiliser le système de fichiers local au lieu de S3 :
- Remplacement de storagePut par fs.writeFileSync dans routers.ts
- Structure de dossiers : uploads/signatures/[formation-id]-[sequence-id]/
- Noms de fichiers uniques avec crypto.randomBytes
- URLs publiques relatives : /uploads/signatures/[formation-id]-[sequence-id]/[fichier].png
- Correction de l'erreur "fetch failed" causée par l'inaccessibilité de forge.manus.im sur le VPS
2026-01-27 07:28:09 -05:00
Manus
1e915acd5b Checkpoint: Implémentation de la signature manuscrite tactile pour l'émargement via QR code :
- Intégration du composant SignaturePad dans EmargementScan.tsx
- Ajout des champs de signature dans la table presences (signatureUrl, signatureS3Key, dateSigned)
- Modification de la procédure presences.valider pour accepter et uploader la signature en S3
- Stockage automatique de l'URL et de la clé S3 dans la base de données
- Correction des types nullables dans exportService.ts (codeEtablissement, fonction)
- Les apprenants doivent maintenant signer avec le doigt sur l'écran avant de valider leur présence
2026-01-27 04:29:01 -05:00
Manus
b3b808145c Checkpoint: Ajout d'une confirmation visuelle améliorée après émargement réussi : animations fluides, heure d'enregistrement précise et design moderne 2026-01-25 15:20:13 -05:00
Manus
61f0e81a9d Checkpoint: Correction du problème d'émargement via QR code : ajout de la colonne commentaire manquante dans la table presences et correction de la requête SQL avec mysqlEnum 2026-01-25 15:13:26 -05:00
Manus
ab65ce6690 Checkpoint: Correction de l'erreur SQL lors de la validation de présence via QR code - retrait du .limit(1) qui causait un problème de paramètres avec mysqlEnum dans Drizzle ORM 2026-01-25 14:31:13 -05:00
Manus
935e6959ba Checkpoint: Correction complète du bouton œil pour les formateurs - changement de adminProcedure à protectedProcedure pour apprenants.getById ET apprenants.getInscriptions 2026-01-25 12:59:59 -05:00
Manus
71c790e9b4 Checkpoint: Correction du bouton œil dans la page apprenants pour les formateurs - changement de adminProcedure à protectedProcedure pour apprenants.getInscriptions 2026-01-25 12:49:08 -05:00
Manus
590232be89 Checkpoint: Correction définitive de la page de gestion des attestations :
- Affichage correct de la liste des apprenants par séquence
- Date de début affichée dans l'en-tête de chaque séquence
- Tri chronologique des séquences par date de début
- Filtre fonctionnel : Toutes les séquences / Séquences terminées / Séquences à venir
- Badge de statut visuel (Terminée en vert, À venir en orange)
- Compteur d'envois par séquence
- Bouton "Tout renvoyer" pour envoi groupé par séquence
- Les données sont maintenant correctement récupérées et affichées
2026-01-25 11:44:14 -05:00
Manus
2ebc3dfa99 Checkpoint: Améliorations de la page de gestion des attestations :
- Affichage de la date de début dans l'en-tête de chaque séquence
- Tri chronologique des séquences par date de début
- Filtre fonctionnel : Toutes les séquences / Séquences terminées / Séquences à venir
- Badge de statut visuel (Terminée en vert, À venir en orange)
- Compteur d'envois par séquence
- Bouton "Tout renvoyer" pour envoi groupé par séquence
- Correction robuste de l'affichage des apprenants
2026-01-25 11:29:16 -05:00
Manus
8efcb65f0f Rollback to 8e20ac40 2026-01-25 11:19:22 -05:00
Manus
727a29fa63 Checkpoint: Correction de l'erreur SQL MIN() vide dans la récupération de la première date des séquences - remplacé par post-traitement JavaScript 2026-01-25 11:12:50 -05:00
Manus
b32487aa4d Checkpoint: Améliorations de la gestion des attestations :
- Affichage de la date de début dans l'en-tête de chaque séquence
- Bouton d'envoi groupé par séquence
- Filtre séquences terminées/à venir
2026-01-25 09:16:22 -05:00
Manus
8e20ac40dd Checkpoint: Correction finale de l'affichage vide des apprenants dans la gestion des attestations. Problème résolu en aplatissant la structure de la requête Drizzle ORM (structure imbriquée non supportée) et en restructurant les résultats côté serveur. 2026-01-25 09:06:36 -05:00
Manus
f51e027a5c Checkpoint: Correction de l'affichage vide des apprenants dans la gestion des attestations après le regroupement par séquence. Le problème venait de la référence à un champ premiereDate inexistant. Solution: utiliser l'ID de séquence pour le tri et le regroupement. 2026-01-25 09:03:13 -05:00
Manus
77a65cbfa2 Checkpoint: Ajout du tri chronologique des séquences dans la gestion des attestations:
- Modification du backend pour inclure la première date de chaque séquence
- Tri des séquences par ordre chronologique (première date en premier)
- Les séquences sont maintenant affichées dans l'ordre temporel pour une meilleure organisation
2026-01-25 08:56:53 -05:00
Manus
63e8ea17d1 Checkpoint: Modification de l'affichage de la gestion des attestations pour regrouper les apprenants par séquence:
- Ajout d'en-têtes visuels pour chaque séquence avec nom et compteur d'apprenants
- Badge affichant le nombre d'attestations envoyées par séquence
- Amélioration de l'organisation et de la lisibilité pour les formateurs
- Suppression de la colonne "Séquence" devenue redondante
2026-01-25 08:50:50 -05:00
Manus
964b83d4d1 Checkpoint: Correction de l'accès à la liste des apprenants dans la gestion des attestations pour les formateurs:
- Remplacement de adminProcedure par protectedProcedure pour getApprenantsWithStatus
- Les formateurs peuvent maintenant voir la liste des apprenants et gérer les attestations
2026-01-25 08:40:38 -05:00
Manus
3e14adcf70 Checkpoint: Implémentation de l'émargement numérique avec deux signatures par jour (matin et après-midi):
- Ajout du champ 'periode' dans la table presences
- Modification des procédures backend pour gérer les deux périodes
- Mise à jour de l'interface EmargementScan avec choix de période
- Mise à jour de l'interface FormateurEmargement avec validation séparée matin/après-midi
- La feuille de présence PDF était déjà configurée avec deux colonnes
2026-01-25 08:26:42 -05:00
Manus
1460b41f2d Checkpoint: Colorisation des boutons d'actions de la fenêtre "Inscrits à la séquence" avec des couleurs pastel et animations au survol 2026-01-25 08:12:39 -05:00
Manus
9762cac6d3 Checkpoint: Mise à jour du tableau de bord formateur avec le même design moderne que le tableau de bord admin : cartes colorées avec dégradés, animations au survol, et redirection automatique des formateurs 2026-01-25 07:57:25 -05:00
Manus
3764fde6fe Checkpoint: Correction de la désactivation intempestive des rappels : les dates ne sont plus supprimées/recréées lors de la modification du formateur, seulement lors d'un réel changement de dates 2026-01-25 07:33:23 -05:00
Manus
54adfa346b Checkpoint: Implémentation de la synchronisation automatique entre table users (role=formateur) et table formateurs : auto-création dans createUser/updateUser + script de migration pour les formateurs existants 2026-01-25 07:25:49 -05:00
Manus
eb111099c6 Checkpoint: Masquer le menu "Gestion technique" pour les formateurs en ajoutant cette section à la liste des menus filtrés dans DashboardLayout 2026-01-25 07:11:03 -05:00
Manus
a541fd3ff1 Checkpoint: Corriger l'accès des formateurs à la liste des inscrits : remplacement de adminProcedure par protectedProcedure pour la procédure listBySequence afin que les formateurs puissent voir les inscrits dans le détail des séquences 2026-01-25 05:39:26 -05:00
Manus
60aeee71c7 Checkpoint: Autoriser les formateurs à accéder aux exports PDF/Excel et aux feuilles de présence : remplacement de adminProcedure par protectedProcedure pour les trois procédures exportExcel, exportPDF et exportFeuillePresence 2026-01-25 05:28:18 -05:00
Manus
3c6f3eb741 Checkpoint: Restreindre les droits des formateurs : masquer les boutons de création/modification/suppression des apprenants pour les formateurs (seuls les administrateurs peuvent les voir) 2026-01-23 11:49:46 -05:00
Manus
953677467a Checkpoint: Restreindre les droits des formateurs : masquer les boutons de création/modification/suppression des formations et séquences pour les formateurs (seuls les administrateurs peuvent les voir) 2026-01-23 11:42:31 -05:00
Manus
5d40b5be96 Checkpoint: Ajout validation frontend temps réel + backend pour dates séquences (date fin > date début). Indicateur visuel (bordure rouge + message erreur) dans formulaires création/édition. Validation backend dans procédures create/update. Correction structure table logsrappels. Amélioration système test rappels (badge compteur, désactivation visuelle, boîte dialogue avec email + progression). 2026-01-23 10:09:17 -05:00
Manus
95245b38e8 Checkpoint: Ajout d'une validation backend dans les procédures create et update des séquences pour garantir que la date de fin soit toujours après la date de début pour toutes les dates de formation. Cela empêche la création de fichiers ICS invalides. 2026-01-23 08:57:41 -05:00
Manus
437ea58959 Checkpoint: 🎉 Système de test de rappels amélioré - Version finale
 Synchronisation base de données sandbox avec VPS
- Correction structure table logsrappels (colonnes ENUM type, typeEnvoi, statut)
- Suppression colonnes obsolètes (emailDestinataire, typeRappel, dateSequence, createdAt)

 Boîte de dialogue de test améliorée
- Champ de saisie pour l'email du destinataire
- Envoi à tous les inscrits confirmés (à l'adresse de test)
- Indicateur de progression moderne avec animation
- Gestion d'erreur claire pour séquences sans rappels actifs

 Badge de compteur de rappels actifs
- Affichage du nombre de rappels actifs par séquence (ex: "1")
- Désactivation visuelle du bouton pour séquences sans rappels
- Tooltip informatif adapté au contexte

Prêt pour déploiement sur VPS via bouton Publish
2026-01-22 11:01:33 -05:00
Manus
71678af959 Checkpoint: Amélioration visuelle du bouton de test de rappels
- Ajout d'un badge de compteur indiquant le nombre de rappels actifs (ex: "1")
- Désactivation visuelle du bouton pour les séquences sans rappels actifs (icône grisée)
- Tooltip informatif adapté selon le contexte (nombre de rappels ou message d'erreur)
- Amélioration de l'expérience utilisateur avec feedback visuel clair
2026-01-22 10:32:58 -05:00
Manus
a20ad09d7c Checkpoint: Correction de l'erreur "Aucun rappel actif configuré pour cette séquence"
- Retrait de la validation frontend complexe qui ne fonctionnait pas correctement
- Le backend gère maintenant l'erreur et affiche un message clair via toast
- L'utilisateur reçoit un message d'erreur explicite au lieu d'une erreur technique
- Amélioration de l'expérience utilisateur lors du test de rappels
2026-01-22 10:22:31 -05:00
Manus
2a1f739901 Checkpoint: Amélioration de l'indicateur de progression du test de rappels
- Indicateur visuel moderne avec animation (spinner + effet ping)
- Message "Envoi en cours..." pendant le traitement
- Toast final affichant le nombre exact d'emails envoyés
- Approche simple et efficace sans complexité de streaming temps réel
2026-01-22 09:34:32 -05:00
Manus
e3dffb85f4 Checkpoint: Amélioration du test de rappels avec envoi multiple et indicateur de progression
- Modification du backend pour envoyer un email par inscrit confirmé (tous à l'adresse de test)
- Ajout d'un indicateur de progression moderne avec animation (spinner + effet ping)
- Message de succès affichant le nombre d'emails envoyés
- Validation avec séquence "test 3" : 3 emails envoyés correctement (4ème inscrit sans email ignoré)
- Synchronisation complète de la structure de la table logsrappels avec le VPS
2026-01-22 08:50:00 -05:00
Manus
94fed67d19 Checkpoint: Modification de la boîte de dialogue de test de rappels
- Ajout d'un champ de saisie pour l'email du destinataire
- Modification du texte : "Tous les rappels configurés pour cette séquence seront envoyés à l'adresse email que vous indiquez ci-dessous"
- Validation de l'email avant envoi
- Backend modifié pour envoyer à l'email saisi au lieu de tous les inscrits
- Les logs enregistrent correctement l'email de test utilisé
2026-01-22 08:33:07 -05:00
Manus
58cbc2d85c Checkpoint: Ajout d'une boîte de dialogue de confirmation avant l'envoi de test des rappels
 Correction de la structure de la table logsrappels pour correspondre au VPS
- Modification de la colonne statut: ENUM('succes','echec') au lieu de ENUM('success','failed')
- Modification de la colonne typeEnvoi: ENUM('automatique','test')
- Suppression des colonnes en trop (emailDestinataire, typeRappel, dateSequence, createdAt)
 Les logs de rappels s'enregistrent maintenant correctement dans la base de données
2026-01-22 08:16:00 -05:00
Manus
87c53ba75a Checkpoint: Ajout d'un badge orange pâle (bg-orange-50, text-orange-700, border-orange-200) pour la colonne Type dans l'historique des rappels pour améliorer la lisibilité et la cohérence visuelle 2026-01-21 13:25:41 -05:00
Manus
c18425ea42 Checkpoint: Harmonisation des boutons d'action (Prévisualiser, Envoyer, Charger) en bleu, ajout d'un indicateur de progression pour l'upload des PDF, et correction de l'erreur logsRappels (colonne type déjà présente) 2026-01-21 13:14:47 -05:00
Manus
be0b12f6c2 Checkpoint: Modification du bouton "Charger" dans la page de gestion des attestations pour le mettre en bleu vif (bg-blue-600 hover:bg-blue-700) avec texte blanc. Le bouton est maintenant plus visible et attrayant. Déployé sur le serveur de production. 2026-01-21 13:05:08 -05:00
Manus
dc78f234f9 Checkpoint: Ajout de badges colorés orange avec icônes calendrier pour chaque date dans l'affichage des rappels automatiques. Format complet : Badge Formation (bleu) › Badge Séquence (vert) : Badge Date 1 (orange), Badge Date 2 (orange), etc. Affichage très visuel et attrayant. Déployé sur le serveur de production. 2026-01-21 12:59:07 -05:00