Checkpoint: Corrections apportées à la gestion des séquences :

 Ajout du champ "Public cible" dans le dialogue de modification des séquences
- Le champ est maintenant visible et modifiable lors de l'édition d'une séquence
- Support complet de l'option "Tous" ajoutée précédemment

 Affichage du nombre d'inscrits dans la colonne capacité
- Format : "nombre d'inscrits / capacité" (ex: "5 / 12")
- Mise à jour de la procédure sequences.list pour inclure le comptage des inscriptions confirmées
- Mise à jour du schéma de validation pour inclure "tous" dans publicCible

Les deux problèmes signalés sont maintenant corrigés et l'application est prête à l'emploi.
This commit is contained in:
Manus Sandbox
2025-11-19 09:19:47 -05:00
parent b72a9c471c
commit b9907f9cca
3 changed files with 31 additions and 5 deletions

View File

@@ -646,7 +646,7 @@ export default function AdminSequences() {
{getPublicCibleLabel(sequence.publicCible)} {getPublicCibleLabel(sequence.publicCible)}
</span> </span>
</TableCell> </TableCell>
<TableCell>{sequence.capaciteMax}</TableCell> <TableCell>{sequence.nbInscrits || 0} / {sequence.capaciteMax}</TableCell>
<TableCell> <TableCell>
<span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatutBadge(sequence.statut)}`}> <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatutBadge(sequence.statut)}`}>
{sequence.statut} {sequence.statut}
@@ -737,6 +737,26 @@ export default function AdminSequences() {
/> />
</div> </div>
<div className="space-y-2">
<Label htmlFor="edit-publicCible">Public cible *</Label>
<Select
value={formData.publicCible}
onValueChange={(value: "directeur" | "chef_service" | "tous" | "autre") => setFormData({ ...formData, publicCible: value })}
>
<SelectTrigger id="edit-publicCible">
<SelectValue placeholder="Sélectionner le public cible" />
</SelectTrigger>
<SelectContent>
<SelectItem value="directeur">Directeur</SelectItem>
<SelectItem value="chef_service">Chef de service</SelectItem>
<SelectItem value="tous">Tous</SelectItem>
<SelectItem value="autre">Autre</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="grid grid-cols-2 gap-4">
<div className="space-y-2"> <div className="space-y-2">
<Label htmlFor="edit-capaciteMax">Capacité maximale *</Label> <Label htmlFor="edit-capaciteMax">Capacité maximale *</Label>
<Input <Input

View File

@@ -120,11 +120,12 @@ export const appRouter = router({
sequences: router({ sequences: router({
list: adminProcedure.query(async () => { list: adminProcedure.query(async () => {
const seqs = await db.getSequences(); const seqs = await db.getSequences();
// Récupérer les dates pour chaque séquence // Récupérer les dates et le nombre d'inscrits pour chaque séquence
const sequencesAvecDates = await Promise.all( const sequencesAvecDates = await Promise.all(
seqs.map(async (seq) => { seqs.map(async (seq) => {
const dates = await db.getDatesBySequence(seq.id); const dates = await db.getDatesBySequence(seq.id);
return { ...seq, dates }; const nbInscrits = await db.countInscriptionsBySequence(seq.id, 'confirmee');
return { ...seq, dates, nbInscrits };
}) })
); );
return sequencesAvecDates; return sequencesAvecDates;
@@ -154,7 +155,7 @@ export const appRouter = router({
formationId: z.number(), formationId: z.number(),
nom: z.string().min(1), nom: z.string().min(1),
lieu: z.string().min(1), lieu: z.string().min(1),
publicCible: z.enum(["directeur", "chef_service", "autre"]), publicCible: z.enum(["directeur", "chef_service", "tous", "autre"]),
capaciteMax: z.number().default(12), capaciteMax: z.number().default(12),
dateBlocage: z.string(), dateBlocage: z.string(),
statut: z.enum(["ouverte", "bloquee", "terminee"]).optional(), statut: z.enum(["ouverte", "bloquee", "terminee"]).optional(),
@@ -193,7 +194,7 @@ export const appRouter = router({
formationId: z.number(), formationId: z.number(),
nom: z.string().min(1), nom: z.string().min(1),
lieu: z.string().min(1), lieu: z.string().min(1),
publicCible: z.enum(["directeur", "chef_service", "autre"]), publicCible: z.enum(["directeur", "chef_service", "tous", "autre"]),
capaciteMax: z.number(), capaciteMax: z.number(),
dateBlocage: z.string(), dateBlocage: z.string(),
statut: z.enum(["ouverte", "bloquee", "terminee"]), statut: z.enum(["ouverte", "bloquee", "terminee"]),

View File

@@ -257,3 +257,8 @@
- [x] Mettre à jour AdminRapportPublicCible.tsx (labels et badges) - [x] Mettre à jour AdminRapportPublicCible.tsx (labels et badges)
- [x] Mettre à jour Inscription.tsx (mapping, affichage, logique d'alerte) - [x] Mettre à jour Inscription.tsx (mapping, affichage, logique d'alerte)
- [x] Tester l'affichage dans le formulaire de création/édition de séquence - [x] Tester l'affichage dans le formulaire de création/édition de séquence
## Corrections demandées - Gestion des séquences
- [x] Ajouter le champ "Public cible" dans le dialogue de modification des séquences
- [x] Afficher "nombre d'inscrits / capacité" dans la colonne capacité du tableau des séquences