Checkpoint: Refonte majeure du système de rappels : sélection granulaire au niveau des dates de formation individuelles (dateFormationId) au lieu des séquences. Permet de choisir précisément quelles dates d'une séquence recevront un rappel. Interface hiérarchique avec séquences dépliables et checkboxes par date. Scheduler adapté pour traiter date par date.
This commit is contained in:
@@ -25,7 +25,7 @@ import { trpc } from "@/lib/trpc";
|
||||
import { Bell, Edit, Plus, Trash2 } from "lucide-react";
|
||||
import { toast } from "sonner";
|
||||
import { FileUpload } from "@/components/FileUpload";
|
||||
import { SequenceMultiSelect } from "@/components/SequenceMultiSelect";
|
||||
import { DateFormationMultiSelect } from "@/components/DateFormationMultiSelect";
|
||||
|
||||
// Types de templates disponibles pour les rappels
|
||||
const TEMPLATE_TYPES = [
|
||||
@@ -48,7 +48,7 @@ export default function AdminRappels() {
|
||||
joursAvant: 7,
|
||||
heureEnvoi: "09:00",
|
||||
actif: true,
|
||||
sequenceIds: [] as number[],
|
||||
dateFormationIds: [] as number[],
|
||||
fichier: null as {
|
||||
nomFichier: string;
|
||||
urlFichier: string;
|
||||
@@ -114,7 +114,7 @@ export default function AdminRappels() {
|
||||
joursAvant: 7,
|
||||
heureEnvoi: "09:00",
|
||||
actif: true,
|
||||
sequenceIds: [],
|
||||
dateFormationIds: [],
|
||||
});
|
||||
};
|
||||
|
||||
@@ -135,7 +135,7 @@ export default function AdminRappels() {
|
||||
joursAvant: rappel.joursAvant,
|
||||
heureEnvoi: rappel.heureEnvoi,
|
||||
actif: rappel.actif,
|
||||
sequenceIds: rappel.sequenceIds || [],
|
||||
dateFormationIds: rappel.dateFormationIds || [],
|
||||
fichier: rappel.nomFichier ? {
|
||||
nomFichier: rappel.nomFichier,
|
||||
urlFichier: rappel.urlFichier,
|
||||
@@ -382,20 +382,22 @@ export default function AdminRappels() {
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
<Label>Séquences concernées (optionnel)</Label>
|
||||
<SequenceMultiSelect
|
||||
<Label>Dates de formation concernées (optionnel)</Label>
|
||||
<DateFormationMultiSelect
|
||||
sequences={sequences?.map(seq => ({
|
||||
id: seq.id,
|
||||
nom: seq.nom,
|
||||
formationNom: seq.formation?.nom
|
||||
formationNom: seq.formation?.nom || '',
|
||||
dates: seq.dates?.map(d => ({
|
||||
id: d.id,
|
||||
date: d.dateDebut,
|
||||
heureDebut: d.heureDebut || '',
|
||||
heureFin: d.heureFin || '',
|
||||
})) || [],
|
||||
})) || []}
|
||||
selectedIds={formData.sequenceIds}
|
||||
onChange={(sequenceIds) => setFormData({ ...formData, sequenceIds })}
|
||||
placeholder="Toutes les séquences (par défaut)"
|
||||
selectedDateIds={formData.dateFormationIds}
|
||||
onSelectionChange={(dateFormationIds) => setFormData({ ...formData, dateFormationIds })}
|
||||
/>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Si aucune séquence n'est sélectionnée, le rappel s'appliquera à toutes les séquences
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<FileUpload
|
||||
@@ -526,20 +528,22 @@ export default function AdminRappels() {
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
<Label>Séquences concernées (optionnel)</Label>
|
||||
<SequenceMultiSelect
|
||||
<Label>Dates de formation concernées (optionnel)</Label>
|
||||
<DateFormationMultiSelect
|
||||
sequences={sequences?.map(seq => ({
|
||||
id: seq.id,
|
||||
nom: seq.nom,
|
||||
formationNom: seq.formation?.nom
|
||||
formationNom: seq.formation?.nom || '',
|
||||
dates: seq.dates?.map(d => ({
|
||||
id: d.id,
|
||||
date: d.dateDebut,
|
||||
heureDebut: d.heureDebut || '',
|
||||
heureFin: d.heureFin || '',
|
||||
})) || [],
|
||||
})) || []}
|
||||
selectedIds={formData.sequenceIds}
|
||||
onChange={(sequenceIds) => setFormData({ ...formData, sequenceIds })}
|
||||
placeholder="Toutes les séquences (par défaut)"
|
||||
selectedDateIds={formData.dateFormationIds}
|
||||
onSelectionChange={(dateFormationIds) => setFormData({ ...formData, dateFormationIds })}
|
||||
/>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
Si aucune séquence n'est sélectionnée, le rappel s'appliquera à toutes les séquences
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<FileUpload
|
||||
|
||||
Reference in New Issue
Block a user