diff --git a/client/src/pages/admin/AdminRappelsHistorique.tsx b/client/src/pages/admin/AdminRappelsHistorique.tsx index d8e69a5..b22e11b 100644 --- a/client/src/pages/admin/AdminRappelsHistorique.tsx +++ b/client/src/pages/admin/AdminRappelsHistorique.tsx @@ -23,7 +23,7 @@ export default function AdminRappelsHistorique() { dateDebut: "", dateFin: "", sequenceId: undefined as number | undefined, - statut: undefined as "success" | "failed" | undefined, + statut: undefined as "succes" | "echec" | undefined, email: "", limit: 50, offset: 0, @@ -134,8 +134,8 @@ export default function AdminRappelsHistorique() { Tous les statuts - Succès - Échec + Succès + Échec @@ -190,6 +190,7 @@ export default function AdminRappelsHistorique() { Date envoi Email Type + Type d'envoi Statut Tentatives Erreur @@ -201,15 +202,26 @@ export default function AdminRappelsHistorique() { {format(new Date(log.dateEnvoi), "dd/MM/yyyy HH:mm", { locale: fr })} - {log.emailDestinataire} + {log.email} - {log.typeRappel === "rappel" ? "J-7" : "J-1"} + {log.type} - - {log.statut === "success" ? "Succès" : "Échec"} + + {log.typeEnvoi === "test" ? "Test" : "Automatique"} + + + + + {log.statut === "succes" ? "Succès" : "Échec"} diff --git a/server/routers.ts b/server/routers.ts index 524c6de..aff78ca 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -14,6 +14,7 @@ import { generateExcelExport, generatePDFExport, generateFeuillePresence } from import { parseExcelFile, validateImportData, importToDatabase } from "./importExcel"; import crypto from "crypto"; import bcrypt from "bcryptjs"; +import { sql } from "drizzle-orm"; // Procédure admin uniquement const adminProcedure = protectedProcedure.use(({ ctx, next }) => { @@ -1546,6 +1547,27 @@ export const appRouter = router({ const { getEvolutionEnvois } = await import('./rappelDb'); return getEvolutionEnvois(); }), + + // Nettoyer les anciens logs erronés (avant la correction du schéma) + nettoyerLogsErrones: adminProcedure + .mutation(async () => { + const database = await db.getDb(); + if (!database) throw new Error("Database not available"); + + // Supprimer tous les logs qui n'ont pas d'email (champ obligatoire manquant) + const result = await database.execute(sql` + DELETE FROM logsRappels + WHERE email IS NULL OR email = '' + `); + + const nbSupprimes = Array.isArray(result) ? 0 : (result as any).affectedRows || 0; + + return { + success: true, + nbSupprimes, + message: `${nbSupprimes} log(s) erroné(s) supprimé(s)`, + }; + }), }), emailConfig: router({ diff --git a/todo.md b/todo.md index 4bc4651..26c1b31 100644 --- a/todo.md +++ b/todo.md @@ -833,3 +833,5 @@ - [x] Supprimer les boutons "Aperçu rappel J-7", "Envoyer rappel J-7", "Aperçu rappel J-1", "Envoyer rappel J-1" de la fenêtre de détails des séquences - [x] Corriger le bouton "Tester le rappel" pour enregistrer les envois dans l'historique des rappels (table logsRappels) - [x] Corriger l'enregistrement des logs de rappels : type erroné (J-1 au lieu de J+2), statut erroné (success/failed au lieu de succes/echec), email erroné (emailDestinataire au lieu de email) +- [x] Ajouter une colonne "Type d'envoi" avec badge coloré dans l'interface d'historique des rappels +- [x] Nettoyer les anciens logs erronés de la base de données