From de5e4afffb3538b25034ac2138b57de3e706cded Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Mon, 17 Mar 2025 11:56:17 +0100 Subject: [PATCH] demo data & template usage --- src/controller/admin/club/memberController.ts | 6 + src/data-source.ts | 3 +- src/demodata/member.data.ts | 138 ++++++++++++++++++ src/helpers/demoDataHelper.ts | 7 +- .../1742207245862-memberPrintoutTemplates.ts | 20 +++ src/templates/member.body.template.html | 10 +- 6 files changed, 176 insertions(+), 8 deletions(-) create mode 100644 src/demodata/member.data.ts create mode 100644 src/migrations/1742207245862-memberPrintoutTemplates.ts diff --git a/src/controller/admin/club/memberController.ts b/src/controller/admin/club/memberController.ts index 86bea81..b44f690 100644 --- a/src/controller/admin/club/memberController.ts +++ b/src/controller/admin/club/memberController.ts @@ -138,6 +138,12 @@ export async function getMemberPrintoutById(req: Request, res: Response): Promis template: "member", saveToDisk: false, data: { + today: new Date().toLocaleDateString("de-DE", { + weekday: "long", + day: "2-digit", + month: "2-digit", + year: "numeric", + }), member, memberships, awards, diff --git a/src/data-source.ts b/src/data-source.ts index 6babcb1..87af7a0 100644 --- a/src/data-source.ts +++ b/src/data-source.ts @@ -47,6 +47,7 @@ import { salutation } from "./entity/configuration/salutation"; import { BackupAndResetDatabase1738166124200 } from "./migrations/1738166124200-BackupAndResetDatabase"; import { CreateSchema1738166167472 } from "./migrations/1738166167472-CreateSchema"; +import { MemberPrintoutTemplates1742207245862 } from "./migrations/1742207245862-memberPrintoutTemplates"; const dataSource = new DataSource({ type: DB_TYPE as any, @@ -100,7 +101,7 @@ const dataSource = new DataSource({ webapi, webapiPermission, ], - migrations: [BackupAndResetDatabase1738166124200, CreateSchema1738166167472], + migrations: [BackupAndResetDatabase1738166124200, CreateSchema1738166167472, MemberPrintoutTemplates1742207245862], migrationsRun: true, migrationsTransactionMode: "each", subscribers: [], diff --git a/src/demodata/member.data.ts b/src/demodata/member.data.ts new file mode 100644 index 0000000..150ae00 --- /dev/null +++ b/src/demodata/member.data.ts @@ -0,0 +1,138 @@ +import { communication } from "../entity/club/member/communication"; +import { member } from "../entity/club/member/member"; +import { memberAwards } from "../entity/club/member/memberAwards"; +import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions"; +import { memberQualifications } from "../entity/club/member/memberQualifications"; +import { membership } from "../entity/club/member/membership"; + +export const memberDemoData: { + member: Partial; + today: string; + memberships: Array>; + awards: Array>; + qualifications: Array>; + positions: Array>; + communications: Array>; +} = { + today: "Montag, 17.03.2025", + member: { + id: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + firstname: "Julian", + lastname: "Krauser", + nameaffix: "", + //@ts-ignore + birthdate: "2003-09-20", + internalId: "1312", + salutationId: 47, + salutation: { id: 47, salutation: "Herr", members: [] }, + firstMembershipEntry: { + id: 8681, + //@ts-ignore + start: "2017-11-13", + end: null, + terminationReason: null, + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + statusId: 34, + status: { id: 34, status: "aktiv", memberships: [] }, + //@ts-ignore + member: {}, + }, + lastMembershipEntry: { + id: 8681, + //@ts-ignore + start: "2017-11-13", + end: null, + terminationReason: null, + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + statusId: 34, + status: { id: 34, status: "aktiv", memberships: [] }, + //@ts-ignore + member: {}, + }, + preferredCommunication: [ + { + id: 7031, + preferred: true, + isSMSAlarming: false, + isSendNewsletter: true, + mobile: "", + email: "julian.krauser@jk-effects.com", + postalCode: "", + city: "", + street: "", + streetNumber: 0, + streetNumberAddition: "", + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + typeId: 46, + type: { id: 46, type: "Email", useColumns: ["email"], communications: [] }, + // @ts-ignore + member: {}, + }, + ], + smsAlarming: [], + sendNewsletter: { + id: 7031, + preferred: true, + isSMSAlarming: false, + isSendNewsletter: true, + mobile: "", + email: "julian.krauser@jk-effects.com ", + postalCode: "", + city: "", + street: "", + streetNumber: 0, + streetNumberAddition: "", + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + typeId: 46, + type: { id: 46, type: "Email", useColumns: ["email"], communications: [] }, + // @ts-ignore + member: {}, + }, + }, + memberships: [ + { + id: 8681, + //@ts-ignore + start: "2017-11-13", + end: null, + terminationReason: null, + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + statusId: 34, + status: { id: 34, status: "aktiv", memberships: [] }, + }, + ], + awards: [], + qualifications: [], + positions: [ + { + id: 696, + note: "", + //@ts-ignore + start: "2025-01-06", + end: null, + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + executivePositionId: 192, + executivePosition: { id: 192, position: "SchriftfĂĽhrer", members: [] }, + }, + ], + communications: [ + { + id: 7031, + preferred: true, + isSMSAlarming: false, + isSendNewsletter: true, + mobile: "", + email: "julian.krauser@jk-effects.com", + postalCode: "", + city: "", + street: "", + streetNumber: 0, + streetNumberAddition: "", + memberId: "2fe205f8-8ae8-4218-839f-af3456d3f39d", + typeId: 46, + //@ts-ignore + member: {}, + type: { id: 46, type: "Email", useColumns: ["email"], communications: [] }, + }, + ], +}; diff --git a/src/helpers/demoDataHelper.ts b/src/helpers/demoDataHelper.ts index 3187ca1..45020a4 100644 --- a/src/helpers/demoDataHelper.ts +++ b/src/helpers/demoDataHelper.ts @@ -1,10 +1,11 @@ import { newsletterDemoData } from "../demodata/newsletter.data"; import { protocolDemoData } from "../demodata/protocol.data"; import { PermissionModule } from "../type/permissionTypes"; -import {memberlistDemoData} from "../demodata/member.list.data"; +import { memberlistDemoData } from "../demodata/member.list.data"; +import { memberDemoData } from "../demodata/member.data"; export abstract class DemoDataHelper { - static getData(scope: `${PermissionModule}`|`${PermissionModule}.${string}`) { + static getData(scope: `${PermissionModule}` | `${PermissionModule}.${string}`) { switch (scope) { case "protocol": return protocolDemoData; @@ -12,6 +13,8 @@ export abstract class DemoDataHelper { return newsletterDemoData; case "member.list": return memberlistDemoData; + case "member": + return memberDemoData; default: return {}; } diff --git a/src/migrations/1742207245862-memberPrintoutTemplates.ts b/src/migrations/1742207245862-memberPrintoutTemplates.ts new file mode 100644 index 0000000..a799d78 --- /dev/null +++ b/src/migrations/1742207245862-memberPrintoutTemplates.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; +import { templateUsage } from "../entity/configuration/templateUsage"; + +export class MemberPrintoutTemplates1742207245862 implements MigrationInterface { + name = "MemberPrintoutTemplates1742207245862"; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.manager + .createQueryBuilder() + .insert() + .into(templateUsage) + .values([{ scope: "member" }]) + .orUpdate(["headerId", "bodyId", "footerId", "headerHeight", "footerHeight"], ["scope"]) + .execute(); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.manager.createQueryBuilder().delete().from(templateUsage).where({ scope: "member" }).execute(); + } +} diff --git a/src/templates/member.body.template.html b/src/templates/member.body.template.html index a777c2a..5d499ae 100644 --- a/src/templates/member.body.template.html +++ b/src/templates/member.body.template.html @@ -6,7 +6,7 @@

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

Mitglieds-Ausdruck Stand {{today}}

@@ -14,14 +14,14 @@

geboren: {{member.birthdate}}

eingetreten: {{member.firstMembershipEntry.start}}

- {{#if member.lastMembershipEntry}} + {{#if member.lastMembershipEntry?.end}}

ausgetreten: {{member.lastMembershipEntry.end}}

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

Mitgliedschaften

{{#each memberships}}
-

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

+

{{this.status.status}}: {{this.start}} - {{#if this.end}}{{this.end}}{{else}}heute{{/if}}

{{#if this.terminationReason}}

beendet, weil:{{this.terminationReason}}

{{/if}} @@ -32,7 +32,7 @@

Vereinsämter

{{#each positions}}
-

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

+

{{this.executivePosition.position}}: {{this.start}} - {{#if this.end}}{{this.end}}{{else}}heute{{/if}}

{{#if this.note}}

Notiz: {{this.note}}

{{/if}} @@ -61,7 +61,7 @@

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

{{#if this.terminationReason}}

beendet, weil:{{this.terminationReason}}

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

Notiz: {{this.note}}

{{/if}}