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:
Manus
2026-01-08 08:53:41 -05:00
parent 6ee87f9b22
commit f331f9bb5f
8 changed files with 363 additions and 113 deletions

View File

@@ -1070,7 +1070,7 @@ export const appRouter = router({
joursAvant: z.number(),
heureEnvoi: z.string().default("09:00"),
actif: z.boolean(),
sequenceIds: z.array(z.number()).optional(),
dateFormationIds: z.array(z.number()).optional(),
fichier: z.object({
nomFichier: z.string(),
urlFichier: z.string(),
@@ -1080,14 +1080,14 @@ export const appRouter = router({
}).nullable().optional(),
}))
.mutation(async ({ input }) => {
const { sequenceIds, ...rappelData } = input;
const { dateFormationIds, ...rappelData } = input;
const result: any = await db.createRappel(rappelData);
// Créer les associations rappel-séquence si des séquences sont spécifiées
if (sequenceIds && sequenceIds.length > 0) {
// Créer les associations rappel-date si des dates sont spécifiées
if (dateFormationIds && dateFormationIds.length > 0) {
const rappelId = result.insertId || result[0]?.insertId;
if (rappelId) {
await db.createRappelSequences(Number(rappelId), sequenceIds);
await db.createRappelDates(Number(rappelId), dateFormationIds);
}
}
@@ -1103,7 +1103,7 @@ export const appRouter = router({
joursAvant: z.number().optional(),
heureEnvoi: z.string().optional(),
actif: z.boolean().optional(),
sequenceIds: z.array(z.number()).optional(),
dateFormationIds: z.array(z.number()).optional(),
fichier: z.object({
nomFichier: z.string(),
urlFichier: z.string(),
@@ -1113,14 +1113,14 @@ export const appRouter = router({
}).nullable().optional(),
}))
.mutation(async ({ input }) => {
const { id, sequenceIds, ...data } = input;
const { id, dateFormationIds, ...data } = input;
await db.updateRappel(id, data);
// Mettre à jour les associations rappel-séquence si spécifiées
if (sequenceIds !== undefined) {
await db.deleteRappelSequences(id);
if (sequenceIds.length > 0) {
await db.createRappelSequences(id, sequenceIds);
// Mettre à jour les associations rappel-date si spécifiées
if (dateFormationIds !== undefined) {
await db.deleteRappelDates(id);
if (dateFormationIds.length > 0) {
await db.createRappelDates(id, dateFormationIds);
}
}