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
This commit is contained in:
Manus
2026-01-27 04:29:01 -05:00
parent b3b808145c
commit 1e915acd5b
16 changed files with 4936 additions and 11 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -43,6 +43,20 @@
"when": 1769347298041,
"tag": "0005_shallow_bloodstrike",
"breakpoints": true
},
{
"idx": 6,
"version": "5",
"when": 1769505491815,
"tag": "0006_broad_sabra",
"breakpoints": true
},
{
"idx": 7,
"version": "5",
"when": 1769506135258,
"tag": "0007_lively_shiver_man",
"breakpoints": true
}
]
}

View File

@@ -414,6 +414,10 @@ 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 */
signatureUrl: varchar("signatureUrl", { length: 500 }),
/** Clé S3 de la signature manuscrite */
signatureS3Key: varchar("signatureS3Key", { length: 500 }),
createdAt: timestamp("createdAt").defaultNow().notNull(),
});
@@ -442,6 +446,12 @@ export const attestations = mysqlTable("attestations", {
emailEnvoye: boolean("emailEnvoye").default(false).notNull(),
/** Date d'envoi de l'email */
dateEnvoiEmail: timestamp("dateEnvoiEmail"),
/** URL de la signature manuscrite */
signatureUrl: varchar("signatureUrl", { length: 500 }),
/** Clé S3 de la signature manuscrite */
signatureS3Key: varchar("signatureS3Key", { length: 500 }),
/** Date de signature */
dateSigned: timestamp("dateSigned"),
dateGeneration: timestamp("dateGeneration").defaultNow().notNull(),
});