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:
@@ -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
|
||||||
|
|||||||
@@ -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"]),
|
||||||
|
|||||||
5
todo.md
5
todo.md
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user