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)