Checkpoint: Ajout de filtres de période (dernier mois, trimestre, année) pour affiner l'analyse des tendances. Implémentation de l'export Excel des rapports analytiques avec 5 feuilles (statistiques globales, inscriptions par mois, taux de remplissage, participation par établissement et par fonction). Création du schéma de base de données pour les alertes automatiques (fonctionnalité future). Les utilisateurs peuvent maintenant filtrer les données analytiques par période et télécharger des rapports Excel complets.
This commit is contained in:
@@ -6,6 +6,7 @@ import { parseLocalDateTime } from "./dateUtils";
|
||||
import { z } from "zod";
|
||||
import * as db from "./db";
|
||||
import * as analyticsDb from "./analyticsDb";
|
||||
import { generateAnalyticsExcel, generateAnalyticsPDF } from "./analyticsExportService";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { sendInscriptionConfirmation, sendGroupEmail } from "./emailService";
|
||||
import { generateExcelExport, generatePDFExport, generateFeuillePresence } from "./exportService";
|
||||
@@ -858,6 +859,36 @@ export const appRouter = router({
|
||||
participationByFonction: adminProcedure.query(async () => {
|
||||
return analyticsDb.getParticipationByFonction();
|
||||
}),
|
||||
|
||||
exportExcel: adminProcedure
|
||||
.input(z.object({
|
||||
startDate: z.string().optional(),
|
||||
endDate: z.string().optional(),
|
||||
}))
|
||||
.mutation(async ({ input }) => {
|
||||
const startDate = input.startDate ? new Date(input.startDate) : undefined;
|
||||
const endDate = input.endDate ? new Date(input.endDate) : undefined;
|
||||
const buffer = await generateAnalyticsExcel(startDate, endDate);
|
||||
return {
|
||||
data: buffer.toString('base64'),
|
||||
filename: `rapport-analytique-${new Date().toISOString().split('T')[0]}.xlsx`,
|
||||
};
|
||||
}),
|
||||
|
||||
exportPDF: adminProcedure
|
||||
.input(z.object({
|
||||
startDate: z.string().optional(),
|
||||
endDate: z.string().optional(),
|
||||
}))
|
||||
.mutation(async ({ input }) => {
|
||||
const startDate = input.startDate ? new Date(input.startDate) : undefined;
|
||||
const endDate = input.endDate ? new Date(input.endDate) : undefined;
|
||||
const buffer = await generateAnalyticsPDF(startDate, endDate);
|
||||
return {
|
||||
data: buffer.toString('base64'),
|
||||
filename: `rapport-analytique-${new Date().toISOString().split('T')[0]}.pdf`,
|
||||
};
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user