print pdfs and send mails with ics file
This commit is contained in:
parent
5f827fb177
commit
728c4e05fa
12 changed files with 461 additions and 183 deletions
|
@ -17,6 +17,8 @@ import { PdfExport } from "../../helpers/pdfExport";
|
|||
import UserService from "../../service/userService";
|
||||
import { TemplateHelper } from "../../helpers/templateHelper";
|
||||
import MailHelper from "../../helpers/mailHelper";
|
||||
import { NewsletterHelper } from "../../helpers/newsletterHelper";
|
||||
import { Salutation } from "../../enums/salutation";
|
||||
|
||||
/**
|
||||
* @description get all newsletters
|
||||
|
@ -89,8 +91,9 @@ export async function getNewsletterPrintoutsById(req: Request, res: Response): P
|
|||
|
||||
let newsletter = await NewsletterService.getById(newsletterId);
|
||||
|
||||
let folderPath = FileSystemHelper.formatPath("export", "newsletter", `${newsletter.id}_${newsletter.title}`);
|
||||
let filesInFolder = FileSystemHelper.getFilesInDirectory(folderPath);
|
||||
let filesInFolder = FileSystemHelper.getFilesInDirectory(
|
||||
`newsletter/${newsletter.id}_${newsletter.title.replace(" ", "")}`
|
||||
);
|
||||
|
||||
res.json(filesInFolder);
|
||||
}
|
||||
|
@ -107,9 +110,13 @@ export async function getNewsletterPrintoutByIdAndPrint(req: Request, res: Respo
|
|||
|
||||
let newsletter = await NewsletterService.getById(newsletterId);
|
||||
|
||||
let filepath = FileSystemHelper.formatPath("export", "newsletter", `${newsletter.id}_${newsletter.title}`, filename);
|
||||
let filepath = FileSystemHelper.formatPath(
|
||||
"newsletter",
|
||||
`${newsletter.id}_${newsletter.title.replace(" ", "")}`,
|
||||
filename
|
||||
);
|
||||
|
||||
res.sendFile(process.cwd() + filepath, {
|
||||
res.sendFile(filepath, {
|
||||
headers: {
|
||||
"Content-Type": "application/pdf",
|
||||
},
|
||||
|
@ -128,54 +135,15 @@ export async function createNewsletterPrintoutPreviewById(req: Request, res: Res
|
|||
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 data = NewsletterHelper.buildData(newsletter, dates);
|
||||
data.recipient = {
|
||||
firstname: recipient.firstname,
|
||||
lastname: recipient.lastname,
|
||||
salutation: Salutation.none,
|
||||
nameaffix: "",
|
||||
street: "Straße",
|
||||
streetNumber: "Hausnummer",
|
||||
streetNumberAdd: "Adresszusatz",
|
||||
};
|
||||
|
||||
let pdf = await PdfExport.renderFile({
|
||||
|
@ -219,15 +187,8 @@ export async function createNewsletter(req: Request, res: Response): Promise<any
|
|||
*/
|
||||
export async function createNewsletterPrintoutById(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);
|
||||
|
||||
// print newsletter pdf for every member having newsletter type configured to print or if all members get printout
|
||||
// check if all users have mail or adress
|
||||
// squash all files to single for printing
|
||||
// use Helper for Newsletter printing and mail sending
|
||||
// default template
|
||||
await NewsletterHelper.printPdfs(newsletterId);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
||||
|
@ -244,54 +205,15 @@ export async function createNewsletterMailPreviewById(req: Request, res: Respons
|
|||
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 data = NewsletterHelper.buildData(newsletter, dates);
|
||||
data.recipient = {
|
||||
firstname: recipient.firstname,
|
||||
lastname: recipient.lastname,
|
||||
salutation: Salutation.none,
|
||||
nameaffix: "",
|
||||
street: "Straße",
|
||||
streetNumber: "Hausnummer",
|
||||
streetNumberAdd: "Adresszusatz",
|
||||
};
|
||||
|
||||
const { body } = await TemplateHelper.renderFileForModule({
|
||||
|
@ -313,11 +235,8 @@ export async function createNewsletterMailPreviewById(req: Request, res: Respons
|
|||
*/
|
||||
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
|
||||
await NewsletterHelper.sendMails(newsletterId);
|
||||
|
||||
res.sendStatus(204);
|
||||
}
|
||||
|
|
|
@ -264,7 +264,7 @@ export async function createProtocolPrintoutById(req: Request, res: Response): P
|
|||
let printout: CreateProtocolPrintoutCommand = {
|
||||
title,
|
||||
iteration: iteration + 1,
|
||||
filename: FileSystemHelper.formatPath("protocol", filename),
|
||||
filename: FileSystemHelper.normalizePath("protocol", filename),
|
||||
protocolId,
|
||||
};
|
||||
await ProtocolPrintoutCommandHandler.create(printout);
|
||||
|
|
|
@ -6,6 +6,7 @@ import { createEvents } from "ics";
|
|||
import moment from "moment";
|
||||
import InternalException from "../exceptions/internalException";
|
||||
import CalendarFactory from "../factory/admin/calendar";
|
||||
import { CalendarHelper } from "../helpers/calendarHelper";
|
||||
|
||||
/**
|
||||
* @description get all calendar items by types or nscdr
|
||||
|
@ -45,59 +46,8 @@ export async function getCalendarItemsByTypes(req: Request, res: Response): Prom
|
|||
if (output == "json") {
|
||||
res.json(CalendarFactory.mapToBase(items));
|
||||
} else {
|
||||
let events = createEvents(
|
||||
items.map((i) => ({
|
||||
calName: process.env.CLUB_NAME,
|
||||
uid: i.id,
|
||||
sequence: 1,
|
||||
...(i.allDay
|
||||
? {
|
||||
start: moment(i.starttime)
|
||||
.format("YYYY-M-D")
|
||||
.split("-")
|
||||
.map((a) => parseInt(a)) as [number, number, number],
|
||||
end: moment(i.endtime)
|
||||
.format("YYYY-M-D")
|
||||
.split("-")
|
||||
.map((a) => parseInt(a)) as [number, number, number],
|
||||
}
|
||||
: {
|
||||
start: moment(i.starttime)
|
||||
.format("YYYY-M-D-H-m")
|
||||
.split("-")
|
||||
.map((a) => parseInt(a)) as [number, number, number, number, number],
|
||||
end: moment(i.endtime)
|
||||
.format("YYYY-M-D-H-m")
|
||||
.split("-")
|
||||
.map((a) => parseInt(a)) as [number, number, number, number, number],
|
||||
}),
|
||||
title: i.title,
|
||||
description: i.content,
|
||||
location: i.location,
|
||||
categories: [i.type.type],
|
||||
created: moment(i.createdAt)
|
||||
.format("YYYY-M-D-H-m")
|
||||
.split("-")
|
||||
.map((a) => parseInt(a)) as [number, number, number, number, number],
|
||||
lastModified: moment(i.updatedAt)
|
||||
.format("YYYY-M-D-H-m")
|
||||
.split("-")
|
||||
.map((a) => parseInt(a)) as [number, number, number, number, number],
|
||||
transp: "OPAQUE" as "OPAQUE",
|
||||
url: "https://www.ff-merching.de",
|
||||
alarms: [
|
||||
{
|
||||
action: "display",
|
||||
description: "Erinnerung",
|
||||
trigger: {
|
||||
minutes: 30,
|
||||
before: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
}))
|
||||
);
|
||||
let { error, value } = CalendarHelper.buildICS(items);
|
||||
|
||||
res.type("ics").send(events.value);
|
||||
res.type("ics").send(value);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue