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.
This commit is contained in:
2300
drizzle/meta/0017_snapshot.json
Normal file
2300
drizzle/meta/0017_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -120,6 +120,13 @@
|
||||
"when": 1770047974825,
|
||||
"tag": "0016_aromatic_king_cobra",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"version": "5",
|
||||
"when": 1770056161269,
|
||||
"tag": "0017_lethal_namor",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -414,8 +414,12 @@ export type InsertSupportFormation = typeof supportsFormation.$inferInsert;
|
||||
*/
|
||||
export const presences = mysqlTable("presences", {
|
||||
id: int("id").autoincrement().primaryKey(),
|
||||
inscriptionId: int("inscriptionId").notNull(),
|
||||
inscriptionId: int("inscriptionId"),
|
||||
dateFormationId: int("dateFormationId").notNull(),
|
||||
/** Type d'utilisateur qui s'émarge (apprenant ou formateur) */
|
||||
typeUtilisateur: mysqlEnum("typeUtilisateur", ["apprenant", "formateur"]).notNull().default("apprenant"),
|
||||
/** ID du formateur (si typeUtilisateur = formateur) */
|
||||
formateurId: int("formateurId"),
|
||||
/** Période de la journée (matin ou après-midi) */
|
||||
periode: mysqlEnum("periode", ["matin", "apres_midi"]).notNull().default("matin"),
|
||||
heurePresence: timestamp("heurePresence").defaultNow().notNull(),
|
||||
@@ -424,7 +428,7 @@ export const presences = mysqlTable("presences", {
|
||||
/** ID de l'utilisateur qui a validé (formateur ou admin) */
|
||||
validateurId: int("validateurId"),
|
||||
commentaire: text("commentaire"),
|
||||
/** URL de la signature manuscrite de l'apprenant */
|
||||
/** URL de la signature manuscrite (apprenant ou formateur) */
|
||||
signatureUrl: varchar("signatureUrl", { length: 500 }),
|
||||
/** Clé S3 de la signature manuscrite */
|
||||
signatureS3Key: varchar("signatureS3Key", { length: 500 }),
|
||||
|
||||
Reference in New Issue
Block a user