Checkpoint: Ajout de la fonctionnalité "Détail par apprenant"
✅ Nouvelle procédure tRPC `apprenants.getInscriptions` pour récupérer toutes les inscriptions d'un apprenant avec les détails de formation et séquence ✅ Nouvelle page AdminApprenantDetail (/admin/apprenants/:id) affichant : - Informations personnelles de l'apprenant (nom, prénom, email, code établissement, fonction) - Tableau complet de toutes ses inscriptions avec : * Nom de la formation * Nom de la séquence * Toutes les dates de la séquence * Lieu * Public cible * Date d'inscription * Statut (avec badge coloré : vert pour confirmée, gris pour en attente, rouge pour annulée) ✅ Bouton "Détail" (icône œil) ajouté dans la colonne Actions de la page AdminApprenants ✅ Route /admin/apprenants/:id configurée dans App.tsx ✅ Bouton "Retour aux apprenants" pour navigation facile Correction appliquée : La procédure getInscriptions extrait maintenant correctement l'objet inscription du résultat retourné par getInscriptionsByApprenant. Tests réussis : Affichage correct des inscriptions pour l'apprenant "Nouveau Apprenant" (1 inscription à la séquence "Groupe A" avec statut confirmée).
This commit is contained in:
@@ -114,6 +114,27 @@ export const appRouter = router({
|
||||
await db.deleteApprenant(input.id);
|
||||
return { success: true };
|
||||
}),
|
||||
|
||||
getInscriptions: adminProcedure.input(z.object({ id: z.number() })).query(async ({ input }) => {
|
||||
const results = await db.getInscriptionsByApprenant(input.id);
|
||||
// Récupérer les informations de formation et séquence pour chaque inscription
|
||||
const inscriptionsAvecDetails = await Promise.all(
|
||||
results.map(async (result: any) => {
|
||||
const insc = result.inscription;
|
||||
if (!insc) return null;
|
||||
const sequence = await db.getSequenceById(insc.sequenceId);
|
||||
if (!sequence) return null;
|
||||
const formation = await db.getFormationById(sequence.formationId);
|
||||
const dates = await db.getDatesBySequence(insc.sequenceId);
|
||||
return {
|
||||
...insc,
|
||||
sequence: { ...sequence, dates },
|
||||
formation,
|
||||
};
|
||||
})
|
||||
);
|
||||
return inscriptionsAvecDetails.filter(i => i !== null);
|
||||
}),
|
||||
}),
|
||||
|
||||
// ===== FORMATEURS =====
|
||||
|
||||
Reference in New Issue
Block a user