From d6a13d657ba265e42436fb6a7aba0b9b724df991 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sat, 15 Mar 2025 09:05:22 +0100 Subject: [PATCH 1/4] member base template --- src/templates/member.body.template.html | 49 +++++++++++++++++++++++ src/templates/member.footer.template.html | 3 ++ 2 files changed, 52 insertions(+) create mode 100644 src/templates/member.body.template.html create mode 100644 src/templates/member.footer.template.html diff --git a/src/templates/member.body.template.html b/src/templates/member.body.template.html new file mode 100644 index 0000000..9129600 --- /dev/null +++ b/src/templates/member.body.template.html @@ -0,0 +1,49 @@ + + + + + Mitglied + + +

{{member.lastname}} {{member.firstname}}{{#if member.nameaffix}} - {{member.nameaffix}}{{/if}}

+

Mitglieds-Ausdruck Stand {{today}}

+
+ +

Agenda

+ {{#each ---}} +
+

+ +
+
+ {{/each}} + + + diff --git a/src/templates/member.footer.template.html b/src/templates/member.footer.template.html new file mode 100644 index 0000000..7a3190b --- /dev/null +++ b/src/templates/member.footer.template.html @@ -0,0 +1,3 @@ +
+ Seite von +
From 2f72cc392562c54fec0c0d0c7f4e214dcfdc3298 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sun, 16 Mar 2025 17:42:51 +0100 Subject: [PATCH 2/4] template + route & controller --- src/controller/admin/club/memberController.ts | 38 ++++++++++++ src/routes/admin/club/member.ts | 5 ++ src/templates/member.body.template.html | 62 +++++++++++++++++-- 3 files changed, 99 insertions(+), 6 deletions(-) diff --git a/src/controller/admin/club/memberController.ts b/src/controller/admin/club/memberController.ts index 91c51f8..86bea81 100644 --- a/src/controller/admin/club/memberController.ts +++ b/src/controller/admin/club/memberController.ts @@ -118,6 +118,44 @@ export async function getMemberStatisticsById(req: Request, res: Response): Prom res.json(MemberFactory.mapToMemberStatistic(member)); } +/** + * @description get member printout by id + * @param req {Request} Express req object + * @param res {Response} Express res object + * @returns {Promise<*>} + */ +export async function getMemberPrintoutById(req: Request, res: Response): Promise { + const memberId = req.params.id; + let member = await MemberService.getById(memberId); + let memberships = await MembershipService.getAll(memberId); + let awards = await MemberAwardService.getAll(memberId); + let qualifications = await MemberQualificationService.getAll(memberId); + let positions = await MemberExecutivePositionService.getAll(memberId); + let communications = await CommunicationService.getAll(memberId); + + let pdf = await PdfExport.renderFile({ + title: "Mitglieder-Ausdruck", + template: "member", + saveToDisk: false, + data: { + member, + memberships, + awards, + qualifications, + positions, + communications, + }, + }); + + 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 get memberships by member * @param req {Request} Express req object diff --git a/src/routes/admin/club/member.ts b/src/routes/admin/club/member.ts index 5f9d032..541487e 100644 --- a/src/routes/admin/club/member.ts +++ b/src/routes/admin/club/member.ts @@ -21,6 +21,7 @@ import { getExecutivePositionByMemberAndRecord, getExecutivePositionsByMember, getMemberById, + getMemberPrintoutById, getMembersByIds, getMembershipByMemberAndRecord, getMembershipsByMember, @@ -55,6 +56,10 @@ router.get("/:id/statistics", async (req: Request, res: Response) => { await getMemberStatisticsById(req, res); }); +router.get("/:id/print", async (req: Request, res: Response) => { + await getMemberPrintoutById(req, res); +}); + router.get("/print/namelist", async (req: Request, res: Response) => { await createMemberPrintoutList(req, res); }); diff --git a/src/templates/member.body.template.html b/src/templates/member.body.template.html index 9129600..a777c2a 100644 --- a/src/templates/member.body.template.html +++ b/src/templates/member.body.template.html @@ -5,18 +5,68 @@ Mitglied -

{{member.lastname}} {{member.firstname}}{{#if member.nameaffix}} - {{member.nameaffix}}{{/if}}

+

+ {{member.salutation}} {{member.lastname}} {{member.firstname}}{{#if member.nameaffix}} - + {{member.nameaffix}}{{/if}} +

Mitglieds-Ausdruck Stand {{today}}


-

Agenda

- {{#each ---}} +

geboren: {{member.birthdate}}

+

eingetreten: {{member.firstMembershipEntry.start}}

+ {{#if member.lastMembershipEntry}} +

ausgetreten: {{member.lastMembershipEntry.end}}

+ {{/if}} {{#if memberships.length}} +
+

Mitgliedschaften

+ {{#each memberships}}
-

- +

{{this.status.status}}: {{this.start}} - {{this.end ?? 'heute'}}

+ {{#if this.terminationReason}} +

beendet, weil:{{this.terminationReason}}

+ {{/if}}

- {{/each}} + {{/each}} {{/if}} {{#if memberships.length}} +
+

Vereinsämter

+ {{#each positions}} +
+

{{this.executivePosition.position}}: {{this.start}} - {{this.end ?? 'heute'}}

+ {{#if this.note}} +

Notiz: {{this.note}}

+ {{/if}} +
+
+ {{/each}} {{/if}} {{#if awards.length}} +
+

Auszeichnungen

+ {{#each awards}} +
+

{{this.award.award}}: {{this.date}}

+ {{#if this.given}} +

wurde vergeben

+ {{else}} +

wurde verwehrt / zurückgewiesen

+ {{/if}} {{#if this.note}} +

Notiz: {{this.note}}

+ {{/if}} +
+
+ {{/each}} {{/if}} {{#if qualifications.length}} +
+

Qualifikationen

+ {{#each qualifications}} +
+

{{this.qualification.qualification}}: {{this.date}}

+ {{#if this.terminationReason}} +

beendet, weil:{{this.terminationReason}}

+ {{/if}} {{/if}} {{#if this.note}} +

Notiz: {{this.note}}

+ {{/if}} +
+
+ {{/each}} {{/if}}