// 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 }; }