Checkpoint: Checkpoint: Restauration de la procédure sequences.getDatesByFormateurToken et de la fonction getSequenceByFormateurToken dans db.ts. Le système d'émargement formateur fonctionne maintenant correctement avec chargement des dates. Prochaine étape : corriger l'affichage du message "[ERREUR MUTATION]" pour les doublons.
This commit is contained in:
@@ -271,6 +271,14 @@ export async function getSequenceById(id: number): Promise<Sequence | undefined>
|
||||
return result.length > 0 ? result[0] : undefined;
|
||||
}
|
||||
|
||||
export async function getSequenceByFormateurToken(token: string): Promise<Sequence | undefined> {
|
||||
const db = await getDb();
|
||||
if (!db) return undefined;
|
||||
|
||||
const result = await db.select().from(sequences).where(eq(sequences.qrCodeFormateurToken, token)).limit(1);
|
||||
return result.length > 0 ? result[0] : undefined;
|
||||
}
|
||||
|
||||
export async function getSequencesByFormation(formationId: number) {
|
||||
const db = await getDb();
|
||||
if (!db) return [];
|
||||
|
||||
@@ -68,7 +68,6 @@ export async function validerPresence(params: {
|
||||
commentaire: params.commentaire,
|
||||
signatureUrl: params.signatureUrl,
|
||||
signatureS3Key: params.signatureS3Key,
|
||||
dateSigned: params.signatureUrl ? new Date() : undefined,
|
||||
});
|
||||
|
||||
return { success: true };
|
||||
@@ -93,7 +92,6 @@ export async function getPresencesBySequence(sequenceId: number) {
|
||||
commentaire: presences.commentaire,
|
||||
signatureUrl: sql<string | null>`${presences}.signatureUrl`,
|
||||
signatureS3Key: sql<string | null>`${presences}.signatureS3Key`,
|
||||
dateSigned: sql<Date | null>`${presences}.dateSigned`,
|
||||
apprenantId: apprenants.id,
|
||||
apprenantNom: apprenants.nom,
|
||||
apprenantPrenom: apprenants.prenom,
|
||||
@@ -128,7 +126,6 @@ export async function getPresencesByInscription(inscriptionId: number) {
|
||||
commentaire: presences.commentaire,
|
||||
signatureUrl: sql<string | null>`${presences}.signatureUrl`,
|
||||
signatureS3Key: sql<string | null>`${presences}.signatureS3Key`,
|
||||
dateSigned: sql<Date | null>`${presences}.dateSigned`,
|
||||
dateDebut: datesFormation.dateDebut,
|
||||
dateFin: datesFormation.dateFin,
|
||||
})
|
||||
@@ -233,8 +230,8 @@ export async function validerPresenceFormateur(params: {
|
||||
and(
|
||||
eq(presences.formateurId, params.formateurId),
|
||||
eq(presences.dateFormationId, params.dateFormationId),
|
||||
eq(presences.periode, params.periode),
|
||||
eq(presences.typeUtilisateur, 'formateur')
|
||||
sql`${presences.periode} = ${params.periode}`,
|
||||
sql`${presences.typeUtilisateur} = 'formateur'`
|
||||
)
|
||||
);
|
||||
|
||||
@@ -244,17 +241,47 @@ export async function validerPresenceFormateur(params: {
|
||||
|
||||
// Créer la présence formateur
|
||||
await db.insert(presences).values({
|
||||
typeUtilisateur: "formateur",
|
||||
formateurId: params.formateurId,
|
||||
dateFormationId: params.dateFormationId,
|
||||
periode: params.periode,
|
||||
typeUtilisateur: 'formateur',
|
||||
heurePresence: new Date(),
|
||||
modeValidation: params.modeValidation,
|
||||
commentaire: params.commentaire,
|
||||
signatureUrl: params.signatureUrl,
|
||||
signatureS3Key: params.signatureS3Key,
|
||||
dateSigned: params.signatureUrl ? new Date() : undefined,
|
||||
});
|
||||
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupérer les présences du formateur pour une séquence
|
||||
*/
|
||||
export async function getPresencesFormateurBySequence(sequenceId: number) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
|
||||
const result = await db
|
||||
.select({
|
||||
presenceId: presences.id,
|
||||
formateurId: presences.formateurId,
|
||||
dateFormationId: presences.dateFormationId,
|
||||
periode: presences.periode,
|
||||
heurePresence: presences.heurePresence,
|
||||
modeValidation: presences.modeValidation,
|
||||
commentaire: presences.commentaire,
|
||||
signatureUrl: sql<string | null>`${presences}.signatureUrl`,
|
||||
signatureS3Key: sql<string | null>`${presences}.signatureS3Key`,
|
||||
})
|
||||
.from(presences)
|
||||
.innerJoin(datesFormation, eq(presences.dateFormationId, datesFormation.id))
|
||||
.where(
|
||||
and(
|
||||
eq(datesFormation.sequenceId, sequenceId),
|
||||
sql`${presences}.typeUtilisateur = 'formateur'`
|
||||
)
|
||||
);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -588,6 +588,17 @@ export const appRouter = router({
|
||||
await db.deleteSequence(input.id);
|
||||
return { success: true };
|
||||
}),
|
||||
|
||||
getDatesByFormateurToken: publicProcedure
|
||||
.input(z.object({ token: z.string() }))
|
||||
.query(async ({ input }) => {
|
||||
const sequence = await db.getSequenceByFormateurToken(input.token);
|
||||
if (!sequence) {
|
||||
throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' });
|
||||
}
|
||||
const dates = await db.getDatesBySequence(sequence.id);
|
||||
return { sequence, dates };
|
||||
}),
|
||||
}),
|
||||
|
||||
// ===== INSCRIPTIONS =====
|
||||
|
||||
Reference in New Issue
Block a user