Checkpoint: Ajout manuel d'apprenant : Bouton et dialogue pour inscrire manuellement un apprenant à une séquence.
**Fonctionnalité ajoutée :** - Bouton "Ajouter un inscrit" avec icône UserPlus dans le header de la liste des inscrits - Dialogue de sélection avec liste déroulante des apprenants disponibles (filtrés pour exclure ceux déjà inscrits) - Sélection du statut (Confirmé / Liste d'attente) - Mutation backend `inscriptions.create` pour l'ajout manuel par l'admin (sans vérifications de blocage/capacité) **Fichiers modifiés :** - client/src/pages/AdminSequenceInscrits.tsx : Ajout du bouton et du dialogue - client/src/components/AddInscritForm.tsx : Nouveau composant de formulaire - server/routers.ts : Ajout de la mutation inscriptions.create **Résultat :** Les administrateurs peuvent maintenant ajouter manuellement des apprenants à une séquence depuis l'interface des inscrits.
This commit is contained in:
@@ -1120,6 +1120,43 @@ export const appRouter = router({
|
||||
filename: `feuille_presence_${sequence.nom.replace(/\s+/g, '_')}.pdf`,
|
||||
};
|
||||
}),
|
||||
|
||||
// Ajout manuel d'un inscrit par l'admin (sans vérifications de blocage/capacité)
|
||||
create: adminProcedure.input(z.object({
|
||||
apprenantId: z.number(),
|
||||
sequenceId: z.number(),
|
||||
statut: z.enum(["confirme", "liste_attente"]),
|
||||
})).mutation(async ({ input }) => {
|
||||
// Vérifier si l'apprenant existe
|
||||
const apprenant = await db.getApprenantById(input.apprenantId);
|
||||
if (!apprenant) {
|
||||
throw new TRPCError({ code: 'NOT_FOUND', message: 'Apprenant introuvable' });
|
||||
}
|
||||
|
||||
// Vérifier si la séquence existe
|
||||
const sequence = await db.getSequenceById(input.sequenceId);
|
||||
if (!sequence) {
|
||||
throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' });
|
||||
}
|
||||
|
||||
// Vérifier si l'apprenant est déjà inscrit
|
||||
const existing = await db.checkExistingInscription(input.apprenantId, input.sequenceId);
|
||||
if (existing) {
|
||||
throw new TRPCError({
|
||||
code: 'CONFLICT',
|
||||
message: 'Cet apprenant est déjà inscrit à cette séquence'
|
||||
});
|
||||
}
|
||||
|
||||
// Créer l'inscription avec le statut choisi
|
||||
await db.createInscription({
|
||||
apprenantId: input.apprenantId,
|
||||
sequenceId: input.sequenceId,
|
||||
statut: input.statut === "confirme" ? "confirmee" : "en_attente",
|
||||
});
|
||||
|
||||
return { success: true };
|
||||
}),
|
||||
}),
|
||||
|
||||
// ===== GESTION DES UTILISATEURS =====
|
||||
|
||||
Reference in New Issue
Block a user