Checkpoint: Ajout d'une colonne "Rappels configurés" dans le tableau de gestion des séquences permettant de visualiser instantanément les rappels automatiques associés à chaque date de formation. Modification backend : création de la fonction getRappelsByDateFormation() dans db.ts qui récupère les rappels spécifiques à une date ainsi que les rappels globaux (sans dates spécifiques). Modification du router sequences.list pour inclure les rappels dans les données des séquences via Promise.all. Interface frontend : ajout de la colonne entre "Dates" et "Lieu" avec badges violets (bg-purple-50, text-purple-700, border-purple-300) et icône Bell pour chaque rappel, organisés par date avec labels "Date 1:", "Date 2:", etc. Affichage "Aucun rappel" en italique gris pour les dates sans rappels. Cette fonctionnalité améliore considérablement la visibilité de la configuration des rappels et facilite la gestion globale des communications automatiques.

This commit is contained in:
Manus
2026-01-08 10:37:10 -05:00
parent bb3baf813a
commit b0fcb4d573
4 changed files with 78 additions and 2 deletions

View File

@@ -7,8 +7,9 @@ import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
import { Badge } from "@/components/ui/badge";
import { trpc } from "@/lib/trpc";
import { Calendar, Edit, Eye, Plus, Trash2, X } from "lucide-react";
import { Calendar, Edit, Eye, Plus, Trash2, X, Bell } from "lucide-react";
import FormateurCombobox from "@/components/FormateurCombobox";
import CapacityProgressBar from "@/components/CapacityProgressBar";
import { toast } from "sonner";
@@ -675,6 +676,7 @@ export default function AdminSequences() {
<TableHead>Formation</TableHead>
<TableHead>Nom</TableHead>
<TableHead>Dates</TableHead>
<TableHead>Rappels configurés</TableHead>
<TableHead>Lieu</TableHead>
<TableHead>Formateur</TableHead>
<TableHead>Public cible</TableHead>
@@ -698,6 +700,31 @@ export default function AdminSequences() {
))}
</div>
</TableCell>
<TableCell>
<div className="space-y-2">
{sequence.dates.map((date: any) => (
<div key={date.id} className="space-y-1">
<div className="text-xs font-medium text-muted-foreground">Date {date.ordre}:</div>
<div className="flex flex-wrap gap-1">
{date.rappels && date.rappels.length > 0 ? (
date.rappels.map((rappel: any) => (
<Badge
key={rappel.id}
variant="outline"
className="bg-purple-50 text-purple-700 border-purple-300 text-xs"
>
<Bell className="w-3 h-3 mr-1" />
{rappel.nom}
</Badge>
))
) : (
<span className="text-xs text-muted-foreground italic">Aucun rappel</span>
)}
</div>
</div>
))}
</div>
</TableCell>
<TableCell className="max-w-xs truncate">{sequence.lieu}</TableCell>
<TableCell className="text-sm">{sequence.formateur?.nom || "-"}</TableCell>
<TableCell>