Checkpoint: Correction du système d'envoi automatique des rappels :
1. Ajout de la vérification de l'heure configurée avant l'envoi (tolérance de 20 minutes) 2. Réduction de l'intervalle du scheduler de 1 heure à 15 minutes pour plus de précision 3. Ajout de logs détaillés pour le débogage 4. Les rappels sont maintenant envoyés à l'heure exacte configurée (ex: 13h51)
This commit is contained in:
@@ -45,6 +45,23 @@ async function processRappel(rappel: any) {
|
|||||||
if (!db) return;
|
if (!db) return;
|
||||||
|
|
||||||
try {
|
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)
|
// Calculer la date cible selon le timing (pré ou post-formation)
|
||||||
const dateCible = new Date();
|
const dateCible = new Date();
|
||||||
if (rappel.timing === 'pre_formation') {
|
if (rappel.timing === 'pre_formation') {
|
||||||
@@ -263,11 +280,11 @@ export function initRappelScheduler() {
|
|||||||
processRappelsAutomatiques();
|
processRappelsAutomatiques();
|
||||||
processRemerciementsAutomatiques();
|
processRemerciementsAutomatiques();
|
||||||
|
|
||||||
// Puis exécuter toutes les heures
|
// Puis exécuter toutes les 15 minutes
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
processRappelsAutomatiques();
|
processRappelsAutomatiques();
|
||||||
processRemerciementsAutomatiques();
|
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)");
|
||||||
}
|
}
|
||||||
|
|||||||
1
todo.md
1
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] 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 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 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user