- 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
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
// Correction pour validerPresenceFormateur - à intégrer dans presenceDb.ts ligne 189-256
|
|
|
|
export async function validerPresenceFormateur(params: {
|
|
formateurId: number;
|
|
sequenceId: number;
|
|
dateFormationId?: number;
|
|
periode: "matin" | "apres_midi";
|
|
modeValidation: "qrcode" | "manuel";
|
|
commentaire?: string;
|
|
signatureUrl?: string;
|
|
signatureS3Key?: string;
|
|
}) {
|
|
const db = await getDb();
|
|
if (!db) throw new Error("Database not available");
|
|
|
|
// Si dateFormationId est fourni, vérifier la date
|
|
if (params.dateFormationId) {
|
|
const dateFormation = await db
|
|
.select()
|
|
.from(datesFormation)
|
|
.where(eq(datesFormation.id, params.dateFormationId))
|
|
.limit(1);
|
|
|
|
if (dateFormation.length === 0) {
|
|
throw new Error("Date de formation introuvable");
|
|
}
|
|
|
|
// Vérifier que la date actuelle est le jour de la formation ou après
|
|
const now = new Date();
|
|
const dateDebut = new Date(dateFormation[0].dateDebut);
|
|
|
|
// Réinitialiser les heures pour comparer uniquement les dates
|
|
now.setHours(0, 0, 0, 0);
|
|
dateDebut.setHours(0, 0, 0, 0);
|
|
|
|
if (now < dateDebut) {
|
|
throw new Error("Vous ne pouvez pas émarger avant la date de formation");
|
|
}
|
|
|
|
// Vérifier si la présence existe déjà pour cette période
|
|
const presenceExistante = await db
|
|
.select()
|
|
.from(presences)
|
|
.where(
|
|
and(
|
|
eq(presences.formateurId, params.formateurId),
|
|
eq(presences.dateFormationId, params.dateFormationId),
|
|
sql`${presences.periode} = ${params.periode}`,
|
|
sql`${presences.typeUtilisateur} = 'formateur'`
|
|
)
|
|
);
|
|
|
|
if (presenceExistante.length > 0) {
|
|
throw new Error(`Présence déjà validée pour ${params.periode === 'matin' ? 'le matin' : 'l\'après-midi'}`);
|
|
}
|
|
}
|
|
|
|
// Créer la présence formateur
|
|
await db.insert(presences).values({
|
|
typeUtilisateur: "formateur",
|
|
formateurId: params.formateurId,
|
|
dateFormationId: params.dateFormationId || null,
|
|
periode: params.periode,
|
|
heurePresence: new Date(),
|
|
modeValidation: params.modeValidation,
|
|
commentaire: params.commentaire,
|
|
signatureUrl: params.signatureUrl,
|
|
signatureS3Key: params.signatureS3Key,
|
|
});
|
|
|
|
return { success: true };
|
|
}
|