portail-associations/server/requestPdf.ts

66 lines
2 KiB
TypeScript

import { TRPCError } from "@trpc/server";
import { generateMaterialEventPDF, generateReservationPDF } from "./pdfGenerator";
type RequestLike = {
id: number;
type: string;
titre: string;
status: string;
createdAt: Date | string;
dateSubmission?: Date | string | null;
dateTraitement?: Date | string | null;
commentaireAdmin?: string | null;
formData?: string | null;
};
export async function generateRequestPdfDocument(request: RequestLike) {
let formData: any = {};
try {
formData = request.formData ? JSON.parse(request.formData) : {};
} catch {
formData = {};
}
if (request.type === "demande_salle") {
const pdfBuffer = await generateReservationPDF({
titre: request.titre,
status: request.status,
createdAt: request.createdAt,
dateSubmission: request.dateSubmission,
dateTraitement: request.dateTraitement,
commentaireAdmin: request.commentaireAdmin,
formData,
});
return {
buffer: pdfBuffer,
storageName: `reservations/pdf-${request.id}-${Date.now()}.pdf`,
fileName: `Reservation_${request.id}_${formData.nomAssociation || "association"}.pdf`,
contentType: "application/pdf",
};
}
if (request.type === "demande_materiel_evenementiel") {
const pdfBuffer = await generateMaterialEventPDF({
titre: request.titre,
status: request.status,
createdAt: request.createdAt,
dateSubmission: request.dateSubmission,
dateTraitement: request.dateTraitement,
commentaireAdmin: request.commentaireAdmin,
formData,
});
return {
buffer: pdfBuffer,
storageName: `materiel-evenementiel/pdf-${request.id}-${Date.now()}.pdf`,
fileName: `Materiel_Evenementiel_${request.id}_${formData.nomAssociation || formData.commune || "association"}.pdf`,
contentType: "application/pdf",
};
}
throw new TRPCError({
code: "BAD_REQUEST",
message: "Le PDF n'est disponible que pour les demandes de salle et de matériel événementiel",
});
}