send or print newsletter preview

This commit is contained in:
Julian Krauser 2024-12-28 18:03:33 +01:00
parent 5a59a63e4a
commit 5f827fb177
15 changed files with 355 additions and 28 deletions

View file

@ -13,7 +13,10 @@ import NewsletterDatesCommandHandler from "../../command/newsletterDatesCommandH
import { SynchronizeNewsletterRecipientsCommand } from "../../command/newsletterRecipientsCommand";
import NewsletterRecipientsCommandHandler from "../../command/newsletterRecipientsCommandHandler";
import { NewsletterDatesViewModel } from "../../viewmodel/admin/newsletterDates.models";
import { NewsletterRecipientsViewModel } from "../../viewmodel/admin/newsletterRecipients.models";
import { PdfExport } from "../../helpers/pdfExport";
import UserService from "../../service/userService";
import { TemplateHelper } from "../../helpers/templateHelper";
import MailHelper from "../../helpers/mailHelper";
/**
* @description get all newsletters
@ -113,6 +116,84 @@ export async function getNewsletterPrintoutByIdAndPrint(req: Request, res: Respo
});
}
/**
* @description create newsletter printout preview by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function createNewsletterPrintoutPreviewById(req: Request, res: Response): Promise<any> {
let newsletterId = parseInt(req.params.newsletterId);
let newsletter = await NewsletterService.getById(newsletterId);
let dates = await NewsletterDatesService.getAll(newsletterId);
let recipient = await UserService.getById(parseInt(req.userId));
let data = {
title: newsletter.title,
description: newsletter.description,
newsletterTitle: newsletter.newsletterTitle,
newsletterText: newsletter.newsletterText,
newsletterSignatur: newsletter.newsletterSignatur,
dates: dates.map((d) => ({
title: d.diffTitle ?? d.calendar.title,
content: d.diffDescription ?? d.calendar.content,
starttime: d.calendar.starttime,
formattedStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
}),
formattedFullStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
}),
endtime: d.calendar.endtime,
formattedEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
}),
formattedFullEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
}),
location: d.calendar.location,
})),
recipient: {
firstname: recipient.firstname,
lastname: recipient.lastname,
salutation: "none",
nameaffix: "",
street: "Straße",
streetNumber: "Hausnummer",
streetNumberAdd: "Adresszusatz",
},
};
let pdf = await PdfExport.renderFile({
title: "Probedruck Newsletter",
template: "newsletter",
saveToDisk: false,
data: data,
});
let pdfbuffer = Buffer.from(pdf);
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Length", pdfbuffer.byteLength);
res.setHeader("Content-Disposition", "inline; filename=preview.pdf");
res.send(pdfbuffer);
}
/**
* @description create newsletter
* @param req {Request} Express req object
@ -131,7 +212,7 @@ export async function createNewsletter(req: Request, res: Response): Promise<any
}
/**
* @description create newsletter printout by id
* @description create newsletter printouts for each member by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
@ -151,6 +232,96 @@ export async function createNewsletterPrintoutById(req: Request, res: Response):
res.sendStatus(204);
}
/**
* @description create newsletter mail preview by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function createNewsletterMailPreviewById(req: Request, res: Response): Promise<any> {
let newsletterId = parseInt(req.params.newsletterId);
let newsletter = await NewsletterService.getById(newsletterId);
let dates = await NewsletterDatesService.getAll(newsletterId);
let recipient = await UserService.getById(parseInt(req.userId));
let data = {
title: newsletter.title,
description: newsletter.description,
newsletterTitle: newsletter.newsletterTitle,
newsletterText: newsletter.newsletterText,
newsletterSignatur: newsletter.newsletterSignatur,
dates: dates.map((d) => ({
title: d.diffTitle ?? d.calendar.title,
content: d.diffDescription ?? d.calendar.content,
starttime: d.calendar.starttime,
formattedStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
}),
formattedFullStarttime: new Date(d.calendar.starttime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
}),
endtime: d.calendar.endtime,
formattedEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
}),
formattedFullEndtime: new Date(d.calendar.endtime).toLocaleDateString("de-DE", {
weekday: "long",
day: "2-digit",
month: "long",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
}),
location: d.calendar.location,
})),
recipient: {
firstname: recipient.firstname,
lastname: recipient.lastname,
salutation: "none",
nameaffix: "",
street: "Straße",
streetNumber: "Hausnummer",
streetNumberAdd: "Adresszusatz",
},
};
const { body } = await TemplateHelper.renderFileForModule({
module: "newsletter",
bodyData: data,
title: "Probeversand Newsletter",
});
await MailHelper.sendMail(recipient.mail, "Probeversand Newsletter", body);
res.sendStatus(204);
}
/**
* @description send newsletter mail and create printouts by id
* @param req {Request} Express req object
* @param res {Response} Express res object
* @returns {Promise<*>}
*/
export async function sendNewsletterById(req: Request, res: Response): Promise<any> {
let newsletterId = parseInt(req.params.newsletterId);
let newsletter = await NewsletterService.getById(newsletterId);
let dates = await NewsletterDatesService.getAll(newsletterId);
let recipients = await NewsletterRecipientsService.getAll(newsletterId);
// attach ics files for date entries to mail
res.sendStatus(204);
}
/**
* @description synchronize newsletter by id
* @param req {Request} Express req object

View file

@ -40,7 +40,11 @@ export async function printTemplateUsageDemo(req: Request, res: Response): Promi
const scope = req.params.scope as PermissionModule;
let demoData = DemoDataHelper.getData(scope);
let pdf = await PdfExport.renderFile({ template: scope, saveToDisk: false, data: demoData });
let pdf = await PdfExport.renderFile({
template: scope,
saveToDisk: false,
data: demoData,
});
let pdfbuffer = Buffer.from(pdf);

View file

@ -146,8 +146,7 @@ export async function deleteUser(req: Request, res: Response): Promise<any> {
try {
// sendmail
let mailhelper = new MailHelper();
await mailhelper.sendMail(
await MailHelper.sendMail(
user.mail,
`Email Bestätigung für Mitglieder Admin-Portal von ${CLUB_NAME}`,
`Ihr Nutzerkonto des Adminportals wurde erfolgreich gelöscht.`

View file

@ -71,8 +71,7 @@ export async function inviteUser(req: Request, res: Response, isInvite: boolean
let token = await InviteCommandHandler.create(createInvite);
// sendmail
let mailhelper = new MailHelper();
await mailhelper.sendMail(
await MailHelper.sendMail(
mail,
`Email Bestätigung für Mitglieder Admin-Portal von ${CLUB_NAME}`,
`Öffne folgenden Link: ${origin}/${isInvite ? "invite" : "setup"}/verify?mail=${mail}&token=${token}`

View file

@ -41,8 +41,7 @@ export async function startReset(req: Request, res: Response): Promise<any> {
let token = await ResetCommandHandler.create(createReset);
// sendmail
let mailhelper = new MailHelper();
await mailhelper.sendMail(
await MailHelper.sendMail(
mail,
`Email Bestätigung für Mitglieder Admin-Portal von ${CLUB_NAME}`,
`Öffne folgenden Link: ${origin}/reset/reset?mail=${mail}&token=${token}`