From 6c4ca249a9f517dcb4729dc9557e064474e5e64a Mon Sep 17 00:00:00 2001 From: Manus Date: Sun, 18 Jan 2026 08:22:08 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Correction=20du=20syst=C3=A8me=20?= =?UTF-8?q?d'envoi=20automatique=20des=20rappels=20:=201.=20Ajout=20de=20l?= =?UTF-8?q?a=20v=C3=A9rification=20de=20l'heure=20configur=C3=A9e=20avant?= =?UTF-8?q?=20l'envoi=20(tol=C3=A9rance=20de=2020=20minutes)=202.=20R?= =?UTF-8?q?=C3=A9duction=20de=20l'intervalle=20du=20scheduler=20de=201=20h?= =?UTF-8?q?eure=20=C3=A0=2015=20minutes=20pour=20plus=20de=20pr=C3=A9cisio?= =?UTF-8?q?n=203.=20Ajout=20de=20logs=20d=C3=A9taill=C3=A9s=20pour=20le=20?= =?UTF-8?q?d=C3=A9bogage=204.=20Les=20rappels=20sont=20maintenant=20envoy?= =?UTF-8?q?=C3=A9s=20=C3=A0=20l'heure=20exacte=20configur=C3=A9e=20(ex:=20?= =?UTF-8?q?13h51)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/rappelScheduler.ts | 23 ++++++++++++++++++++--- todo.md | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/server/rappelScheduler.ts b/server/rappelScheduler.ts index b9260d8..9fb2c5f 100644 --- a/server/rappelScheduler.ts +++ b/server/rappelScheduler.ts @@ -45,6 +45,23 @@ async function processRappel(rappel: any) { if (!db) return; try { + // Vérifier si l'heure actuelle correspond à l'heure configurée du rappel + const maintenant = new Date(); + const heureActuelle = maintenant.getHours(); + const minuteActuelle = maintenant.getMinutes(); + + // Parser l'heure configurée (format "HH:MM") + const [heureRappel, minuteRappel] = (rappel.heure || "09:00").split(":").map(Number); + + // Vérifier si on est dans la bonne heure (avec une tolérance de 20 minutes) + const diffMinutes = Math.abs((heureActuelle * 60 + minuteActuelle) - (heureRappel * 60 + minuteRappel)); + if (diffMinutes > 20) { + console.log(`[Rappels] Heure actuelle ${heureActuelle}:${minuteActuelle.toString().padStart(2, '0')} ne correspond pas à l'heure configurée ${rappel.heure} (différence: ${diffMinutes} minutes) - rappel ignoré`); + return; + } + + console.log(`[Rappels] Heure actuelle ${heureActuelle}:${minuteActuelle.toString().padStart(2, '0')} correspond à l'heure configurée ${rappel.heure} - traitement du rappel`); + // Calculer la date cible selon le timing (pré ou post-formation) const dateCible = new Date(); if (rappel.timing === 'pre_formation') { @@ -263,11 +280,11 @@ export function initRappelScheduler() { processRappelsAutomatiques(); processRemerciementsAutomatiques(); - // Puis exécuter toutes les heures + // Puis exécuter toutes les 15 minutes setInterval(() => { processRappelsAutomatiques(); processRemerciementsAutomatiques(); - }, 60 * 60 * 1000); // 1 heure en millisecondes + }, 15 * 60 * 1000); // 15 minutes en millisecondes - console.log("[Rappels] Scheduler initialisé - vérification toutes les heures (rappels + remerciements)"); + console.log("[Rappels] Scheduler initialisé - vérification toutes les 15 minutes (rappels + remerciements)"); } diff --git a/todo.md b/todo.md index 31ad5fa..0c67ff1 100644 --- a/todo.md +++ b/todo.md @@ -864,3 +864,4 @@ - [x] Permettre le renvoi d'une attestation même après qu'elle ait été envoyée (afficher bouton Renvoyer au lieu de masquer Envoyer) - [x] Corriger l'erreur "Failed to parse URL" lors de l'envoi d'attestation avec un chemin local (gérer les chemins locaux et URLs complètes) - [x] Corriger le bouton Renvoyer inactif dans la gestion des attestations (correction selectedSequenceId -> apprenant.sequence.id) +- [x] Corriger le problème d'envoi automatique des rappels qui ne se déclenchent pas à l'heure programmée (ajout vérification heure + intervalle 15 min au lieu de 1h)