enhance: provide count of receivers at newsletter
This commit is contained in:
parent
43f397f0e2
commit
8c333b1b89
3 changed files with 93 additions and 39 deletions
|
@ -164,6 +164,34 @@ export async function createNewsletterPrintoutPreviewById(req: Request, res: Res
|
||||||
res.send(pdfbuffer);
|
res.send(pdfbuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get all members receiving a newsletter printout by id
|
||||||
|
* @param req {Request} Express req object
|
||||||
|
* @param res {Response} Express res object
|
||||||
|
* @returns {Promise<*>}
|
||||||
|
*/
|
||||||
|
export async function getNewsletterPrintReceiversById(req: Request, res: Response): Promise<any> {
|
||||||
|
let newsletterId = parseInt(req.params.newsletterId);
|
||||||
|
|
||||||
|
let recipients = await NewsletterHelper.getPrintRecipients(newsletterId);
|
||||||
|
|
||||||
|
res.json(recipients);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description get all members receiving a newsletter mail by id
|
||||||
|
* @param req {Request} Express req object
|
||||||
|
* @param res {Response} Express res object
|
||||||
|
* @returns {Promise<*>}
|
||||||
|
*/
|
||||||
|
export async function getNewsletterMailReceiversById(req: Request, res: Response): Promise<any> {
|
||||||
|
let newsletterId = parseInt(req.params.newsletterId);
|
||||||
|
|
||||||
|
let recipients = await NewsletterHelper.getMailRecipients(newsletterId);
|
||||||
|
|
||||||
|
res.json(recipients);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description create newsletter
|
* @description create newsletter
|
||||||
* @param req {Request} Express req object
|
* @param req {Request} Express req object
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
import Mail from "nodemailer/lib/mailer";
|
|
||||||
import { member } from "../entity/club/member/member";
|
import { member } from "../entity/club/member/member";
|
||||||
import { newsletter } from "../entity/club/newsletter/newsletter";
|
import { newsletter } from "../entity/club/newsletter/newsletter";
|
||||||
import { newsletterDates } from "../entity/club/newsletter/newsletterDates";
|
import { newsletterDates } from "../entity/club/newsletter/newsletterDates";
|
||||||
|
@ -148,6 +147,47 @@ export abstract class NewsletterHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async getMailRecipients(newsletterId: number) {
|
||||||
|
let newsletter = await NewsletterService.getById(newsletterId);
|
||||||
|
let recipients = await NewsletterRecipientsService.getAll(newsletterId);
|
||||||
|
let config = await NewsletterConfigService.getAll();
|
||||||
|
|
||||||
|
let allowedForMail = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId);
|
||||||
|
|
||||||
|
const members = await this.transformRecipientsToMembers(newsletter, recipients);
|
||||||
|
const mailRecipients = members.filter(
|
||||||
|
(m) =>
|
||||||
|
m.sendNewsletter != null &&
|
||||||
|
m.sendNewsletter?.email != null &&
|
||||||
|
allowedForMail.includes(m.sendNewsletter?.type?.id)
|
||||||
|
);
|
||||||
|
|
||||||
|
return mailRecipients;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async getPrintRecipients(newsletterId: number) {
|
||||||
|
let newsletter = await NewsletterService.getById(newsletterId);
|
||||||
|
let recipients = await NewsletterRecipientsService.getAll(newsletterId);
|
||||||
|
let config = await NewsletterConfigService.getAll();
|
||||||
|
|
||||||
|
let notAllowedForPdf = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId);
|
||||||
|
|
||||||
|
const members = await this.transformRecipientsToMembers(newsletter, recipients);
|
||||||
|
const pdfRecipients = members.filter(
|
||||||
|
(m) => !notAllowedForPdf.includes(m.sendNewsletter?.type?.id) || m.sendNewsletter == null
|
||||||
|
);
|
||||||
|
|
||||||
|
pdfRecipients.unshift({
|
||||||
|
id: "0",
|
||||||
|
firstname: "Alle Mitglieder",
|
||||||
|
lastname: CLUB_NAME,
|
||||||
|
nameaffix: "",
|
||||||
|
salutation: { salutation: "" },
|
||||||
|
} as member);
|
||||||
|
|
||||||
|
return pdfRecipients;
|
||||||
|
}
|
||||||
|
|
||||||
public static getICSFilePath(newsletter: newsletter) {
|
public static getICSFilePath(newsletter: newsletter) {
|
||||||
return FileSystemHelper.formatPath(
|
return FileSystemHelper.formatPath(
|
||||||
"newsletter",
|
"newsletter",
|
||||||
|
@ -163,22 +203,12 @@ export abstract class NewsletterHelper {
|
||||||
public static async sendMails(newsletterId: number) {
|
public static async sendMails(newsletterId: number) {
|
||||||
let newsletter = await NewsletterService.getById(newsletterId);
|
let newsletter = await NewsletterService.getById(newsletterId);
|
||||||
let dates = await NewsletterDatesService.getAll(newsletterId);
|
let dates = await NewsletterDatesService.getAll(newsletterId);
|
||||||
let recipients = await NewsletterRecipientsService.getAll(newsletterId);
|
|
||||||
let config = await NewsletterConfigService.getAll();
|
|
||||||
|
|
||||||
const { value, error } = CalendarHelper.buildICS(dates.map((r) => r.calendar));
|
const { value, error } = CalendarHelper.buildICS(dates.map((r) => r.calendar));
|
||||||
if (error) throw new InternalException("Failed Building ICS form Mail", error);
|
if (error) throw new InternalException("Failed Building ICS form Mail", error);
|
||||||
this.saveIcsToFile(newsletter, value);
|
this.saveIcsToFile(newsletter, value);
|
||||||
|
|
||||||
let allowedForMail = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId);
|
const mailRecipients = await this.getMailRecipients(newsletterId);
|
||||||
|
|
||||||
const members = await this.transformRecipientsToMembers(newsletter, recipients);
|
|
||||||
const mailRecipients = members.filter(
|
|
||||||
(m) =>
|
|
||||||
m.sendNewsletter != null &&
|
|
||||||
m.sendNewsletter?.email != null &&
|
|
||||||
allowedForMail.includes(m.sendNewsletter?.type?.id)
|
|
||||||
);
|
|
||||||
|
|
||||||
this.formatJobEmit("progress", "mail", "info", newsletterId, mailRecipients.length, 0, "starting sending");
|
this.formatJobEmit("progress", "mail", "info", newsletterId, mailRecipients.length, 0, "starting sending");
|
||||||
|
|
||||||
|
@ -231,7 +261,6 @@ export abstract class NewsletterHelper {
|
||||||
public static async printPdfs(newsletterId: number) {
|
public static async printPdfs(newsletterId: number) {
|
||||||
let newsletter = await NewsletterService.getById(newsletterId);
|
let newsletter = await NewsletterService.getById(newsletterId);
|
||||||
let dates = await NewsletterDatesService.getAll(newsletterId);
|
let dates = await NewsletterDatesService.getAll(newsletterId);
|
||||||
let recipients = await NewsletterRecipientsService.getAll(newsletterId);
|
|
||||||
let config = await NewsletterConfigService.getAll();
|
let config = await NewsletterConfigService.getAll();
|
||||||
|
|
||||||
FileSystemHelper.clearDirectoryByFiletype(
|
FileSystemHelper.clearDirectoryByFiletype(
|
||||||
|
@ -243,26 +272,13 @@ export abstract class NewsletterHelper {
|
||||||
if (error) throw new InternalException("Failed Building ICS form Pdf", error);
|
if (error) throw new InternalException("Failed Building ICS form Pdf", error);
|
||||||
this.saveIcsToFile(newsletter, value);
|
this.saveIcsToFile(newsletter, value);
|
||||||
|
|
||||||
let notAllowedForPdf = config.filter((c) => c.config == NewsletterConfigType.mail).map((c) => c.comTypeId);
|
|
||||||
let printWithAdress = config.filter((c) => c.config == NewsletterConfigType.pdf).map((c) => c.comTypeId);
|
let printWithAdress = config.filter((c) => c.config == NewsletterConfigType.pdf).map((c) => c.comTypeId);
|
||||||
|
|
||||||
const members = await this.transformRecipientsToMembers(newsletter, recipients);
|
const pdfRecipients = await this.getPrintRecipients(newsletterId);
|
||||||
const pdfRecipients = members.filter(
|
|
||||||
(m) => !notAllowedForPdf.includes(m.sendNewsletter?.type?.id) || m.sendNewsletter == null
|
|
||||||
);
|
|
||||||
|
|
||||||
this.formatJobEmit("progress", "pdf", "info", newsletterId, pdfRecipients.length + 1, 0, "starting sending");
|
this.formatJobEmit("progress", "pdf", "info", newsletterId, pdfRecipients.length, 0, "starting sending");
|
||||||
|
|
||||||
for (const [index, rec] of [
|
for (const [index, rec] of pdfRecipients.entries()) {
|
||||||
...pdfRecipients,
|
|
||||||
{
|
|
||||||
id: "0",
|
|
||||||
firstname: "Alle Mitglieder",
|
|
||||||
lastname: CLUB_NAME,
|
|
||||||
nameaffix: "",
|
|
||||||
salutation: { salutation: "" },
|
|
||||||
} as member,
|
|
||||||
].entries()) {
|
|
||||||
let data = this.buildData(newsletter, dates, rec, printWithAdress.includes(rec.sendNewsletter?.type?.id));
|
let data = this.buildData(newsletter, dates, rec, printWithAdress.includes(rec.sendNewsletter?.type?.id));
|
||||||
|
|
||||||
await PdfExport.renderFile({
|
await PdfExport.renderFile({
|
||||||
|
@ -278,8 +294,8 @@ export abstract class NewsletterHelper {
|
||||||
"pdf",
|
"pdf",
|
||||||
"success",
|
"success",
|
||||||
newsletterId,
|
newsletterId,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
index + 1,
|
index,
|
||||||
`successfully printed for ${rec.lastname}, ${rec.firstname}`
|
`successfully printed for ${rec.lastname}, ${rec.firstname}`
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
@ -289,8 +305,8 @@ export abstract class NewsletterHelper {
|
||||||
"pdf",
|
"pdf",
|
||||||
"failed",
|
"failed",
|
||||||
newsletterId,
|
newsletterId,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
index + 1,
|
index,
|
||||||
`failed print for ${rec.lastname}, ${rec.firstname}`
|
`failed print for ${rec.lastname}, ${rec.firstname}`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -307,8 +323,8 @@ export abstract class NewsletterHelper {
|
||||||
"pdf",
|
"pdf",
|
||||||
"success",
|
"success",
|
||||||
newsletterId,
|
newsletterId,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
"sucessfully combined pdf"
|
"sucessfully combined pdf"
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
|
@ -318,8 +334,8 @@ export abstract class NewsletterHelper {
|
||||||
"pdf",
|
"pdf",
|
||||||
"failed",
|
"failed",
|
||||||
newsletterId,
|
newsletterId,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
"failed combining pdf"
|
"failed combining pdf"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -329,8 +345,8 @@ export abstract class NewsletterHelper {
|
||||||
"pdf",
|
"pdf",
|
||||||
"info",
|
"info",
|
||||||
newsletterId,
|
newsletterId,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
pdfRecipients.length + 1,
|
pdfRecipients.length,
|
||||||
`completed printing process`
|
`completed printing process`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@ import {
|
||||||
createNewsletterPrintoutPreviewById,
|
createNewsletterPrintoutPreviewById,
|
||||||
getNewsletterPrintoutProgressById,
|
getNewsletterPrintoutProgressById,
|
||||||
getNewsletterSendingProgressById,
|
getNewsletterSendingProgressById,
|
||||||
|
getNewsletterMailReceiversById,
|
||||||
|
getNewsletterPrintReceiversById,
|
||||||
} from "../../../controller/admin/club/newsletterController";
|
} from "../../../controller/admin/club/newsletterController";
|
||||||
import PermissionHelper from "../../../helpers/permissionHelper";
|
import PermissionHelper from "../../../helpers/permissionHelper";
|
||||||
|
|
||||||
|
@ -57,6 +59,14 @@ router.get("/:newsletterId/sendprogress", async (req: Request, res: Response) =>
|
||||||
await getNewsletterSendingProgressById(req, res);
|
await getNewsletterSendingProgressById(req, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get("/:newsletterId/printrecipients", async (req: Request, res: Response) => {
|
||||||
|
await getNewsletterPrintReceiversById(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get("/:newsletterId/mailrecipients", async (req: Request, res: Response) => {
|
||||||
|
await getNewsletterMailReceiversById(req, res);
|
||||||
|
});
|
||||||
|
|
||||||
router.post(
|
router.post(
|
||||||
"/",
|
"/",
|
||||||
PermissionHelper.passCheckMiddleware("create", "club", "protocol"),
|
PermissionHelper.passCheckMiddleware("create", "club", "protocol"),
|
||||||
|
|
Loading…
Add table
Reference in a new issue