From 5afd26ea22cff3b8a339cf658ed37d2053db24ba Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 13:53:46 +0100 Subject: [PATCH 01/45] Switched to puppeteer for pdf generation ref #5 --- package.json | 5 +-- src/PdfCreator.ts | 55 +++++++++++--------------------- src/controllers/PdfController.ts | 2 +- 3 files changed, 23 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index ba89b3e..1a028db 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", - "html-pdf": "^2.2.0", + "puppeteer": "^7.0.1", "reflect-metadata": "^0.1.13", "routing-controllers": "^0.9.0-alpha.6", "routing-controllers-openapi": "^2.2.0" @@ -54,6 +54,7 @@ "@odit/license-exporter": "^0.0.9", "@types/express": "^4.17.11", "@types/node": "^14.14.22", + "@types/puppeteer": "^5.4.3", "nodemon": "^2.0.7", "release-it": "^14.2.2", "rimraf": "^3.0.2", @@ -73,4 +74,4 @@ "publish": false } } -} +} \ No newline at end of file diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 2345c8c..f531a45 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -1,7 +1,6 @@ import fs from "fs"; -import pdf_converter from "html-pdf"; import path from 'path'; -import { Stream } from 'stream'; +import puppeteer from "puppeteer"; /** * This class is responsible for all things pdf creation. @@ -9,48 +8,32 @@ import { Stream } from 'stream'; */ export class PdfCreator { private templateDir = path.join(__dirname, '/templates'); + private browser; + + constructor() { + puppeteer.launch({ headless: true }).then(browser => { + this.browser = browser; + }); + } //TODO: Accept the runner class - public async generateSponsoringContract(): Promise { + public async generateSponsoringContract(): Promise { let template = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); template = template.replace("{{Runner Name}}", "lelele"); - return new Pdf(await pdf_converter.create(template, { format: "A5", orientation: "landscape" })); - } - -} - -/** - * This class is a wrapper for the pdf objects created by html-pdf. - * It offers typed conversion to Buffer and Stream. - */ -export class Pdf { - content: any; - - constructor(pdf: any) { - this.content = pdf; + return await this.renderPdf(template, { format: "A5", landscape: true }); } /** - * Promise wrapper function that resolves the toBuffer promise for pdf generation. + * This method manages the creation of pdfs via puppeteer. + * @param html The HTML that should get rendered. + * @param options Puppeteer PDF option (eg: {format: "A4"}) */ - public async toBuffer(): Promise { - let promise = await new Promise((resolve, reject) => { - this.content.toBuffer(function (err, buffer: Buffer) { - resolve(buffer); - }); - }); - return await promise; + public async renderPdf(html: string, options): Promise { + const page = await this.browser.newPage(); + await page.setContent(html); + const pdf = await page.pdf(options); + await page.close(); + return pdf; } - /** - * Promise wrapper function that resolves the toStream promise for pdf generation. - */ - public async toStream(): Promise { - let promise = await new Promise((resolve, reject) => { - this.content.toStream(function (err, stream: Stream) { - resolve(stream); - }); - }); - return await promise; - } } \ No newline at end of file diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 0ec9581..41d2c4a 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -15,6 +15,6 @@ export class PdfController { async generateContracts() { //TODO: Accept the real classes const contracts = await this.pdf.generateSponsoringContract(); - return await contracts.toBuffer(); + return await contracts; } } \ No newline at end of file -- 2.47.2 From 6121b1e3bfcf6fc9f88e0589205044c59859b4a7 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 13:57:04 +0100 Subject: [PATCH 02/45] Updated the contract template to use external css ref #5 --- src/templates/sponsoring_contract.html | 75 +++++++++++++++++--------- 1 file changed, 50 insertions(+), 25 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 1597b2c..db7e08c 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -3,43 +3,68 @@ Sponsoring contract +
-

{{Runner Name}}

+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

+
+
+

{{Runner Name}}

\ No newline at end of file -- 2.47.2 From 041c0ed6bbe5f8645e4e96b57c02d4e45b445402 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 13:59:13 +0100 Subject: [PATCH 03/45] Added a coupple of real replacement strings to the sponsoring template ref #5 --- src/templates/sponsoring_contract.html | 53 ++------------------------ 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index db7e08c..76aa1cd 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -16,55 +16,10 @@
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

-
-
-

{{Runner Name}}

+

{{runner_id}}

+

{{runner_firstname}}

+

{{runner_lastname}}

+

{{runner_groupname}}

\ No newline at end of file -- 2.47.2 From 78205ee8c7659ae0dc2e4a184554b042251d9271 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 14:09:20 +0100 Subject: [PATCH 04/45] PDF Creator now accepts single instances of class ref #5 --- src/PdfCreator.ts | 10 ++++++++-- src/templates/sponsoring_contract.html | 8 ++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index f531a45..c247117 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -1,6 +1,7 @@ import fs from "fs"; import path from 'path'; import puppeteer from "puppeteer"; +import { Runner } from './models/Runner'; /** * This class is responsible for all things pdf creation. @@ -17,9 +18,14 @@ export class PdfCreator { } //TODO: Accept the runner class - public async generateSponsoringContract(): Promise { + public async generateSponsoringContract(runner: Runner): Promise { + console.log("runner") let template = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); - template = template.replace("{{Runner Name}}", "lelele"); + template = template + .replace("{{runner_id}}", runner.id.toString()) + .replace("{{runner_firstname}}", runner.firstname) + .replace("{{runner_lastname}}", runner.lastname) + .replace("{{runner_groupname}}", runner.group.id.toString()); return await this.renderPdf(template, { format: "A5", landscape: true }); } diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 76aa1cd..3b41ac4 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -16,10 +16,10 @@
-

{{runner_id}}

-

{{runner_firstname}}

-

{{runner_lastname}}

-

{{runner_groupname}}

+

ID: {{runner_id}}

+

FIRSTNAME: {{runner_firstname}}

+

LASTNAME: {{runner_lastname}}

+

GROUP: {{runner_groupname}}

\ No newline at end of file -- 2.47.2 From ba7cedd187dbc51a53ba169889d8e0ca22a97b5d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 14:09:20 +0100 Subject: [PATCH 05/45] PDF Creator now accepts single instances of class ref #5 --- src/PdfCreator.ts | 9 +++++++-- src/templates/sponsoring_contract.html | 8 ++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index f531a45..5e79647 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -1,6 +1,7 @@ import fs from "fs"; import path from 'path'; import puppeteer from "puppeteer"; +import { Runner } from './models/Runner'; /** * This class is responsible for all things pdf creation. @@ -17,9 +18,13 @@ export class PdfCreator { } //TODO: Accept the runner class - public async generateSponsoringContract(): Promise { + public async generateSponsoringContract(runner: Runner): Promise { let template = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); - template = template.replace("{{Runner Name}}", "lelele"); + template = template + .replace("{{runner_id}}", runner.id.toString()) + .replace("{{runner_firstname}}", runner.firstname) + .replace("{{runner_lastname}}", runner.lastname) + .replace("{{runner_groupname}}", runner.group.id.toString()); return await this.renderPdf(template, { format: "A5", landscape: true }); } diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 76aa1cd..3b41ac4 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -16,10 +16,10 @@
-

{{runner_id}}

-

{{runner_firstname}}

-

{{runner_lastname}}

-

{{runner_groupname}}

+

ID: {{runner_id}}

+

FIRSTNAME: {{runner_firstname}}

+

LASTNAME: {{runner_lastname}}

+

GROUP: {{runner_groupname}}

\ No newline at end of file -- 2.47.2 From bd6ec6215d362325c510611e4545b7643b918200 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 17:48:14 +0100 Subject: [PATCH 06/45] Fixed data validation problem ref #5 --- src/controllers/PdfController.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 41d2c4a..6fc7116 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -1,8 +1,8 @@ -import { ContentType, Controller, Get } from 'routing-controllers'; +import { Body, Get, JsonController, Res } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; import { PdfCreator } from '../PdfCreator'; -@Controller() +@JsonController() export class PdfController { private pdf: PdfCreator; constructor() { @@ -10,11 +10,10 @@ export class PdfController { } @Get('/contracts') - @ContentType("application/pdf") @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) - async generateContracts() { - //TODO: Accept the real classes - const contracts = await this.pdf.generateSponsoringContract(); + async generateContracts(@Body({ validate: true }) runner: any, @Res() res: any) { + const contracts = await this.pdf.generateSponsoringContract(runner); + res.setHeader('content-type', 'application/pdf'); return await contracts; } } \ No newline at end of file -- 2.47.2 From d58453faf9840037c583e029c41ef1b31a0bafa8 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 17:49:42 +0100 Subject: [PATCH 07/45] Edited html template ref #5 --- src/templates/sponsoring_contract.html | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 3b41ac4..9803cf5 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -2,24 +2,14 @@ Sponsoring contract -
-

ID: {{runner_id}}

-

FIRSTNAME: {{runner_firstname}}

-

LASTNAME: {{runner_lastname}}

-

GROUP: {{runner_groupname}}

+

ID: {{runner_id}}

+

FIRSTNAME: {{runner_firstname}}

+

LASTNAME: {{runner_lastname}}

+

GROUP: {{runner_groupname}}

\ No newline at end of file -- 2.47.2 From 3af76a53e3156bdc2d1d3ade6ff940db9d7b24b5 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 17:59:26 +0100 Subject: [PATCH 08/45] =?UTF-8?q?first=20working=20pdf=20generation=20from?= =?UTF-8?q?=20class=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #5 --- src/PdfCreator.ts | 2 +- src/controllers/PdfController.ts | 8 +++++--- src/models/Runner.ts | 16 ++++++++++++++++ src/models/RunnerGroup.ts | 8 ++++---- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 5e79647..57f0610 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -24,7 +24,7 @@ export class PdfCreator { .replace("{{runner_id}}", runner.id.toString()) .replace("{{runner_firstname}}", runner.firstname) .replace("{{runner_lastname}}", runner.lastname) - .replace("{{runner_groupname}}", runner.group.id.toString()); + .replace("{{runner_groupname}}", runner.group.name); return await this.renderPdf(template, { format: "A5", landscape: true }); } diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 6fc7116..0b80a41 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -1,5 +1,6 @@ -import { Body, Get, JsonController, Res } from 'routing-controllers'; +import { Body, JsonController, Post, Res } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; +import { Runner } from '../models/Runner'; import { PdfCreator } from '../PdfCreator'; @JsonController() @@ -9,9 +10,10 @@ export class PdfController { this.pdf = new PdfCreator(); } - @Get('/contracts') + @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) - async generateContracts(@Body({ validate: true }) runner: any, @Res() res: any) { + async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any) { + console.log(runner) const contracts = await this.pdf.generateSponsoringContract(runner); res.setHeader('content-type', 'application/pdf'); return await contracts; diff --git a/src/models/Runner.ts b/src/models/Runner.ts index f7968a8..e1c0efb 100644 --- a/src/models/Runner.ts +++ b/src/models/Runner.ts @@ -1,6 +1,18 @@ import { IsInt, + + IsNotEmpty, + + + IsObject, + + + + IsOptional, + + IsPositive, + IsString } from "class-validator"; import { RunnerGroup } from './RunnerGroup'; @@ -13,24 +25,28 @@ export class Runner { * The runner's id. */ @IsInt() + @IsPositive() id: number; /** * The runner's first name. */ @IsString() + @IsNotEmpty() firstname: string; /** * The runner's middle name. */ @IsString() + @IsOptional() middlename?: string; /** * The runner's last name. */ @IsString() + @IsNotEmpty() lastname: string; /** diff --git a/src/models/RunnerGroup.ts b/src/models/RunnerGroup.ts index f50a179..e84053f 100644 --- a/src/models/RunnerGroup.ts +++ b/src/models/RunnerGroup.ts @@ -1,15 +1,15 @@ -import { IsInt, IsNotEmpty, IsObject, IsOptional, IsString } from "class-validator"; +import { IsInt, IsNotEmpty, IsObject, IsOptional, IsPositive, IsString } from "class-validator"; /** * Defines the runner group class - a simplified version of the backend's ResponseRunnerTeam/-Organization */ -export abstract class RunnerGroup { +export class RunnerGroup { /** * The group's id. */ @IsInt() - @IsNotEmpty() - id: number;; + @IsPositive() + id: number; /** * The group's name. -- 2.47.2 From 4acf3e39ce55c0ad9e697cf9598569ec1c1dcb44 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 20:08:47 +0100 Subject: [PATCH 09/45] Switched to handlebars for templateing ref #5 --- package.json | 3 ++- src/PdfCreator.ts | 13 +++++-------- src/templates/sponsoring_contract.html | 8 ++++---- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 1a028db..44f7435 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", + "handlebars": "^4.7.6", "puppeteer": "^7.0.1", "reflect-metadata": "^0.1.13", "routing-controllers": "^0.9.0-alpha.6", @@ -74,4 +75,4 @@ "publish": false } } -} \ No newline at end of file +} diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 57f0610..4bba509 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -2,7 +2,7 @@ import fs from "fs"; import path from 'path'; import puppeteer from "puppeteer"; import { Runner } from './models/Runner'; - +import Handlebars = require('handlebars'); /** * This class is responsible for all things pdf creation. * This uses the html templates from src/templates. @@ -19,13 +19,10 @@ export class PdfCreator { //TODO: Accept the runner class public async generateSponsoringContract(runner: Runner): Promise { - let template = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); - template = template - .replace("{{runner_id}}", runner.id.toString()) - .replace("{{runner_firstname}}", runner.firstname) - .replace("{{runner_lastname}}", runner.lastname) - .replace("{{runner_groupname}}", runner.group.name); - return await this.renderPdf(template, { format: "A5", landscape: true }); + const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); + const template = Handlebars.compile(template_source); + const result = template({ runner: runner }) + return await this.renderPdf(result, { format: "A5", landscape: true }); } /** diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 9803cf5..c10b4b4 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -6,10 +6,10 @@
-

ID: {{runner_id}}

-

FIRSTNAME: {{runner_firstname}}

-

LASTNAME: {{runner_lastname}}

-

GROUP: {{runner_groupname}}

+

ID: {{runner.id}}

+

FIRSTNAME: {{runner.firstname}}

+

LASTNAME: {{runner.lastname}}

+

GROUP: {{runner.group.name}}

\ No newline at end of file -- 2.47.2 From 19697692bcb6c0c1c978918916caccd95a8f2035 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:17:08 +0100 Subject: [PATCH 10/45] Added example locales ref #5 --- src/locales/de.json | 5 +++++ src/locales/en.json | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 src/locales/de.json create mode 100644 src/locales/en.json diff --git a/src/locales/de.json b/src/locales/de.json new file mode 100644 index 0000000..b9f7fbb --- /dev/null +++ b/src/locales/de.json @@ -0,0 +1,5 @@ +{ + "firstname": "Vorname", + "lastname": "Nachname", + "group": "Team" +} \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json new file mode 100644 index 0000000..55971d2 --- /dev/null +++ b/src/locales/en.json @@ -0,0 +1,7 @@ +{ + "test1": "Change Language to", + "test2": "What is good?", + "id": "ID", + "firstname": "FIRSTNAME", + "asd": "asd" +} -- 2.47.2 From 75eb9252672883f7b6f89a812a37d2b96f9f626e Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:20:05 +0100 Subject: [PATCH 11/45] Added translations using i18next ref #5 --- package.json | 4 +++- src/PdfCreator.ts | 20 ++++++++++++++++++-- src/controllers/PdfController.ts | 3 +-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 44f7435..00bd151 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,8 @@ "dotenv": "^8.2.0", "express": "^4.17.1", "handlebars": "^4.7.6", + "i18next": "^19.8.7", + "i18next-fs-backend": "^1.0.8", "puppeteer": "^7.0.1", "reflect-metadata": "^0.1.13", "routing-controllers": "^0.9.0-alpha.6", @@ -75,4 +77,4 @@ "publish": false } } -} +} \ No newline at end of file diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 4bba509..a994e90 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -1,8 +1,11 @@ import fs from "fs"; +import Handlebars from 'handlebars'; +import i18next from "i18next"; +import Backend from 'i18next-fs-backend'; import path from 'path'; import puppeteer from "puppeteer"; import { Runner } from './models/Runner'; -import Handlebars = require('handlebars'); + /** * This class is responsible for all things pdf creation. * This uses the html templates from src/templates. @@ -12,12 +15,25 @@ export class PdfCreator { private browser; constructor() { + i18next + .use(Backend) + .init({ + fallbackLng: 'en', + lng: 'en', + backend: { + loadPath: path.join(__dirname, '/locales/{{lng}}.json') + } + }); + Handlebars.registerHelper('__', + function (str) { + return i18next.t(str).toString(); + } + ); puppeteer.launch({ headless: true }).then(browser => { this.browser = browser; }); } - //TODO: Accept the runner class public async generateSponsoringContract(runner: Runner): Promise { const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 0b80a41..00fd6ff 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -13,9 +13,8 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any) { - console.log(runner) const contracts = await this.pdf.generateSponsoringContract(runner); res.setHeader('content-type', 'application/pdf'); return await contracts; } -} \ No newline at end of file +} -- 2.47.2 From a596188c00444c285565eecbb1f0bc668bb4706c Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:20:20 +0100 Subject: [PATCH 12/45] Updated template for i18n ref #5 --- src/locales/en.json | 10 ++++------ src/templates/sponsoring_contract.html | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 55971d2..ff54fba 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,7 +1,5 @@ { - "test1": "Change Language to", - "test2": "What is good?", - "id": "ID", - "firstname": "FIRSTNAME", - "asd": "asd" -} + "firstname": "firstname", + "lastname": "lastname", + "group": "group" +} \ No newline at end of file diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index c10b4b4..1ec061d 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -7,9 +7,9 @@

ID: {{runner.id}}

-

FIRSTNAME: {{runner.firstname}}

-

LASTNAME: {{runner.lastname}}

-

GROUP: {{runner.group.name}}

+

{{__ "firstname"}}: {{runner.firstname}}

+

{__ "lastname"}: {{runner.lastname}}

+

{__ "group"}: {{runner.group.name}}

\ No newline at end of file -- 2.47.2 From 6f81566cb82a0801a20523a7177996ea40cb3968 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:27:14 +0100 Subject: [PATCH 13/45] Implemented language selection by query param ref #5 --- src/PdfCreator.ts | 3 ++- src/controllers/PdfController.ts | 6 +++--- src/templates/sponsoring_contract.html | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index a994e90..bf37a23 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -34,7 +34,8 @@ export class PdfCreator { }); } - public async generateSponsoringContract(runner: Runner): Promise { + public async generateSponsoringContract(runner: Runner, locale: string = "en"): Promise { + i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); const result = template({ runner: runner }) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 00fd6ff..1a8e0c1 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -1,4 +1,4 @@ -import { Body, JsonController, Post, Res } from 'routing-controllers'; +import { Body, JsonController, Post, QueryParam, Res } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; import { Runner } from '../models/Runner'; import { PdfCreator } from '../PdfCreator'; @@ -12,8 +12,8 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) - async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any) { - const contracts = await this.pdf.generateSponsoringContract(runner); + async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any, @QueryParam("locale") locale: string) { + const contracts = await this.pdf.generateSponsoringContract(runner, locale); res.setHeader('content-type', 'application/pdf'); return await contracts; } diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 1ec061d..d21ada1 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -8,8 +8,8 @@

ID: {{runner.id}}

{{__ "firstname"}}: {{runner.firstname}}

-

{__ "lastname"}: {{runner.lastname}}

-

{__ "group"}: {{runner.group.name}}

+

{{__ "lastname"}}: {{runner.lastname}}

+

{{__ "group"}}: {{runner.group.name}}

\ No newline at end of file -- 2.47.2 From 05e471878f2321a1873b21730ae85ad6b8af5766 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:29:21 +0100 Subject: [PATCH 14/45] Updated readme for handlebars ref #5 --- README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 57fc0ee..bfe370d 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ The basic generation mechanism makes the templates and routes interchangeable (i > The templates are stored in src/templates by default. We provide a set of default templates that we use for the ["Lauf für Kaya!" charity run](https://lauf-fuer-kaya.de). -We use mustache-style templating strings to fill the templates with real information (exact strings are explained below). +We use handlebars for templateing utilizing i18next for translation. You can provide your own templates by replacing the ones we provided before compiling the project or by simply mounting your custom templates into the docker container. The server currently needs the following templates to work: @@ -45,12 +45,9 @@ The server currently needs the following templates to work: ### Sponsoring Contracts -| Template String | Type | Optional | Description +| Template Data | Type | Optional | Description | - | - | - | - -| runner_firstname | string | ❌ | The runner's first name -| runner_middlename | string | ✅ | The runner's middle name -| runner_lastname | string | ❌ | The runner's last name -| runner_id | int | ❌ | The runner's id +| runner | object(Runner) | ❌ | The runner object. ## Recommended Editor -- 2.47.2 From cf9cd298b638012e079be0a04d1b48efea20026f Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:47:23 +0100 Subject: [PATCH 15/45] Updated comments ref #5 --- src/controllers/PdfController.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 1a8e0c1..3163e79 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -13,6 +13,7 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any, @QueryParam("locale") locale: string) { + await this.pdf; const contracts = await this.pdf.generateSponsoringContract(runner, locale); res.setHeader('content-type', 'application/pdf'); return await contracts; -- 2.47.2 From 119102aef8f43a68f537e7542c2f2cd3b41cd28e Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:47:23 +0100 Subject: [PATCH 16/45] Updated comments ref #5 --- src/PdfCreator.ts | 9 +++++++++ src/controllers/PdfController.ts | 1 + 2 files changed, 10 insertions(+) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index bf37a23..e2cfd4b 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -14,6 +14,10 @@ export class PdfCreator { private templateDir = path.join(__dirname, '/templates'); private browser; + /** + * Main constructor. + * Initializes i18n(ext), Handlebars and puppeteer. + */ constructor() { i18next .use(Backend) @@ -34,6 +38,11 @@ export class PdfCreator { }); } + /** + * Generate sponsoring contract pdfs. + * @param runner The runner you want to generate the contracts for. + * @param locale The locale used for the contracts (default:en) + */ public async generateSponsoringContract(runner: Runner, locale: string = "en"): Promise { i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 1a8e0c1..3163e79 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -13,6 +13,7 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any, @QueryParam("locale") locale: string) { + await this.pdf; const contracts = await this.pdf.generateSponsoringContract(runner, locale); res.setHeader('content-type', 'application/pdf'); return await contracts; -- 2.47.2 From 4cd437b6afe40e4c09027c0e2004a1130bc51870 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:48:47 +0100 Subject: [PATCH 17/45] Removed useless await ref #5 --- src/controllers/PdfController.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 3163e79..1a8e0c1 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -13,7 +13,6 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any, @QueryParam("locale") locale: string) { - await this.pdf; const contracts = await this.pdf.generateSponsoringContract(runner, locale); res.setHeader('content-type', 'application/pdf'); return await contracts; -- 2.47.2 From f833ae222e68b7df9b8f8a8ec7ce17d679a9710f Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 21:56:33 +0100 Subject: [PATCH 18/45] Now accepting arrays for sponsoring contract generation ref #5 --- src/PdfCreator.ts | 4 ++-- src/controllers/PdfController.ts | 9 ++++++--- src/templates/sponsoring_contract.html | 10 ++++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index e2cfd4b..aed8070 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -43,11 +43,11 @@ export class PdfCreator { * @param runner The runner you want to generate the contracts for. * @param locale The locale used for the contracts (default:en) */ - public async generateSponsoringContract(runner: Runner, locale: string = "en"): Promise { + public async generateSponsoringContract(runners: Runner[], locale: string = "en"): Promise { i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); - const result = template({ runner: runner }) + const result = template({ runners }) return await this.renderPdf(result, { format: "A5", landscape: true }); } diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 1a8e0c1..5bd60ca 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -12,9 +12,12 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) - async generateContracts(@Body({ validate: true }) runner: Runner, @Res() res: any, @QueryParam("locale") locale: string) { - const contracts = await this.pdf.generateSponsoringContract(runner, locale); + async generateContracts(@Body({ validate: true }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string) { + if (!Array.isArray(runners)) { + runners = [runners] + } + const contracts = await this.pdf.generateSponsoringContract(runners, locale); res.setHeader('content-type', 'application/pdf'); - return await contracts; + return contracts; } } diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index d21ada1..dae871f 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -5,11 +5,13 @@ + {{#each runners}}
-

ID: {{runner.id}}

-

{{__ "firstname"}}: {{runner.firstname}}

-

{{__ "lastname"}}: {{runner.lastname}}

-

{{__ "group"}}: {{runner.group.name}}

+

ID: {{this.id}}

+

{{__ "firstname"}}: {{this.firstname}}

+

{{__ "lastname"}}: {{this.lastname}}

+

{{__ "group"}}: {{this.group.name}}

+ {{/each}} \ No newline at end of file -- 2.47.2 From cd51e78282278cae6cb86bd0c9616746612a97e3 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 22:02:26 +0100 Subject: [PATCH 19/45] Added comments ref #5 --- src/controllers/PdfController.ts | 9 +++++++-- src/controllers/StatusController.ts | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 5bd60ca..0190235 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -3,6 +3,11 @@ import { OpenAPI } from 'routing-controllers-openapi'; import { Runner } from '../models/Runner'; import { PdfCreator } from '../PdfCreator'; +/** + * The pdf controller handels all endpoints concerning pdf generation. + * It therefore is the hearth of the document-generation server's endpoints. + * All endpoints have to accept a locale query-param to support i18n. + */ @JsonController() export class PdfController { private pdf: PdfCreator; @@ -11,10 +16,10 @@ export class PdfController { } @Post('/contracts') - @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects." }) + @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.
You can choose your prefered locale by passing the 'locale' query-param." }) async generateContracts(@Body({ validate: true }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string) { if (!Array.isArray(runners)) { - runners = [runners] + runners = [runners]; } const contracts = await this.pdf.generateSponsoringContract(runners, locale); res.setHeader('content-type', 'application/pdf'); diff --git a/src/controllers/StatusController.ts b/src/controllers/StatusController.ts index f27c1f9..9578169 100644 --- a/src/controllers/StatusController.ts +++ b/src/controllers/StatusController.ts @@ -2,6 +2,9 @@ import { Get, JsonController } from 'routing-controllers'; import { OpenAPI } from 'routing-controllers-openapi'; import { config } from '../config'; +/** + * The statuscontroller provides simple endpoints concerning basic information about the server. + */ @JsonController() export class StatusController { @Get('/version') -- 2.47.2 From b4232e51e084f491d1a7fb4f929327e88f3b4c00 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 22:19:38 +0100 Subject: [PATCH 20/45] =?UTF-8?q?Now=20with=20workin=20i18n-ally=20config?= =?UTF-8?q?=F0=9F=A5=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #5 --- .vscode/extensions.json | 7 +++++-- .vscode/i18n-ally-custom-framework.yml | 8 ++++++++ .vscode/settings.json | 8 ++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 .vscode/i18n-ally-custom-framework.yml diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ff8ad2b..1c8e087 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,10 @@ "recommendations": [ "2gua.rainbow-brackets", "christian-kohler.npm-intellisense", - "remimarsal.prettier-now" + "remimarsal.prettier-now", + "lokalise.i18n-ally", ], - "unwantedRecommendations": [] + "unwantedRecommendations": [ + "antfu.i18n-ally" + ] } \ No newline at end of file diff --git a/.vscode/i18n-ally-custom-framework.yml b/.vscode/i18n-ally-custom-framework.yml new file mode 100644 index 0000000..98246d6 --- /dev/null +++ b/.vscode/i18n-ally-custom-framework.yml @@ -0,0 +1,8 @@ +languageIds: + - javascript + - html +keyMatchReg: + - '\{\{__ "([a-zA-Z0-9_]+)"\}\}' +monopoly: false +refactorTemplates: + - '{{__ "$1"}}' \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index fd68d0b..8ab8b79 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,6 @@ "[json]": { "editor.defaultFormatter": "vscode.json-language-features" }, - "prettier.enable": false, "[typescript]": { "editor.defaultFormatter": "vscode.typescript-language-features", "editor.codeActionsOnSave": { @@ -16,5 +15,10 @@ "javascript.preferences.quoteStyle": "single", "javascript.preferences.importModuleSpecifierEnding": "minimal", "typescript.preferences.importModuleSpecifierEnding": "minimal", - "typescript.preferences.includePackageJsonAutoImports": "on" + "typescript.preferences.includePackageJsonAutoImports": "on", + "i18n-ally.localesPaths": "src/locales", + "i18n-ally.keystyle": "nested", + "i18n-ally.extract.keygenStrategy":"slug", + "i18n-ally.enabledFrameworks": ["custom"] + } \ No newline at end of file -- 2.47.2 From 7c3813b94d06ca38b83db90b7f9fba6c33716a05 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 22:19:38 +0100 Subject: [PATCH 21/45] =?UTF-8?q?Now=20with=20workin=20i18n-ally=20config?= =?UTF-8?q?=F0=9F=A5=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #5 --- .gitignore | 1 + .vscode/extensions.json | 7 +++++-- .vscode/i18n-ally-custom-framework.yml | 8 ++++++++ .vscode/settings.json | 8 ++++++-- 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 .vscode/i18n-ally-custom-framework.yml diff --git a/.gitignore b/.gitignore index 72aa169..e60d033 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json +!.vscode/i18n-ally-custom-framework.yml *.code-workspace # Local History for Visual Studio Code diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ff8ad2b..1c8e087 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,7 +2,10 @@ "recommendations": [ "2gua.rainbow-brackets", "christian-kohler.npm-intellisense", - "remimarsal.prettier-now" + "remimarsal.prettier-now", + "lokalise.i18n-ally", ], - "unwantedRecommendations": [] + "unwantedRecommendations": [ + "antfu.i18n-ally" + ] } \ No newline at end of file diff --git a/.vscode/i18n-ally-custom-framework.yml b/.vscode/i18n-ally-custom-framework.yml new file mode 100644 index 0000000..98246d6 --- /dev/null +++ b/.vscode/i18n-ally-custom-framework.yml @@ -0,0 +1,8 @@ +languageIds: + - javascript + - html +keyMatchReg: + - '\{\{__ "([a-zA-Z0-9_]+)"\}\}' +monopoly: false +refactorTemplates: + - '{{__ "$1"}}' \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index fd68d0b..8ab8b79 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,7 +5,6 @@ "[json]": { "editor.defaultFormatter": "vscode.json-language-features" }, - "prettier.enable": false, "[typescript]": { "editor.defaultFormatter": "vscode.typescript-language-features", "editor.codeActionsOnSave": { @@ -16,5 +15,10 @@ "javascript.preferences.quoteStyle": "single", "javascript.preferences.importModuleSpecifierEnding": "minimal", "typescript.preferences.importModuleSpecifierEnding": "minimal", - "typescript.preferences.includePackageJsonAutoImports": "on" + "typescript.preferences.includePackageJsonAutoImports": "on", + "i18n-ally.localesPaths": "src/locales", + "i18n-ally.keystyle": "nested", + "i18n-ally.extract.keygenStrategy":"slug", + "i18n-ally.enabledFrameworks": ["custom"] + } \ No newline at end of file -- 2.47.2 From f69e7779e42f18df7ec3ccb1cdf9dcf7fa845ee6 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Fri, 5 Feb 2021 22:23:48 +0100 Subject: [PATCH 22/45] Updated readme ref #5 --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bfe370d..bc8cedb 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ The basic generation mechanism makes the templates and routes interchangeable (i > The templates are stored in src/templates by default. We provide a set of default templates that we use for the ["Lauf für Kaya!" charity run](https://lauf-fuer-kaya.de). -We use handlebars for templateing utilizing i18next for translation. +We use handlebars for templateing utilizing i18next for translation - the i18n string format in the templates is : `{{__ "string"}}` You can provide your own templates by replacing the ones we provided before compiling the project or by simply mounting your custom templates into the docker container. The server currently needs the following templates to work: @@ -47,7 +47,8 @@ The server currently needs the following templates to work: | Template Data | Type | Optional | Description | - | - | - | - -| runner | object(Runner) | ❌ | The runner object. +| runners | array(Runner) | ❌ | The runner objects. We generate a contract for each runner on a new DIN-A5 page. + ## Recommended Editor @@ -56,6 +57,7 @@ The server currently needs the following templates to work: ### Recommended Extensions * will be automatically recommended via ./vscode/extensions.json +* we also provide a config for i18n-ally in the .vscode folder ## Staging ### Branches & Tags -- 2.47.2 From 13776d1ecb2db03f19dd0c01a930d4c98222cf6b Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 19:16:45 +0100 Subject: [PATCH 23/45] Added first parts of template ref #5 --- .vscode/settings.json | 5 +++- src/locales/en.json | 5 ++-- src/templates/sponsoring_contract.html | 34 ++++++++++++++++++------- src/templates/sponsoringheader.png | Bin 0 -> 230162 bytes 4 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 src/templates/sponsoringheader.png diff --git a/.vscode/settings.json b/.vscode/settings.json index 8ab8b79..988ce3b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,6 +19,9 @@ "i18n-ally.localesPaths": "src/locales", "i18n-ally.keystyle": "nested", "i18n-ally.extract.keygenStrategy":"slug", - "i18n-ally.enabledFrameworks": ["custom"] + "i18n-ally.enabledFrameworks": [ + "custom" + ], + "i18n-ally.sourceLanguage": "en" } \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json index ff54fba..70ae0fd 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,5 +1,6 @@ { "firstname": "firstname", "lastname": "lastname", - "group": "group" -} \ No newline at end of file + "group": "group", + "id": "ID" +} diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index dae871f..ec43220 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -2,16 +2,32 @@ Sponsoring contract - + + - - {{#each runners}} -
-

ID: {{this.id}}

-

{{__ "firstname"}}: {{this.firstname}}

-

{{__ "lastname"}}: {{this.lastname}}

-

{{__ "group"}}: {{this.group.name}}

+ +
+ +
+
+

Sponsoringerklärung

+

Bitte in DRUCKBUCHSTABEN schreiben

+
+
+
+ Vorname: Peter
+

Vorname

+
+
+ ID123
+

ID

+
+
+ . +
+
+
+
- {{/each}} \ No newline at end of file diff --git a/src/templates/sponsoringheader.png b/src/templates/sponsoringheader.png new file mode 100644 index 0000000000000000000000000000000000000000..d422c1b804390024864086351ca98fd5b131eb8a GIT binary patch literal 230162 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

}1x)|Ko;VZ5 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 Hq*QRw}y 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 z zyolu~YNisKtfwh#b^kFU9(U8@G27IYVNwY^S>v5ft-ReQ%dsqNdj-V=Ognq^_?CtF$3oqPZ{X`TG$nuLMkidBi6PYlJ4ZqFNB?Ow(h?eukXs%02dp@+t_ z2RTTfSmD`Qxy4yZQkDTX#f%Y;@OBk0bcyt5Y}p1%&vvF(dmExbl{Qj{^IM8_%Xxt}p@VZ7 zT2@mtolG#I-AJ=34vVCRw#gbNMjnYzq|%JX?Y>3&7_qS@spzaMl-F4g7Qauj^3)rP zn$7=JpvE~p4q4Pgiq#dXefz?eCHeQpoxDD=DdNe!@kMBLK{K0sPv#(0fx@fxO?Kew zI!1-{4rwTe3$<5E$DH|=g>~gn?NEs_-_SMP0% z8dlA^(Dmvcn{pHg;~78rdl{!U*)I97CpxU6(iwA|Qp227WYjq4Z@Li=yoP;A4pA0a zoRsmN8IJ3d5xJ&lUVNt%yAy@G=@-(|RnVv`z;AV(L@t8&bTWJKxZcP6+!sLW@l>vX zi&ZlgS=M{LlraJtsv=lgmJPW*23>&SJ$aRK>1xk z6&dc}P|X#ghN_8=$(!U%NUCiQN^Dol&r1kON_1V4bI){Bl~N4f&B#rB{Z;wR%w~|| zwQHUx)3Y0UjhOaR`CLc@N_u)71ArCE=bEcK=~s%5kOPGr3AoFr{PBISVE1_!r2zvQ zFuru}6NpbcS}zT~_{*(WzzejTJ3#$K&CZX=)UfkWCkcXMQz+mQpI@YbFStsqtC2NtwY0os<&D0_7>$$W-#6+#A^RxzAqaYwJZ$UPpn$t z^vo?&pnLH>)hfzi4NpQD0r-yBj_YT=&v%-~#&lB+Ns%RbY@&6z)H=gQ*6(McNYEWN zeBIHt8rzN_ALPjF3D$i^>O@`5AY|n@*7gb)U02!S0IKq>+@LJpJic`>El=~LwDl_6 z#)|mll$QwW$5Hq*Z!D-lhHe0o9u~j3a$pq)gvP?6R%k;WBBo5wLQ%z`S{Pg6$8{Mp z`nu^+S9&St8)VX$^Ta$9o0X__>29leSFMqztB+A0jSH&UHcJMH6-Mxwb@hf_#_oX$2J%>ZU+1{J_eZBi8xGeY?!4Ug(_PflPMvA$|sweJgA z-$)(k_n!J8otXjxVkFRMYJ}YL$MHgP#HYn6!yFEVms$N2tbWcRn?9t>3jNP5xpKf2YG) zN0ar2SRGk1Yi%Fh**-}PpOSW65rWLbIQGUC1G-EshfFG1Xd!D8nn8DhCn45LbMLsj zY&~9nunnCU$!EftY{HnQIB2^Zk6$_E#Lld;ePtp_CYi`I`z5Z-({&e3pSvn`$@T7p zNQ=&g*vPUheMUMDr9GV1bRIc5P`QMNp2 z8569G1LgKQLGeEaAIQ0y}{Db0)~BhneO*Q~Asa=r#7!Y9VgrqY`%h-wK)xel$!Q zLVm;udGN(e=&8b^^Tx1H!%sDWMyGrgADtG0rJA>IEv5F&&;00=&h>Ub zv=Z7CDxc5TW9TpT4i_O{sJBm?>Wmz*m9sCYl0U(titCgP&R?%V(4bmCU62;>RI_f3xS} zBp0?Ud~A^R{NP&f?!lr;}I ztu32qu2Hi0#-XfOX$DhiVgjD^2}kMsqN32ka2f9t=jy}Q&aSSaE`88HXHI&bll#^h zg;|rU$u!zAUd^i<;i&;6$F2qdZAL1C0Y#f}=qG#3m>&oztH~UXHxH8F!jw8Sb>9y} z$TyR_y+%EaTzp)tgbozkl3Uxa?r+d2$2@*0K^XSL80~KiaS**DmO-?z4RbZE4o`iQ zZSfPLi&w@g!i3Q@YQ|?87&}|mFv3z!o!6PzK9YNwx~ODDK(wKO7Xv-=P+$Nxo}Y z@;=PgMxBdMpqK$O(oJ99yPtuOQf>Q4tddpzu}{|NG3l9+_LS*e14_^#<8wktv!p+6 zr&~sxqIWo>U+}!J=FVWS&6Dk(4EMowS-#a&cTJm=f&#Mb#EBhYF09}LQbA^_Leknx z-nL(^bkJa?yZ0sMx~}jC<7MU*(yA&``K1tY49sbL&WDF*8>T}xrm?Wz=#!>VJ;86> z2^Ol?(pJPjeTN*YipVM@_`T?$aU}7>?h~z(nk`V%ghIxq;bjQq0UlxCV{NuqRTAqOX-oE zGb3%@_mCoy9{BU>17Fxx+YHxY9Hf3|?hhFRx$K6!u$xCV&a<*S@OaLf$Cx26wcyD< zo;K~y|K|vK89);PkXBsgjIBU{^|qAC3^69;=Y`Ns$#ySEb5dWzTtzfnf46Q#jerJI zQgBq2`FW?69jj>CoZj4|$qs#vZdq5VT5x|4`WjYW*fx^b*Nn_K{rg)>>V*5fFRZp4 zTHX<<#xvG;?X+sauFH{Y<*cG@F!4KGR2+|rmtn#Z>C(%VO`gJ{MsVrsGF6E=t~2`n zApNr)g9#VyFt1>Btpw_$ws=Kn?Na1<3?||)9E|CyT3CG|H65i!dm{};+_?_`jDYc! z42UwsOzW@Iy_>CmqdsU}>4Mya6=ah?`}XNRZp=wk`>A@B4aS6fr0eWT5`iT#m$#dC zPxEWIX2k5#52oy1bBd4gU40Q9`i|2B+_@A-C=12SY!;YJDJ1T`zF7BSvtEAvdQoOa z(N;&W?S9<<>wWq{w%SBq1<}1Ioe*Uly1zmYHl=bxmo(h}!DS#O(}(*)KXz*b2y+~V zzs>Ib&StzOc^@vX)-se}ma9wM6A3)9KA!9nJeq>f^Dw9SN2^ zT@IPuqK|z`wP@(ZhL$s)*_U#uhm^R9E>1C;<@b>>&jh@N^1Z(tY$O+V3A;0Tj++^u z76u@hf8UjTYMz=wzZxTCP5Um5l^*GZqIs872vbzD%HbXxcyTO<4m*P?>8xm5$GTI_ ziH;3$+}9bZb+dZ+`S>nR{uZ0pmlQHJ%2;|6t&z*wS5d_mH2XDi_S;Ta2S?$cHmIB2 zd&46oJ#&jRGCQ9*nIlELASFrAd>C*zG5!}1*xA9Q?$+Q~{lYK0uDJ5&NWTJ z^Xxs3@VYAVK|$oe6|IyVmkJ~O7ZG9#Tz=Sp4q6NDurl-Rk#=?O%5eo#9w23 zgiwqiV<%sHo7l}Cn{(Zn`}tPwq#Xexik5$1mgb>RvdW{TSAvSK#*bSK5?C7?2a%BF)@#yO`>k_sH(FYuUGJ zbQ;gFz<{6?WZuJ%26vZcOS&(YIxfg>zPcDi!wTf6ZWW%=PkHMj1ydugF zN7kAGzX#cotuJ{H_6S*WpZGX5tPH9$Tnu6MlJsOH3CL z8P||9{C%OeG}mq-SE|!MEfveeEIMh(F~nkd0@&W-67uv?hNMD-o!%WrLok}ARU@H z%~!=FIr~(rdD4lotI{(cSd6FL3IAFCv)0;KcdD(r*U4_SHwHIH_fzXBKA{Enk)grU%|%yL|SKcbW^E zwi>o^-3}gj2b^@leGzIlc`pABgL9BY@sWmz0SB^k-dIqlIIs=8Oz;Ff+m@t28!?Sq zNW3rf>C3-P9^ZeiD6zqoh0bD3yGUvpW|eLE(ymtX!%ZiON4OAoYddDpvDpR)*r5%a zC#C3^C48I-zVl5Qf)op~QTrs-(M7EY2+Hfy$bBdw_Imfib-?Rn`nDs{QTJ3i>;yf%S4yg_NDigJeTLq`k9D%GcVB!m*UQ4FQ4Vp z(IG3V*!)AtPR`84fBpj4VJT+O^M~Kh&#LKLa#WH;g}Ua z;^+ihi#(r^2X_o1m$M#Y{3|}H!-4xeoK#LNnb01x`sC8&7#XBWY5wz@2W-E|ZU`OD zZgBb*=+WmbDq!?eI?$^X_RDu$bA?z2qu8Eqd2B^P9n}8kkU1qwE(Y z6g^qJbp=TxUt_ON0;*8|kD3anrJYuS^}ANEn_q1NN`=zMokbt@8L;G_Mvcio0{pxm7<<|$zH`3;omP~l9X>)&>@Ywt{Pyd%t5>#kxbJ0v1BYjjt zXXp54v)j#8|Je{%v^&LDqA*AVuIJgWUaOc!^4tl>qM1~4jF(#v4C>k9$y0w*gz%`PRK$PbT@=C{rrLiK^GJIAV&Gfzp>1n@IRbNP> z4Zej`jzx;EOr+$OAtomB0{H=biSV1}ZRXfo10M8-VSqGg6vJ*%ddc=1fk5|GyY^|c zgZ!bFscE!GzUXqsS_wsJ!(ephHE(tgvO1B^M9puggqmTr0%I{^Ge>@seQ4CwSzmCG za}uY@aFozJHc#2?6vR7$gQO|WvQh5Fky-*6K2O8(tc|cy$KEUxM`&BUUGlQd6*}Z~ zd^^^5wsKsVIhpE0D;k6BCW^6^>JTS4MU1Y8MH(*R0XweOB^^TRT=@y{xH#>@!XQ7O zo}Add^gef+;t8zw?u$ zj4guwq3ePZ6R!-1;>wC3SgLJdYEoIB1%vY(vy&ifry>6c3M~9fbH7?=fPxl`2m4?> zGxLBZ29ZQEIoL7> zYZTa3eoI+8Y8J{*x|y5$*kt1XOHp>&4)l8#iT2#)#eDh3MU_=Jv8F;Hyn4amBXWMB4v_fwW2GVS-+c4`D5 z7@uwC?|hWhN2Yu|tF}`B#R8qXO~>_2*9oYbO^JY#A7H@d2ibl5b}sf5c*+I@xliZflbzrNnUeZW>F7 zL~&Io{)Vn&!Gvb~Hzf&eEe&Pbwv1OOXLa@arF-r>c7~=0gTu!&_~MG2ER<3L{>U6< zz>N4eB2sFnuO zH4;xAizR7eeK34Z{!J!zw`Ji1`y*m$)SMN^WC~RZLSEq!t{ZYmb*Vj{5$=rY7ui8% zQx)Yc=WI!v3;wbm6S@|$pAL(n&g<{|Pu9ft_y~^Y`_QpsZYIiLI z!@NGB1Skjl9Y8r`^|D#Ovn66g??(0f&$&{(?ojAbB$$kFgWkt0WS}zY1g6dsw>SWABW;ZL;z0g52 zofM$Rw7v0pWJaFU29m}8f9Pc;QBC1Ox$nP{i`-t``1jiN)pIDQb)uC>dTM8Y$g zNA)Q8WP=5II|)a!Y&z1UKz6PqW;+~u08rHsKtp6sDnzU!#sZjvG?PUcJ|s3OX4eCu zZ71T|2^TdFur#JpB+M5RF6Vaq-g~k&v)QKMl>fl6X;N}brtwIo`V#5bFO+U(q`cml z5%Zzqe08GIC`YE3Ay;qg$}%atw`f8ATi>$SfEDdbt_#nHJJ!WpC+=D3Ubb#TIo~{F z&pl>q_UDY;nrhlkxaD3uB=F{m*5|yk)GD7#t6W3_+R!;PHfG;VLNg&{c;e>jl{NwgCd)lk^OTC=UK z>SS)-?fwXI#r9MGKI-MQQ+Xqm5oG2wp~PQeV7wy&X?lN z>t}GEpZ1Trd=yQ&EM6gG)#0+}yD_nIz1$1cWElOvtwuRl;_y1Vs(Rg;6J9j)q(`_)L+6x6 zEEH81k@4X}9Nln^t>&@;lWOG8zhM~f;2f;vcAkVRlj++%p&x}8574i-5|)c9y#L~% zKZqL)?qLS9OC6VL`mx8;&_lUjcJWJ8X{ztrNy^%!62rY=A9m1$a0G8I${lQ2yBO?i zHM=$Og<7S|^k}hBXg(5g8#Y(5bD8%u_PYQ)xbqxiNh%i28Iq11-!~524gSz!pohxxi+&X2oxLsd&W43bY3uJJ)$i0>#E)sB<83 zlq#@AVoKc0$B%-Y3a73V+wjh53-^TN{1;qE09YH1h&k+3%^kD{}vJgwZlu~D0;~=Omk2hSJbo4Z{hjtU4dxSPt+6;saymd zC~H<;5Lw1-FHwEy8*m`7zax#Wp_lsUoz((mQfk|70;gnbfL6*m&O356(KnPEqUEhI z13~BsOVpL<9ATsn4X%bjMV8vLayj*86O_1@RGNA)-H@tKNgLfeO!wRMjbk-Se`M&d zH0%H=#7VddREouqKHT|}(uY8}A9((vGL;&?z_Q=gt_tdPCD?vG(`=L!`Bw|OeUKlM z_nzlc^fMZJbq{-W&OS@4`J8eDNGZO2#l0Bh$c33h`~F@T!QCKCHLfSyM#Z~WDDezhDLoj7)~#sgU2DbF<7w1o#0D%T>GsoMGsz+fyeZXz zZ#Uq@EFk>^>Ry;w2MUc&#`5FpT)LyYNnKqrP2vh4|J{>iDD3o>U`C}{6i@Chbkjdc zmwC}}`(S^63yB1Q`j}DX0aDRUw7<+~oo@`x7h)4CKQ?H(8^1D^4MKhLprBgUUY7uL%`gE;oM*~o+c6Wdju<~A4%}lRAdpDt zB??a|c1OE@VIk_G`STakgwb#cc`h{1O}sV{bXhO5NPsU@2PiN3|q5-Owpo7LlY6fgh& zJ!Vr<5ne8;u9wkoEwAKUJ#8iHjT+{!&I#NtEoHd2N;%ELWcm+JN_0}Bwwgh`kW};e znv=2*;w7cS$zJ~hEg$Jb%W|cVY*C`popZhs7zdJY6sW)aCp)U*6B>9PF!i_a1G4xD z)GC|}KW5rBgjcKnk!t>azkff2Oc=!=A=qCR6VVV=j|Z=@3m_3wwY9b$J3giSDxk_U z?Jg6hVpF%Xifd=`R8~)I{-rZruh#bdElu!q@|)qZh_q{CdTsa1R=D|i-js)g%CBV` zkLJEaX!q_Y#%5m(#bYma?mW-AM7_y08c7@28 zpz*pwA)Q;`NEGqW`l}BP&*=F_xk|Q#r`{qy)-B5u;-r6|{S^?JYkPVc5un5?kNrQ@Grv0}valLcJ&8P%lMr}acpD<=P%`SSXK6?toFz8hefT zi8`RO=WDcgI_#j<^kfv1g(!A03fzPXyJn@Tfw`s8^r#tinY$8a}Z)zgZl z$Qd5QN`)U5`apc-cOck8yw*>`e?+pNzU8r#7aHXXg_bcYV{3AbJ{Xx;h{J?KjkVVc zi(Yrox~^hyNn@B!94S}2HeFUdz|392Jy5&^UyJqdiX9*{sNQ+ifXOn|$nzBx_MrFj z(*AEW4gA+qJs#-dxZU)tddRRKefE=ad&iLd*iRPX9aN;yp4;$Fa+I`0{zLIT5*g3I-#D64t;QHNjGpn$G%@)NKJQBQ^Vmi)LR4{=P;Q z|Fj1F{Uz|ZMczU=$wYHrYZ-msVX)tXtFmF2T=cC@ruO*5AIooU2Gy@B+fSbg-qe>L z+ZKJ_KDZPrL{OD~`i^{hhD*X^+xj9asQ1pB@d7mkIdMe~NPyhQD=O9R%s8?73`;;X z?k9cttXyHu;^RE4U>Ybt8zv46#xeBy@Z@uQAEZ`t3px8lua&!)1NE8yt&OBc?^G>= zpe9%B+pxR12i$yaMIrJ3_6+{wb$;(TYSDUum>5aC=PT&r3+)C3Sbu*eYYury25ngA zlR*=rZQw9gcnw1Zvtx&0=JZH+5mfC@_9l9@XTY{&B_{KhS)&FH-d$Y=B6*2Bi7@&| z7fjI-IqXzRNXBfGqF}qX1Ds34JWx8z``F>5BEeD;_o}K$IU(5y zcEQsp|DRX@#hLz(ixCz;iba~ZyIuJ%Kx8lChit#l(nGDo>_avaB2Q?20|N$eWA*B$ zlfRYCw2Q#%xQV*O^ZXI-at%j&rkOSJ)^$(M@t`-|RaVnAkBA`(&20vmSxZ#Fj~X)x zV@qgJN?quOe(F1*Io9P6p*DsDkd(_k{;#p)c!WMN#K8#aY{k)M1tnT2X!w$pHs2d` zXt^GB;kTsmX<1n!U4RK*RmNbs@Gf~bG~-SuQE$Mn3H{&7!2*vp z;@?m#6e$D@q5D2jeO`icqipJr3C5P3aRJsZ&jG@+{18PhcHm7`lWI8{EbLVIE~y zyXg>YtNOzFX{gKpo&f$AGqM&+r{wZz{d>=CM7Dp&h<5abUY*P)ZC2e}e_{0S@KfSj z2PKk^V5e+;LKkhFMpvnqz#d076*qWLnRvulkdjA7^gfGVq|BbDj}OllR90J!W)er7 zR}a_q?R7CCkb+Z`K0GzeJZuU;GkB@-BGfoJ^1H69R<9MvAGm|WBM5OX=-Rz~>WuDo z8uem8!jIB#gsYc%8>+2@mz!<@b6&Y<0|05S8_`+9PUdfY51;A!-(>UcGs(JwcQWYj z<#{dQFWB2Z<{`|x8g=w)9HQE3*y6;~6n8y4v^aH}G*G^bd)tft{Oq@HNTufuiKkZY z)ua^zUq!oaO3K8hGjr#bN1jlNd$}FZ^$K~|x(qL1h0sumx>;ewgySQ&!wc|a$LdIN zfk`}5)W`J^x_Th2SJI_X_F&Mm{|EG)Hd09p23cR_Yy7wt-b!Q&R%h z-BsUYLz=#USE2{*%k33-TX4bL ziO8<)ZpXh(X$ZfW0<43Cu@BL(^f`^`TA)CS6A1ikBqsQ=FhtsQ9SHZ23 zs>vaK3v0~G)G`a34(`2-L%RX82ur=QNl8?==Kd2Da>MaJg&!`cvfSL}6i4|}Ub-pG zly+ZcUaH8dLkgaplZ;iNwDI#r@&-<~LiTl^U{fzSTOTh`ESZA{I7D=J5a0Q znTAZF0n6pA(SJi}FI_c_ZY+Qx@_W~#xVP_AKuz(4QA_l z#h>HignMq{DNEgwp`(G$XsUP-v`Rfjk{4-eX*zDQzDDzj4!oY(oy76^CYHqB)#(g= z`bOo+a(T&sE;u7Z`f@79>qH>s1i&;ZOE-7z!2g{V0T8X>!0!=KxD8=~gJG=@bEgNK zWuEB#AqX6|1VMy)SEE*wiP5_m&=Hs8!_0~*_C`#ms4T~F1TTHwOE7x=AyG=EtDu7QhmXMDcjT2C zQS}p!L_miVKmD$@c6ewcC<+=fn_m0(`+}TWS=<$(FUKEZ>GHhlI3#R`kR=_RW7)f& zU!%RxBHVw1@20YE7RPUq;1O-dM{jSO{y&4axI8Na#ix(P7Pp8JTS+kr@Nee>}n za33!i9XxFNR`FM0h_ddBR|5p;Opb&BvY$Y=h1zcrul2IamDVg?v$GT5hsSwiR~K$s z?0Yy(3K9YqbFMs1LO^ooF#ZH)NrNS<6^8vV|B7MD$hEqmx`4uY^($WDi|+rtn=N&z z2Q+Vd2(@#6#{iJ}^U++M49ai2k4g5B3S$us(}VY?m-~a`=do592jTjNU*A^9c*gaa zswbF{jHA)3J*NAqgdK1;Uv6h?{W4S)fjURQaUTHm-Q9#%XlQplhdJFI18~uY^$IG? zn=#J@K3t)*hE350nR`zS&G?f(EVpyXp~wP-2t@Eok$$*KxMKuzRM7+9Y(3X!yGoY7 zJplqQZsF~`z27mn8>j+YdVsV0`QojflrdLT-7XNvy155;JvwY4jGVQiOxA?iW zq}=?NRv8b^KT3wEPR)me2~}`W*tKs~B{4I@z9HNb(0T3vRmuRF8xkZvfPgw_YPIkb z{8u=fk-6-NEqP!1A=s#_VY&~R1)JxFG<>83k4+Mh=vUxDCJh{Ax$uoA|YW! zneMexrHp5-)US|Oi-n4?X}srs_{V+Es;_hASRbbkgw@r*dBIQTPO_;>qtXATALtNOd{yQc~W! z>U(JQg&^rD^LB#5V&?ys!kVc8OUnh$%3ihK^ejEIR;`iIskM)emaqU%Wo2Y{BKnRr z=c9{6DMMiwCG*(krW(ccW2d1(O2lOlmHDO*iUcmo=-->yyt-%`JHTP#J1JH#|GX~N z(w%Cx%$-K+Wpv!1$mwb>b1?=hl;0N@h%Y?640jQt5Fvl1RV;<_zBw=mz4s5HAei_R z7@y65`gm+AwDEFmfY37M`ui#0?a{{& znGOKh4K~|ltvH?BNN%ywffJ4W5LG5^2hb@_A7emXU`q@j{-%%aJZ@j1Q)HKsbCs{zK= zwE}SBhahwRKJ_>UimsPc6#oyi5*B#_40=j3coSa0GXigmOLVX$zTJ|DVdbZOU~(0F zuC+|gH*nWTDIQzJ4Y#*{Rx0e?bGa`XdYHbCRz>sfGv@|UfiSS6gume>$M-yTJ;ga18YebY4iaTE749sc328N>i1- z@9@1sa^TH!?3klfFt>U!Ql|tqw(IQ%g6M!+J1kfL(EfNM`Zh5E9_Z(^jJs6gH zKiFhbT3;n;%h3ebAM6RZynh95e%#ymecaa57X{6>%AOFL!Ze6Ob@(0)68p>&vcWbD zrcr%$be(mCCo)~m)0HM9Y>l_slIfo}?vey2e?<))c&*6$yLKP{%d1;Fkz#X1UOdS| zwX4b9d0a^xBVn(qD!2uYIB1hxS=S+e6a8jFp?Dfx|dqBO0 zQFbjw(RogwKQ~>dkkjrH2?ynHHcFfY9f({i7|e1jc8?EN%7N5BiP#}^4zReA&^!X^ zkDcxQO0GKaB)0{MC-6xu|fE;#wSR z`9Z~F{`}2KLY<3*BmPsB0fAe}_9JH})zb9!QFz4>P|1dC*#PgzCF6*{)&0?JH|4R^I;sES1pU?SXXnN0`Hl;-uOrtE!-&c z!TMm;;?lzulBlof1nHM*I`gM z`Woxi>+N6jSb_nR!Cg{S;Rd#V9CxmVpw}F1X=DC>|vR$zA9ECiXSDsZ7&@?IO9%Lw^O8zT1t zxg{O07cn8lO?orHd)64ps6k_awO1-R=q6Q`(4s$i0Zg4}4hwJHi@H-N^Hy?+9JHJf z1jSlWsSk?96V3oMU<=joQ2<>-|5_~sAxJBB#@hw6R1F#65d;f{T&OBCejec9Q8uAz zUFh|sFgksey8dnWBOg6SYn2c!<>pH5E!X}x-EX~ykZCf`(3;tHkl=#?wwFWl@IUzsNYKWE&n=Eu@qD1ZZZ#x& zZLQUFKkw|ZObX)Q=q3 z1zout7yIoI{BWRCb^ijLn1vpmD%Jy_NpO3kA*v)5pb6H0QZ%V9!$p58)Qj6{k6LR` zL9^w*mgXz3Pt72Ogv+&1QrnLHyqn}Xo{FJH%pEpj*AvEK!3ZL49JjC}R@s>d?_z@L zOWVrlaR+A$Nymoe^R7a)7apMsB*GLm7sp)2Nn2~KlA+!ANi;`_7Mh;`bcyTlGg+=I z`O&J`R~noTpyY8GmsR*k8w2fFy7v@GgqlXe$8x2~DQdCG2+s1UoH{?jHL|FJTSP2u zb9j@9GqCFr@Tme-5`5?>Z2fEZ5HD9y@6i-?5Plz{Zr28D{-~lfG4IRpryYhfM!cLR zP`EubS`4nMd!{61AOQu0BvOFA0pFOts=3i^^aR~mPApH~Ut zpo@U3k>Dm0Q&JyDTfQ%ERUuR>HxBX>%Sgca1W)Iv1G1lv7H`8JyRJgjY-edW`RkVx zfQq7Q3vfRJ>WF4rn$d0rBHVPruho@i-_|nPKnB#bU@;X|?p@f)sn&NV#4f&fpl5C*`I`0WXx)MAel6 zXTF2r4v+$P@F^sH_?qaO5g#}hpj{iaU7wH;L-NJ@7ep*POg)$n!_HNMC7!Ji<{2j4 z8Va33wTUZ{KDo#&j(#|(`;*N551SgJX!-7{?H|Mc=x5jkCA;FX1tTuQ@anMZjiwz- z!wRSiZu6G;7@bqTSIN=!MaP z$y)1ilT2hN4;2nZ^7>6Iz{P?KqTgJIP4 z)<;C1pG@z!J(vaa?41~DA+tdDF8pMW{W%%-KVZHEoqwcB z$xsPp;~{$|B93a&DxrU|4?+ymaBls1M`hc$>m35o=+QJM{I~C5F>vfU2A0mK@j^Od zmlw2$E1fkP{`(P0Y3@D$6&wSGrQ}T7^t2D!Ppis|?aGxcRUewXfu*3&U-cy%gvTc& zB#l(OA?O#mR1~|H=dakKsf;re3`Q*Y--V~~JIbCK9)>h;ju%dmv8`%{Pzk^EFu6^V z!10E}M)ZjAy)$l8JW({t)Cs;mH z_D52E-x+-p?eKKF2ix#Jd8o*JaFQQ3`NxdbUa1R!Q4Sd!i?-RmAT@?uF~&RUelFsU z9NRb0Zv%t8692pNc@+O$;8OZ1iupZI<-L5RbFz2(~$>JuSJyU`t zzgY2l2N2n4GH>C>-(QOS2zhvNY+iYvc{4A9wIP@BL(FW!lF5%slB@KQGYX(=Cg1NEs>k}d1Ow9mVVp;xYhoVr@YOt|{q?kYX?w|vUe;Y#T18m)&OsGuG znIE=8CamYg+FpSWRhULM-+6Qpp0us5a+7wp-SjBYzJ&ggYZKzg=g>BELA*tv>R`PK zBGzibT}Vt{|3LQ_`6XFqH|u^)u=i|&iRdacUujmr@?N7HxUuGE+TW}8mDa2oFb*`L z9(|yJ#wv2aL4|V|&Ilz@>Ve-7LZ~B?=(4V!74C3LKMsQZV&VTXz0LWa&#gY36Z+qM z(>~C(y}GVG#Q8lSh@)-$E!$yE(fUG&{U&h7{*d^hu-%Ri2zxQoZ=~L@mZ9+x>DJ>I z-@E?-9KuI;ut|Y{Zgiyy63R^;McXI)jCbR@uA*%)0+eluO8C4c=(@hgPYwTa|BCeg zkdIW199f1eybC#)XjPSvFRgd>9}3M!AHYZqpj6r1cmx zA*6c^ix$*@|K2L>;x#rP&oy~iqO!uT*NK{9)Iw+NzSWJ8;*eHhv^FmzyqHlD z=}sJ1oND=P#)nuaI$f!@Z_}uYLVN);+t?558|%Vh4*%ZYA8VE_1ovCRTmEqw(~EGM z9H&)b`7rPPVB@2SMjbgrlOgXC)-D)y>qC0=e9dZ1{@oeB!J9n>ljpMQATj@nEHwiV zQe!57?ni>m-)i`aP{X@9j48XmZwD`)U7s#t*g>TL|;R-!_YQ>1s&8sd zhrUR0U4dasww^k{Z1ogQAaB|MK!}~ehu#L#hyrl)J!k^req^{C^S%^PBfsL*#Bam7 zW7r79`Ci`I>f0lC=f(69;La;jGY;As4zc0?W~0LC6fGGpPiTCMdN3$z|N5}ij{>kh zPUqY?;ZXpm2EY1Rfu=y)(c1nkKNZ^y_E%( z)fwQC>29I9=w(`UiO^4T4`xH~81Dyx5-K*$x-p*FNzlO*etX@*L&L964VohxJn7nN ziieYs+PdA9;JHT0+oG>~#Pz$=z#dHVK_MOy7&rfKlL!iiL~MzJSk9r@jQ4mLo*9v( zE-PQDCcepUmM3rcPK{Wk#9#9#qtIDpQ97Vhy*q;ChWeZ*O?5~{&Y_lkrpc5d6Ed0$ zScDOB9K4kSlXZx`wn)uV^JdltN|GWjG)YvG3ZBg_s-O+BPH1^>+ z2MB=N;F1O((g^%;+nDEgqGBhF@T94&rlORO6J_MbTVe-6N+4Gm_M1DZKd1G* z+CP!p!1g25_nIs28meqhV=2tFS1LkM`N^IQ8U-tXsm-q%0w^W5uI_Fj9gImZ}t%(ZB* zTC{#{xB?CnS?G7$c;*$b>}&t<_p)6oeUueK_`CU9-ThZU4g(_&Pp-YIu?KIdSDm#D zdSmB{RyFqdW%gOqWRy4ASUqU@><_~|oEHifH#MsD1={YC@Y$A17X`>P&lb$ZSOfsq zleaG`wwMRn>8bdXUur`b)`iJEi;5vd`m z|Ec_5Vj^A=*Bk^%Wq}KkWiBOA{^$w7bIgu{c{8p8=I<#LS9vTB!y;6aT_d2k{(xFr zwp#3ZJWJ%k;EBJT!wDWV`wjjOIqV4nIxBgl{y2j6`{%G^P1Q%oXdjh&0jXsjaN*HAxHuvXyggrEwwMEVaT;(+%6w*n1u z(Q+&cLr2TWgLQ0@XyBMH-yUBDI%>2iDIe06^Yd%O*S*t!E&YWEQ2l_OWe8W+q7SAM}V7MDL1YFqhfE+MT4**|2cT zmtr~!pfJNSeZ+^a!8J_J5&(Wh_n65oc{pi;>w?Z4B1Ty@(^S(v&# z=|dn^+J)hXt@zd2?g!?l>o-VGYd+Vegx+~@+E_UDO%Oy`*hm3(#Os}gB47z~#NJ;_ zc(LGLno?Nr9+5uhNGH@X_|xWkcC$s9EkeD|I!Uue`G!AQQ3nKPv53ayZ?bhpx?(L~ zi(9+PIB$@>D^gknP2th*K_Y;Rx77YswfMUMIn!K#n**P~HyBQOB16&UGWS$H&w_D1 z7^!0eEyj|+c-)Iuzv8fu3Y<9P@}Q21oCfIshujt^|07d-r>23!$cR7bgzNR2Gpx3k zsRx8z*SL1Iy$ozcF+=U+&cKvYxTaOMD&x17bFFxXZSFqVF-BX(?*C1JOGw+XP zOot}Xu1_}{kDdkklp0JOm7htE!Vshvi^Ub5R*c;j+gvM+g*CGjh%KtK?{dV78%_mk zqOX^nz#)=_KsY=EV@GwnJH#)%Z-_n{4p* zIYvJ#rI9`L9VSrShFD}1F;DUIbvL((2C#soW%^d`<4S7!W3jvXY+%Mc;HU0+mJ)W@ zV%zx$pf;0$X0ZDIO&P{yLt5^Z`rN#nY+LIt8RypE#GnGS>{tJzz2u0Sb)O5HVUu2k z6M7Lm>C=E!Z@Fhu{s00>bsX-(@AK&I8k}ci$2KXz{k^q(szLsIa&*Ge=0v$QBy@}Z z)Kl!69)I%$7D^weRI(85ci@igA)y=hk>Z)ZGuEH64QRx>q2hj~q=8^jXpU-UvW#Vs zz2N(AcUwNd_uZj$Cc#8$@Aj88F>rVSD~yG{o<+cDONDkb>f6;zR{~0KtLeQ&3Gn9+ zOAFP%*9B8EZj%3R={+=N67^D-W5;cO=u}uia_mBU2M+Doq(oak|93b=4K@}>+S zXvDv*n~GX4T628msm$2$bvnX4`Dk#^3llo=^p1tIdS8jt)fBGIv2~URLX;8mo2)>K z(17M5nyX(I_5P;4d5w+%`};}t$2nn|qmMCAPpfvTzqYI1ccK$ISPKjjWCD)_P+d@w z-ehGPZOU(~kml?6Z5#C644{+bpNaZ=M}}+>lf=|FV|-&u{+uXX-6f zseNoM`O1uv#GI<#aP@HEJ^&~m*0+P{n%hHOQ^I|p_d|kS&PMhHHzXCa2|excKnbh` z;zUM~9=St9?R zRFZ3Z+@UKbfBiHUHq+_R#rUp@L>cm?b%2|zseahdJR)P8xQ+1~Y;8Cv!1 z#)tF=Uyb?T*;5AfCV;RRs(N8Wa);1^^LBmmVU8EaMnM;+bLZpDL%H@@Bb<;E1&pY? zwQmL|)<(yq&12i#hITjgW;)1%>cAGskSq?c7}y-101aWvL1n0j*wrw>ImKv{b>h~B z_ZKvU-w*V4U7-UFAe_myBVFjah)AhF4f?cSckmpsKs_Q>ZW@2j#fRDub4}lxxhKUy zRBz%ePFNgYRs5s-JVp~)uV@NU)znIxGS}k7o)Ckr&&;<~UH1~4*rl~4RQ&BL>;w}Q z@v2`34VyYex18|IF~eQ6`98>C^1Q?`*&Hd(v3YFAp){&AdboP*t$js&yY;N9JJy>2hWo(KApP` z1sA1$}3g^|PjdDOu;Z>fA{w%c91Z4jO9rzn96#p8Aw0H; z8s9p66Q((aiC?%#w{y6jF8g%ObV{gnyGI`$i#tikOFK#Uhb8#gk@$yPNqz%SEw5_a z&0l5ES{Tg5*4?#VyI8qIYeG}%>W8!xu}j^Jg@|bW3zcILsg)AP)4K@ow$%x5LabM{`oMn5u z)F&`!wO@=jzFhSTr8aJfm$Pvk{ff*R~&~uz8z(^nCELMW!_R0xRio;-clQb#%B#= z5x)ZO^ku-b5*U4f-=x|I{!?eZwxnw{XaszG(}ooaG-fdlfwM{fKX9ZcS5aKRW8Pfb zSDVXJK#sQFRa2I?F?pnDRXb7nUz@KyAu~|OsgtrUB1MLOLz*agV!z`WIA;AIDNtqd z$!}Bkvpmz*8Xs&etVY^j(#}vdktw7 z!tY9FMV-$n_YRC^WkvON3?Fe23Lft4{rdcQ-UTfV_lWYybK=H1xC?FS#vO;l>XL#+ zLAAH{6kOaz zW+)IN4nx~lXueB!1-%Mz3_K8b*#J-obLFe;{wd}}Zt~LT+CvRXK83Qfvh}I5Mhn%? zMVbfCdp1aP?k45lY2;*sx!P1uZ@3h~erIzv9Kk*vCg7K9TZhy~+R6EMQf{5ZAl3zU zPQdMD%U{z_c$MfnmewK?7Wpz*5X5+xU!Fv9wlH(vl@)ao1$`=+;NUjJ`{y>Rvjl7y z7Tj95kGob~|j&EM&w46$Av9=RMZt^Jl z(amHMqU|8wMX>;6%pb0bNd0|N6l0>9hdSUixr&2_G-K1aFf@pC`mhDyJHLw(sE_L z6sCd0!q;Cu)iD2}iOyzX_iXP*>sky^l?4p!SI*i2vWU}TJrJI}g7%tW68%5(S-X`_ zAL3l$#JE{J;rNy;e;&G$59L*%Zv8^x9){6rTEkbl&481B%F|=qjWo(18vnd#0~;ip zL+AKf^0Sf>#Lbc~FCIHfcQU7~;m&j{Yr}gL1@IMau~u*RQ`cTBd!B^W;$9tKqG(yF zzQaO&?}rugPOaGN!< zV(wtkF!Uu#fXw39x)*xhn@?Xy)#XM`d=*;m=f6MZBOA6kO1^=0hqE^(a;(fFkt-ST?$C`K7NlPfRL7pZp^wXPszxg%lp0u8cRfy@vLoaEuR%GA*v#MN(YY(OIJozgHS@vh`t93S zAXTqJ>^Gg6F6&}Nw5S!7EmRwyqj)bDst_1Aq$tXtJ9RcwkWqM3$S~@Y%g$gtHc604 z9rQA19h<66t0G?>F-&?}rexO?VtbHe*&sB2agK1$h}+~l>O73S`S=~pM2St5h*OKe zdcvwFwlIygHa%LL;(@02Ew%tyry+f?w^}<{#QK@J3kb)fsm7CnbZ@Db-)u&oCM1y% zNwetJe|Z1i?~eu7UMVle((bE+Z|rjcyZVjPOWiItIojdd)9CM#ziZ^3B%VMSSaBgJ zUx~2TAb&dgUaM^dL-Bm>9Ky4h7UTAPRCQ&;_OA9}5PdHfaKMdhx+~rK`sXW(%rP3o z1}Y|RRaoyYDqq;Hqt|nDa85>Agj`>O(^Xhc9T^KHs~HcdS_@{Svz~yG*#NSxw1?xq zzKvt4drC0~OIm;d2#WknpAxj&fGrz8K4tjL3R+O1gaGV_obKS%%^U{HNOV@ZF=1Jj zF_eFE8@s78cOLVEr)W9GlHUDBt&&jvT^XiR8=I~m`eB2nfCi7aiD+4?eP6nSG+xo~AZpV~-aJ({$gs zp%?pUGs78?%-C!vDN+4qT&zIqmYd_qfGZ8FKZ(mN*#IJ!2gOUF|i zapn_a;D|z@7<5ap0^pp?9Z;R{7?Fx4`?C^e8|Y6rh>eN2+Z-s+k12$n7(s6h{ZjSc zxGLr1P=4~1SYpTi_v+@X1R<{X+n>SjVk_L9<*YqQP^nDc+Mbx>l~mUd_luoQN-Q{P zplR{VQzF6|2%z{mKW8}`d-7qEl#iUZqeQldAS+$gQYH#$8LOvue&eE_2c0gSa*Bo@?PPrR?_BaMq}lZQN#~<3eCveLRlkn5t`f6bUQX zhavpHJZ5#o!KPTNh)C2PFUS5X2cV$fck9{K-%n5IKXmy_X}5VjmOm-wf)z(=KUIDW zgutCH4)4G=Rjh9UX5;)gWm#PKn_u)^@ut)UpAs6()GMPmOE3hK&dCnf*VlJWR+!<6 z-3Y{vSbbU-Db*vDxj*Na-!0G_?dlNleo+v9nA9`>c|Oa+mi<-e`=vqE`uOc6E5X2d zreW|V5mtzeGJQ2q&u)^k^pN%{TX};t@W4tX_os?#spK3H!us+ zKk|;aj0*e}b5MksNH)FP!L`Sv1hfrBxJPg8ajM9{tOYG`K$@6cq5wPlSq@fH?qbTU zaU9!kF~pcl()i4ZKZAcY_$G?zp`66z@(eDnQO|G0$Hvivn^1hDhCsd#Y_6qvu?W>7 zkQ)G~mY&)%e$fE1*~v(4yUIAFdBJ^s8wP|Pl<^_lU#=e};akwcq1J1Z=GK?u+_=IP z=oOEiZ(RYs0!mOOZXPi?O>jXF^Qb_mHuqHaKf|GMr32REfWEWLpW)fWT_5Tq?Tk8} z70L&d46TK^>g~TA$F;G$t6f>aoRnM3+OlLHLpS0E3)sy8mmU-0iQNDfz~erv)%ERc zF!hmoNvXpLyrv^RjNd%(F_zNGCX0|li(6{6YP`i}f+yfp+{UP3kvg>;v^q4n)}V~% zTaVnw?4lrm{s0Xe2L4!NNt;kWszY|A=O_9Z$(a^|9VZ7M0;Bie82z1&x zeuNJ?TY%Vv(zUoqu_nfAaqMOZi)v(q5itNlm-L{sb@pe)SZw!uoT{WmeSfAtug0jb ze3-!NxpE#)^n;XykU0wJj~9~kuURu3c@~3Oo^ZzX8oAEkA2q7oH)6NeXG$3a&rchj z&f-W{5f6qpu{6|RRMJ>>+`B76J*C_7LWB2vOor~Ocs!}NpTAv+eeYN>M+A*@DSH&` zgFEAbGM4>)l|w5A;$v1eVT6yorIJr~<C_ zUr4*5;#j;XG0wn$sokQil$Ezuu9~Iii@%ldI2zwOn3?NNa`HvD{#x^5Ga2?1DsXmo z_$n@-a>>j#%KLYQ)-E}bbjs4=+g|15FQbNk-psRLH&Lt~@tK=1)OB#+4A>1=Aito}~(|sklo{-`>xEnQH2d@s#GMFLN-#_l(3LuMc zTIo@od{OHJ>(**;Vs^jiIn4#a$#iVp5Emd?4iJL3M`wf6hZ+1ME1YhE(EwMDMmkDF zIu;rbQ$~x$@ti`B@1?AATOcKbcMzS>WW?pAeIMN3z*q1x`wXB5qd%?|jHNPn{W)jL z^JzNnEqflpJ4_Y4=5(e_7|Us`F71k8j;mKENP^E7ON;IF{BJ5g|N6qVcQ#oXRJP{> zp{KS%;GwOO5yCdVI(u^gOG*3W;KrqbTOj8q`-ZAVjEkaC8_j7cdjzTj!ZfUet0FOK zxAXzC55S-1ikP$d@kG@_KuNF|SNvgN^~Yo4haH5XxX@x76J+wPK?t7k zK?ZU63@G?~nBMH>yT%*SPJy&TH=LeR)JX1sG_0aj?vBxhq3d$Fj}(#Dv+<5&3?5SHJTgyd|CU+&-!FE(mkN> zr-a`X8tED_-kD8Iek*pxEwU;j&wT9EkD#n6#_rEWt)JCf*++r)b8~U9pW}JNZ$W@+lUUeo%T8@`1~fa^^l_ zM~ICJi2HW}J-|2i@(aA;!n+Z>bnynvivQA%*vv&|#!)Th)_OVlD3+WzWwxGkJ%_23 zp)qcwZ6*Xe!jadFG(~2|Phxa*Pu8kMic&Py?D>EST?ZA5w^W{K0Z35JoAq}}gGq1> zJaBe#FuON7L=3mYJ!&ADGUF`;qP@+$X0jiG*W)#P#sj33k-TNdfOo(rr^&2Y6)Rd@ z3@vg~8ZY=)s#J3V0U4;H5mN(-)Elqp~2P@sMz zk79pUmmD+%QanoslItOs%+W`S===o&dTOAFXiqnv-xs<)9k9 zDd=sqIx!((A9n)sfn;#(`yn79MY)+IY2SNztLIWRPIVPfo!)cO4rU6{`HC&SI(Te7zB4Yc8!b_)$(`D|kI@fRyw(e*pNNwP$3n>_cKCM=xE6+j3A9&Is_@~O zx_`@jDL^DO_w`GEUSBC81*=K*ml+H0+wL`RH?F!K#Y;w7Z#`qu{WS=X-EbeWOs3w8 z+DMvnf%&}0dW-XJ0!Nn(6#`SxIS`{B{9P72lv8>eA13QpMbMID$n^Q!#7ixfQr!=^0y>g*~aDj8k6u8w>b( zmcZUuqLgjRiOsyejPqrX5eHS?R7VStJ`F&YjF4CsByIsjgSY@?-}Bf-MTZ0b_A57P5&TJN^LaUWM;VVf zoTO~Gv^^DCo{RP1?;gF!$!k5DTR*1FSt?xM=aA;-c7>Ec7j=LPM}NQfK+qpn{X1k6 zOr22?Mk2Ecs2Y)kvE#NGJ-@M7{xE3}svl;{+}=Jmj5BS1u1iGel!-5w#dq8gW}St6 z(iyT1)AT<0?!en;;|h6t`2Wr^5z0i1EsvJD#bWZH`{Wc4m72wVw?SZA>sFzt&upLV zR>Ys#54a zjRL1r@0lANMM0lvhuADAcwmJAF#;0c*Bag>m;CRc#JXN>39)e}U}ZoaJjuIxJ)o&+ zXe~C_T=gOqosBLy8qyh%AxFVpG)V@I5d~6au`{2{*_u2}<+lgO{cD$>6C<#fE;$^G z)eCa1i=Y0#avz5l%h=!;&WWY)X#5R3fVxN!Mr5pjIC}nJCSH?C%Qfkx|4pHY=V6^d zrz3+R&-lxXiba^j$B+k@-3ee4gpjEWS6@Ec=sWt|YNhQ}W^MkMknLPi_O@cq$4FqC zdardZSn~5k@M~E*D!$39kN(-JNT{0htwrB<2FT1*3rcC(`mS07@*P4HX9_@IY=xv= z#n+=Ehqd)XJBk*x)Z7qvn|f@0Hr6Lfx7c!jpFSpx1`wN2KxE|{0$DFJ20nj&^LOCnIG|=F(jdlxvDxS#b{lbxQrY-Fq#=e`(3h#{(YOqQ||j^ z=J^)m1S#jGgP?%kc@Y;Im-nl10 ztm9+ba_?=n0Gub1!M&7<8ETvL08;Q0){Ikh(Q0d<{?SHBuxH|INFZL7*DZk$ZJqYYFbJ~YtQ)R)JkJV~d0z&BWv5sVJ zz!I?Ud5QilgiAn%rpQSzo+OLV>~G{IPS=OBI8=9|o#1?}BLXn*M2vV?+L; z<@swSt(2s^1#FO5STM$m6;M+>{x>L|67^#r-+(BXBxav%y=&dh{QHtRbcx*MvcV1y z2rBm>y{lebpshf4&%P%Zt1HB1PB+QsKaaT`?G>8dVUv04P&-GPy{l4?GHVXsnLZVn zkm(`x8-4CCarX+1LLZvfb?2RCNk2NzV(Hb!e3fxv+NU%iAtAJ!L@ zQ_tWM^~z8A*M-E;)YQ~~p2%?^tTP}^vNI$qKfKY?5R_P5HcgX9;(MnY_fonAB{Kvs z)?O-9@`?3Lf3sk~F+xajcM59YNKavZW5QWjU__RL9IX;9M_$zY{uF1y z(VUZIRZBp(-Aj2j|GtLTj=Z#2r<2EIW=G!GC*dogyEAmN_EQZUP7qYNV`$H9SqXq2 zy?cm&vMq^a4#HnjT3SwK3#Ho!+Wx{ zq6o07=eCTBQ!s&8_eY~*bT;SHsF;NP+xVFM5H(J5Id(c37n6HOG3}i)=5HA4a%miB%QfCo1uN3q38@RqUQ2XFCcaF zR2^NzJZxS0+iXywrMDa)?!S(Ng~Bw!=H?fv_l2Jjru2gYZQf80zNps%$HYOuM#O=I z8{$f0V+@{WgLwZn9yEo#B+fOZePhZa@AKsK6!X?tE82N$Jq(FYCG>7fFGc5$2trz=G4S-_%c7ilvK))o4_Tg9f_yi;8dhXWB|p+XLHSQ zi&guow_anXGUp(ULHEV27$2xG=jQC3EWz;;9oJXy1YTdeb3Je=#dT=Ug%St>0M8a& z-$nj(C3^6q*&hA}&4r9yA2lrGQG|(zrEy2L4GHO+Lk-gyjUqPZvo(j;&ld)DL| zg)*SgW$h%MdDLpI3Oe{T*A2D04n7-qvp(qxrc--#Z>5P&sASLTy77HAlZ<9?>lzOZm5`R#gz<`owpV~`pyHf9yrHZ!qs zsBH~CIt^h`3c$E|YQi)?P1UzqK-7%HAXb@-kXI!L83Z2o4TIjp5l7lncmsBX6!quh zzt4|S{`3kB25nsiCY}#kd>Rg=7(^}~dRVl)dp*6W<$rVZr8E$(8E)Q>2V@Le{#CAS z*ta?ue15Jz=_5 z*v6S8UZ|q8XILl5JPitZ>BJf`C06irDWX=S+@I=ed)@hyH?bNyZ8m8e8zOl4*$ae_=*8*92(@@q2OuSw z4_eZ2b<;8~8QbLe5dAFQ#i;C@6Mxd#=QJU!gyVE}V zuXa_c%@WH7 zlG9XAujWT=;#G+948AjPsCagqPpLHdrV0mYz@mii2456P*p%uytUlknz$T}W<*TtP zGdMqoJTKR-1TFnf3*IO#kjPcMdH2jn9z2I67hlH`Acr zL9?>|!-u5+m>H;3x@kfYN?g$@zW2Zd;_K+^6H{fFn!>O^;AIw*>$m6(r;anwIORJe znSUzGm47nX;A+7JF5@&2y>SRqe80OB9YEwSmy1hAM_(J^pb`W(%bu+b+4%;tHv>5_ z0*C@7eNttAYN(J!8WtR2W8)4licIW#nYaILpaHGur@z001Z1hSTWt<>T6#fy4d?pd zZQ7o9TsL-z5&M&d`lnN6Wfso2)1F!RdiEUFuEhdrZMm=VH-Ou+2g9Gve$^~^!O!39 zs}H?x5waR$TjP1cPm$V*T2?csB@Q(yF zyaTD$Vf$P4ega6tf6YB~Gk(VbHRzAF!8jCr^q zVbD0kt0fQMq>y#kaVLM$&P!=WWsgKtV@OKd^c}kJ_0O-=C05Z_IP=uoxzx>1AhNgd z%R5wN$W7We_RJ(`PIA^dc5>G3IC|?H*Y!y3u!o@NL1M%UfL$qf9^mK?sr0Umb&2Krl`4A+CDRs~~t1vn=iK_u_*iL02-Mx#?rR3H0E zacuVX57&+#I{i^ZjB);dzm7dq;laKGUbYMl@rkxg{MjHRG@n0(E~*A9MDuuA+OaIY z-m%?Mt2>rgAm}bGXCpy5MF$me{|k6bc91Z6sG{3k;qPg%48L+q2IDLBAm)&{$ymtM z*k{hvFMv~d_sXNu0;DO#tBW1@8&FF|_mFV|R;@g%9rs(E-G*nALce8zOnO|k2SJhw zVD;t!+h?F#=@ei?;r82<7s|v+w+4j%A_gdfdLAvOtn21|wT6T4n|#Il7;{jE1KL)4C&xntfnx!T z>L4SAkP^sSkTi$(@i|f=&dY1Q{FJHAU>}MAhl1uA>#+Z>A7`3^C+6Q|3AM5n`sV-* zS<4vA(A8#VuI+~b<9B<6u9L)cXruGRjlIQBr?dMm#LD-8w;62lDM-^mf^x9x3U^eiO2X%=VqZy zEKa$R)%XhS&@y#v4xC`7GDg$Ug+f1QUsnMJ1FmEYaeynLe{xTmC7jgn=N z!A|(%pV%sNtd@sPk`^I|8PUBg4_a3yKT0)Bw2RLS=^?!AGy9Mh_saHGUnh(f^qjB7 z3IzdK=J3oBo}BS|5w>6}-8;SmN|YLAH}XArWBw&#ubur^3a1Y7Kpjh>$(VJ~0Oz(*6LZaZ^sB%hVDjjgb z(cK?&C1t15S!%$(Ck+3SAy815guFVNwN%h-T>%*FbR(9Am^|}|!_n;q!ZK$fp_yb0 zb1$gXPErkYi9%E0$@9ydK9FL+E{N=k`oe&7L37PN77EYgKP~4;umAHJWZ-aQ!9H18 zhW8sYNr~oB(wzS$ogcz!)U85{ zm-l>}4{*^~gKm!92Ba9}J-z`*=L#?a1l5Fc(G=q*V{qsqNAZlA|6@=|l3o%9S}c9F zye&&jL|0i8%09_5T=Q{D_uO=Al$imp7160mu#z`_r4q&wGmy$w>3B&TH6>ilCG~*0 zi~I910dZxxtJ`(NeieOa8=xC{SEi*D_z=jVBWL`!PR3u8$L$~nDZ%uHzO_H2OW@Ci z83Ww^hf@vf1*Ym2GkA;8?%QCxK|HsVy3!gX217@O;vYbwllQurB=k(s3(Fof8vRb) zs*M_k_0re<7!lwdXOahXiMS4}90!n}bMlpMEaacVgx4;*lhc?`BLy+=TLb*4QmI$Q zikvA7MMzR5&7B-1ZGQG%xpt+z9_)HuPNR+&?7yCJaH=1a-noNWrPwho(yWU7D^+9B zS&?mXPRo2xReRsqE#RLcX?$BLD{(2XvbW2NzADKN^fConu1W-gw{GpI-dQ!t&uo@GK`$HI}-j>7We`c zkZ(^w_<7tlff9Fl1l3y!O%So%SQhd3M``RzS;BKbld^hCxtToU+}Nx4{ZAM(;OClZIm^KtnB2%MHT) zd)>6a_AgWs5fQZD^2w(_iYr{=LBeG(8vm2^dxACW^+2+(Vc`>z3)z~x=UFR9`wtol zNv^tB>l(i7oIZed{rv_uE86qghzN_4q#$a-XT%eY?P_RD%&3x(CBYdOcr#84wioglS_jl|CI9N^rYSvYh zL`D(`^#w@`U^S4;NAQ{Q5VxBTAdwivUUc|ntu+3a8K@(p65%>et%7%LRDEztV@D;| zg{!ni7C0s({qAu5*xjoC5)OI`ky?SN;RSt16?E^TalIusa8TJ&z~Wl1mp-~4E7Uzz zVx#m%Yp21{#oSK#&2!*Hd;-)Kxj);4U!L+A#%T0g4qJCr4&?+}=f(}_0ef>*D$BXxV> zdw2UXmS{1te7h_GXfV-v@esKR(qkRi5s(#oIVNe}Q5gB(fMMYzpR;KRpb>3HW3|`P zJAN^*?bZ1ic~7c*Ab1@u-$l`$Swt zf{`KmLHCiP$iJsi&qKdOQNBdo`bx|0H_Lbl2d~jwJ?F&TscO)PW|I})gXpgDl-`$I zPuC$!%p4lS1}TX7hx8xV&-OEuK9mA_NCQT24e#zsQ$3vMYG%x>)p^SARC)5Z#cDje zMr`5bRUmMrU0hx9(3mWMnI&WT*p7ekzm?kwKt9b#-Y0Szz`=qV^<)_g{yiX$jt$G# zr955LSkO{YKo6qgB>>5$VyRN8RI^pg2#d-d=QB0XWaZH{=>tO!CS3dwJvgf2R0{1E zzuzl~6QiYCY^he~J&wY7z$3sJuhp@C2NTl>u;H{n-qakm^uHa;vqDX5uD?H5=-kfL z3tV|0zp~$In+w21msJ+-V|%>$C))!$R?TI{-(OL?+ zf%RVD6`EeuqbFbk2mY|vhb@!-kx-rsBUAS)f?#ykfMuZFZ+9b{ByV2kbH>+I*JIIH za=*V9e2*46eD~W!$b@Fzfa3EDxFg?NiCbA&P4qPhSsbULGgPybQxzSU*B3o`M{OUY z3A!jtE4}?uXyso(VbP1GbJU)OY?=nZ0(SJrr71MS0o>HU?gllm=a3^4-~X;J3dV3S zG&_)|c>8v2@jcTG0RO7GR{98Z!ht>3Vrud2-zcv3h;oP?G65}|w^kQzLhG5|1#(D; z7p_IKE0@gYczfYj0&MzSai`6_ z0()P-?pHIS)YRYvkrZ!|?OqRv-n*>Y{e)a-lq1wd!w?{Xa+HW2`CCj-iCE7BHPxH9 zAqJE2ruIdlceaV4RX#YR1XHk3Lg(0eBgP5uqMzsK6KDIFr)We9Zg|(gk z0+v^f8!it?2xagIMUb@$C5j&SY=OzED(vk}IDmva9DjoX_g@eGmCpxMsY*{XrChy5 zN>On;-nn;Nx7wZi-o8U$@rMJ;k($l%r2hVgPBVLLPsZb&r6tO_Dv+ioWXejC$`0(P zvBW<9%J-#?y)oP~Q)9Tz~9OE*iS&&9?cInUF`6I3}Dxw$082&^1+YlP2r2H?n`+Yf`G{+CmtV*yo%4qwX~me zd~W!8T%3-P4mNw%*HXWp!ZMd|b@xTr{IKbfugq# zS!Mu910O#y6$UV+JDk*tPVMhQdu{N8Ua3j@Gh$qm1s=I#ollhlMyu<%iG>t)k2p#_ z6k3TRDDN+W1V}&IChnV_L1OKeMrmIey+}%21jar3YR_JZyrNiIx)U+J;@%IOZjPV( z-vCEVc=rDAd!wD+p!U+oqr7Z!P2opXX;oZMu#lztEu~!T@+gKZfW*P2X7+yrS9GFS z^%w{Rmz1m?3lmcoOrU|Vso4of7kL2iD2umTB;((Q7g~;{M>WOLPS{Ii^r z(HYlo$Iar^n_Qt8usJ^E@yT2uaf1eh8uM3gsv|R|SC;=;h+0mKbjaxPD+t6RU zFSz)JRc(Usb@n3=Y{_On7Z8TWDX^1cES8a?DMH;*J9$GEw}9ANMq-RYv;gc_-@fp4>GEXm+Dr#=4l?Dupy z4QzOhyFiHc(RGq?gSB@}cfYQ#tZGvM`}!x-akIF-FXtM5WCc9W#M0&uMF_0{Th>{U zKz?9#u@NmKrdACj4j^W0;(Xgzk=aXKOe_l8V< zE=-}8jP9A3w{NgvK8|xxHuNNQV;T-P#ZuCuJYI36*^x$-Ttfv@8F2@Pc=euXZ&ek+ zQqW7;3Zy*$0SyDnS1`MR_w)P27{!Ksm_n+JmUfmzY0=*=1fm@w-)fEm!P+J9dfW)M zKFMv9SdXK)Y{aVIxq`-4Pvgb7=ZPnni@=ztwl9a;G7RIa9PVesM0e`Ho@?ZX-xAR$ z8J*ymDrghLyBlN{38 zMriMU9UU>Z?HC3rRL^}&0}5gFmhCuH5THD@VgQK`qpHXl^-?YeE0+yGq1z$YWY<_2 zHijUO4uSR2pi5K`dHl+&bH*%U9RRM=jk)T%^POtH0y5BEWxj}wGg~_5by)|MpLmd$ z;d*SOJ+MY8vDkv*1z+EDzKU!M*%~!e@sG&WO~dgh$(M~XKSkwX(U{od`L?%P<$hEc@vClba$%X^(D zLgfVi?uzE!ZhxKKv(Vv}_{iTxLD8|ib1fE(L4oX3Jay}$y%8=0sTQSfZ@+vxwXWbE zybki~tzkD3ypNEL_xM9NE~@N)mwlQvVj){lQuKucrH=&QKn5j&?B~smu8nD2Bu;ui z<-R?x$Z=dXAZOTKC__j;c$}@P>aBBCRUb%kG3Uu4Vq+L4U+Q5$yF~856llF zoc~T|$aP_aK>^!}LizpIWvN}MEPr;iNc^F+I!&%mw+M0J1$t@tysLfV?>GE>{C{+jA7Dsdl2_mVeDWGb7&MOZnt2u0`giG2Y>n-_B%XMS7U9!w zm~T&VfPuEP6(F9eo7i$-siO%Z*86WM2-s_MKuu1|s8dbWM~~`%v^zIgprvvI7qFn! z0T~DyGy2s|stMo_kiYGunzwX$GWaEtXvnSzGB*Nw<`+|jWgS(twTpQ<3nIPoGxB%A zWAN*k+}LX7!_s@U-c#KH1_iZ_xSuz*vTQsg8!}Pn(O+KJMjUkqq|CyW12Z)nM=TdYlbLDT3W= zYR=xtQfxJTz#_x&&*&lOQqWt4Ftzp$sQ_%}v#?V29OCTR8?+_?zzh9!(%BmO_z$=6 z{YI#)AHIwjN}T}7IbPLW95gm zHL~@|#OFGZ#vat2E|h7HxnYXE=m0NTJ`I2Pjy`)fiDad#WW zMex}{m&CH>nor|pFyf2y-H3h7B*PdIO(M?Sk?{aS2kgGVl=w1}IH(rJulKs!sPf z27Md?!KTTZw*vYB3?UR zAVY>uxDlI9J^iT%d|oS zE?yQDI0I|(Pk;0(8Vk8XqXK+DibZr+NN>#E_m2yyM`?oU1)ZVo`DR<8EZo{KW|8j7(rRQlYn13sy4dv){v8#b|c^XyVc*R>WyzRDMD zockA`jWWVCefpRCr-WaE(wbI1i}J$nlJSgU_vsJvM}XCz<>ZLiy>!5YYxBjov<}cu zkCIP4gO_aN$a`I%gv7nTwvjs*%wSE@}@$Q3Fm?gj6mMZ~XOTEgqW8!Z&2An82F@!DS z#P~fQ0=?wX8|0s_kvmJ;ga#VNpR_FfDV8zvHJ5*Nc0PO4((|ih0!6<~zWieGIC+vO zG<6qsFb>q?(Juy&4z9Bne)>WR4h#6;EvAdx4qP8dd2~0i`%hlB#PQ6YaeSL<>6s7V zgiZj}ZhKrN0K2+&e6!YCgxk1N6e-XATe-p%F7hUzMrsgNZh;YLh*!c|{sGmoEWxw*Hl$2rHO}UOG37-zzlN)s@zQ zYsH&dBhAzsmpTdyJ^D!NV6Nml9Vy$#Za^`hd<)@J-N5icz zC<9`B4RtI%w>Aa1xCEkdGqyjO%ltj#vtWH~?a@O49_1Wm*JE%@&ffet%YV%!A$fbt z`HHH*;e^rGzvp43ClawAYFn%H_NpB11#V)P_!DUVj&20S=1YLe5l3&$FM+u-LTs_& z)0YD;*0%Vc@~b-dq))uAz0r)^r%fskd2QSbtlu=8POmE{-6XzAPQz8Cjp?rc|GK)) zsHV0h97Lr_5k&;4N)1JnD*d9UC`F_Rf<`0{6c4{v>Oilrwww%s1cc*?W$ywcxG|Ud}2yn9==XwRqC#&Bb9Z zzVyMKo}TYsgzqtL;(YNasrg@$M<;W6=hebRc_>$OT0l`U`!A@0OI_Me&~nLhWmKh7 z_y_FTTbj7VoFq{Aw#)WH@P|bv-+f&UBQHA^KlfBN2%RW2Vwhyp%R`4mTPb>kKBwlu zb#$D{3qp=zsn)J2$!dt3;SsUX_z`}!7tURsqnLAxUpk%q5z#i^I4?gD)y^`nAhct?!F8O4rhok16RN>z^%+(z{ za(+>5kycD>4cdG_t?{FKyi2LmPrM7;=umYRU_?pK752smCFLLJHiUj!!NstV+O45w zYxqJA@4rfZ>UA@mUZm8p^?+a2d}1Qk!g{2ggY=qTUK)gQ^bW7b(u2p!i>CxxL(Jm!9yTNuZ4Ee(VBl42?2B39GOsO%&$uu<$+zgHXNSRKxe z(PFIX5x0Y;tk*uC=qqu4!~)TbpDsMby1oUEENulA{f$TH6?1!UfI&wmz?wXosux7T7D@ zIP`x!ON3qRhgOuIZWMMq5k#yZ{S8X3nZi6%IslrJO&l{7K&ObJd>k9IFjA#=q_SHF z9T@gfs{S}p1i~RX(!*c8^7#JNKZ>cSZ97W@dZvEDIrj={K%i-LRJG5c^C5Q{Mfp+n z4YKc7>uZmhKKCeFoYt)qf((W0+7!5-)P0ov92ZJ!U;pFWPqQH35S{10cZcaky$N?= z3UHs(fp+|ATNN<0#ao<@WAX4FsVFKe|FPzzXztT{UpgBqvFOGo*%xH!UwQCrqdt%Nj4m^xo>Qy zBtnxKPie4S3=3Rw9Es1)v>iyw-NtrYkAf>jJ)6mt3qc;9|8m0w4V`2xC4#Os5a4$K zFZcBc!FbT+zCC7B^%JT3VfIf8gNDK(04Xg+0XB%$>H5P$3M2j!$AL8r*f&yhDv3mb z&PH&l=RM4lIBCTWc(R|CZT)g9{x8mv;K7qIoZBn$kPDE_QE{)vpnkJlabRC)0%ZBF z_@kA!);G}MKPh}*%^m1@Oa@HBpY0N3dh&m~K83e)JB=Wn)6ug@TQ&0C_7>nrZ5Ckg*S?B{#J5^y+&E)R==Q|G)3zu-fsdx9;y06@?rbD<`$Z^a1O~P;Lvp# z9wKoLS5~Bz#woPpk}?4<%6+?vMKITsH4Rg?q!d3(nU3eSjK!JhY2 zWO)f-*IY#VmIAX2ctT}xcU~L!27O+^Zr@&HHO)Hti%ocBn{Bn^A!gk`;XS_OWh6$! z@T@M+JqJy!RN`27Wvi+yTV{eAOgfg)@e34Pv;*vp!4!JIEw}+-^5CIr<3NTmKssS- zWfI+7q+JX!32hFRgodcVhtfvZb*nDKL-Dow1R~=0Q|9X!;t^1o_olmvrlkN z!n;oTh~F?QnqYY@;Kt6JOb#)B?jf;16~a)?;~nLA0M>f*U+r|*kI+sZMQf&&MGS>6 zmyXO30LZr=5yK?uSEsIf`O(Ws-Cp)~M8v&clZOTuBTsm?CwNk(pX$>#VQdo7c{7MZ zNpXbcjaCZ)2!+MP6m{~yTCy8 z@gDszQWa63CS1x>#DY6IIu=m3S~(G~&9Um~9={$(D72`3=zY%u7S{-fYJq!ETG&-s zpsadF-s9;jNT5-o#{_ZldcRo`GcNQna!8N|neco}q5NeVw=zf;eUbQ6p7gz49Pj70_K60?w(?$HN0Q-yJt`?bi-zj!yPZr_ zHoApw-{slb{AT##SG(;gS)wpk zc_5omd)m3+^ocGW)`lZ85M89}{tS>3+WpOV%?JsVjty?qMpu}+b%C*w>UBF}=DjH+fO7&dMMoGg1p<*h8T24}z>zY(J;yeqr>CiB6C^v~ zt9*EVBL6$Xf(arxZr5XgdUtFWv!~W%>q=llF`w7Trg4A|DPFuUDYM|d(Dr(cWOC8C zi*C7`5c5s3&K)O)0F^ZKPMVv5k^_?32Yb1No-ju{`z{G7qM-GXagXQ;fAaT*wEnA; z@HTS``G0P58KLg6=28Jv2fuKzT52AD=D_wutZ<+)7Y|Vc5vZZEcJ3qI@eHxk3db=T`7d_qi^?g)gRFBqUE8wZVNk?Av_nb~vIF3y`;9rgDD6?}T5 z-rbn1>5(o>0SFTJKF|xC1U#sXB%Bj@2a z`3rhSESHtSp*Yk|CF>?xmza!E}cAE>ljqhEfP5f?# zyPzL(Zz;#)72`lzc9grpKVE82G68JI%&s7EDq7)9vu~Gn52Hdu_b5d1y*;XD(uvvc z`K=S3z^gJ9)__*>pclPts2^z>JI0a90%}kkZqyD82q-+^d=^Oi{&#YeEvj2x*^}if zy%=(%vU1(8Q`-&X+aj@^-*}Gb|7~5#Y+SHGrTzH}u}s z6-vnKeoWvd^5>T$2Paab7@#oQ1)7rp#7>*OrVIGNs^~F5`CKeeZ7^fZhVdMIYv(0Q zs(TrGs)0WuOlxO{(<7;9@lD?|Qzs+=f}W6NUS!suV)1=A#B)kh~LV~03*DxW`MOyl;{#iW zym?tn&h}Onw^Pih{$aN`+k6{t9sal8`l00f1E8XJK>X76uSbKq4RnC`G7Dlfx&om> z3Y{nrjz&?>qj%4y{QP~X{gusLY(GEfzD4J|QI&9Sm z-fAG^8!1LmeFMS2O`4i7nq&2P{dJm%f(5cE2l z(sgL?0dCrok`|TntW_qud;5!%Q9SUBO`aVwDqQ_%Nj5XU`(`39wD{=fKvqP5()kH*hKS0@T Y3F-u5#qRh*3wAD<7@J=xHgbOOUuK5BtpET3 literal 0 HcmV?d00001 -- 2.47.2 From a9e3360ee258e4d48c8dbe3a55468409bb6ee0f7 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 20:04:08 +0100 Subject: [PATCH 24/45] First working (TM) template code ref #5 --- src/templates/sponsoring_contract.html | 122 ++++++++++++++++++++----- 1 file changed, 101 insertions(+), 21 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index ec43220..84799a6 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -1,33 +1,113 @@ - - - Sponsoring contract - - - - -

- -
-
-

Sponsoringerklärung

-

Bitte in DRUCKBUCHSTABEN schreiben

+ + + + Sponsoring contract + + + + + +
+ +
+
+
+

Sponsoringerklärung

+
+
+

Bitte in DRUCKBUCHSTABEN schreiben +

+
-
+

Ich/Wir sind bereit anlässlich des Lauf für Kaya! 2021

+
- Vorname: Peter
+ Vorname: Peter

Vorname

- ID123
-

ID

+ 1233456789 +

ID

- . + CODE Here
+
+
+
+ Nachname: Peter +

Nachname

-
+
+ 1233456789 +

Team/Klasse

+
+
+

mit einem Betrag von _____€ pro gelaufenem Kilometer zu unterstützen.

+
+
+ Nachname: Peter +

Nachname

+
+
+ Vorname: Peter +

Vorname

+
+
+

Adresse (Sponsor)

+

(Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - + Spendenquittungen können erst ab einem Gesamtbetrag von 10€ ausgestellt werden)

+
+
+ An der Gesamtschule +

Straße

+
+
+ 1234 +

Hausnummer

+
+
+
+
+ 91074 +

Postleitzahl

+
+
+ Herzogenaurach +

Stadt

+
+
+
+
+ 01.01.1111, EineTolleUnterschrift +

Postleitzahl

+
+
+ Herzogenaurach +

Stadt

+
+
-
- +
+
+ + \ No newline at end of file -- 2.47.2 From c617c40e9d7e03382f647eafde9ff458db3c6c15 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 20:15:33 +0100 Subject: [PATCH 25/45] Working Styleing ref #5 --- src/templates/sponsoring_contract.html | 120 ++++++++++++++----------- 1 file changed, 67 insertions(+), 53 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 84799a6..b0c275e 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -21,12 +21,18 @@ .column { margin-bottom: -20; } + + .detail { + padding: 0rem 0.5rem 1rem 0.5rem; + } + {{#each runners}}
- +
@@ -38,76 +44,84 @@

Ich/Wir sind bereit anlässlich des Lauf für Kaya! 2021

-
-
- Vorname: Peter -

Vorname

+
+
+
+ Vorname: Peter +

Vorname

+
+
+ 1233456789 +

ID

+
+
+ CODE Here +
-
- 1233456789 -

ID

-
-
- CODE Here -
-
-
-
- Nachname: Peter -

Nachname

-
-
- 1233456789 -

Team/Klasse

+
+
+ Nachname: Peter +

Nachname

+
+
+ 1233456789 +

Team/Klasse

+

mit einem Betrag von _____€ pro gelaufenem Kilometer zu unterstützen.

-
-
- Nachname: Peter -

Nachname

-
-
- Vorname: Peter -

Vorname

+
+
+
+ Nachname: Peter +

Nachname

+
+
+ Vorname: Peter +

Vorname

+

Adresse (Sponsor)

(Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - Spendenquittungen können erst ab einem Gesamtbetrag von 10€ ausgestellt werden)

-
-
- An der Gesamtschule -

Straße

+
+
+
+ An der Gesamtschule +

Straße

+
+
+ 1234 +

Hausnummer

+
-
- 1234 -

Hausnummer

+
+
+ 91074 +

Postleitzahl

+
+
+ Herzogenaurach +

Stadt

+
+
-
- 91074 -

Postleitzahl

+
+ Herzogenaurach, 01.01.0101 +

Ort, Datum

-
- Herzogenaurach -

Stadt

-
-
-
-
- 01.01.1111, EineTolleUnterschrift -

Postleitzahl

-
-
- Herzogenaurach -

Stadt

+
+ U̵̢̮͑̀n̵̗͌ẗ̵̢́̅e̶̻̊͋r̵̞̐͝s̴̭̓͂c̷͕͌̐h̷̥̩̄r̷̬̃i̴̙͓͠f̵̱͒͊t̷̩̤̀  𝓤𝓷𝓽𝓮𝓻𝓼𝓬𝓱𝓻𝓲𝓯𝓽 +

Unterschrift

-
+ {{/each}} \ No newline at end of file -- 2.47.2 From e345c36dd0b03f276259521aebf423853a81a04d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 20:33:21 +0100 Subject: [PATCH 26/45] Added i18n strings ref #5 --- src/templates/sponsoring_contract.html | 39 +++++++++++++------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index b0c275e..5f17d30 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -36,22 +36,23 @@
-

Sponsoringerklärung

+

{{__ "sponsoring_title"}}

-

Bitte in DRUCKBUCHSTABEN schreiben +

{{__ "please_use_blockletters"}}

-

Ich/Wir sind bereit anlässlich des Lauf für Kaya! 2021

+

{{__ "sponsoring_subtitle"}}

- Vorname: Peter -

Vorname

+ {{this.firstname}} + {{this.middlename}} +

{{__ "firstname"}}

- 1233456789 + {{this.id}}

ID

@@ -60,12 +61,12 @@
- Nachname: Peter -

Nachname

+ {{this.lastname}} +

{{__ "lastname"}}

- 1233456789 -

Team/Klasse

+ {{this.group.name}} +

{{__ "group"}}

@@ -74,36 +75,36 @@
Nachname: Peter -

Nachname

+

{{__ "lastname"}}

Vorname: Peter -

Vorname

+

{{__ "firstname"}}

-

Adresse (Sponsor)

+

{{__ "address"}} ({{__ "sponsor"}})

(Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - Spendenquittungen können erst ab einem Gesamtbetrag von 10€ ausgestellt werden)

An der Gesamtschule -

Straße

+

{{__ "street"}}

1234 -

Hausnummer

+

{{__ "house_number"}}

91074 -

Postleitzahl

+

{{__ "postalcode"}}

Herzogenaurach -

Stadt

+

{{__ "city"}}

@@ -111,12 +112,12 @@
Herzogenaurach, 01.01.0101 -

Ort, Datum

+

{{__ "location"}}, {{__ "date"}}

U̵̢̮͑̀n̵̗͌ẗ̵̢́̅e̶̻̊͋r̵̞̐͝s̴̭̓͂c̷͕͌̐h̷̥̩̄r̷̬̃i̴̙͓͠f̵̱͒͊t̷̩̤̀  𝓤𝓷𝓽𝓮𝓻𝓼𝓬𝓱𝓻𝓲𝓯𝓽 -

Unterschrift

+

{{__ "signature"}}

-- 2.47.2 From 784d7c656fd2dfc726722459f3ccb7612021b882 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 20:33:47 +0100 Subject: [PATCH 27/45] =?UTF-8?q?Added=20a=20bunch=20of=20english=20and=20?= =?UTF-8?q?german=20translations=20=F0=9F=8C=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref #5 --- src/locales/de.json | 15 ++++++++++++++- src/locales/en.json | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index b9f7fbb..1bd446a 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -1,5 +1,18 @@ { "firstname": "Vorname", "lastname": "Nachname", - "group": "Team" + "group": "Team/Klasse", + "id": "ID", + "sponsoring_title": "Sponsoringerklärung", + "please_use_blockletters": "Bitte in DRUCKBUCHSTABEN schreiben", + "address": "Adresse", + "sponsor": "Sponsor", + "street": "Straße", + "house_number": "Hausnummer", + "postalcode": "Postleitzahl", + "city": "Stadt", + "date": "Datum", + "signature": "Unterschrift", + "location": "Ort", + "sponsoring_subtitle": "Ich Bin" } \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json index 70ae0fd..0d50c5c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,6 +1,16 @@ { - "firstname": "firstname", - "lastname": "lastname", - "group": "group", - "id": "ID" + "firstname": "First name", + "lastname": "Last name", + "please_use_blockletters": "Please write in BLOCK LETTERS.", + "sponsoring_title": "Sponsoring contract", + "group": "Team/class", + "address": "Address", + "sponsor": "sponsor", + "street": "Street", + "house_number": "House number", + "postalcode": "Postal code", + "city": "City", + "location": "Location", + "date": "date", + "signature": "Signature" } -- 2.47.2 From f755f4f9fb1463af6bec3cf73b7fabf95ef3fb2e Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 21:15:48 +0100 Subject: [PATCH 28/45] Added full interpolation support to the i18n ref #5 --- src/PdfCreator.ts | 4 +++- src/locales/de.json | 4 +++- src/locales/en.json | 7 +++++-- src/templates/sponsoring_contract.html | 7 +++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index aed8070..c527ab9 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -13,6 +13,7 @@ import { Runner } from './models/Runner'; export class PdfCreator { private templateDir = path.join(__dirname, '/templates'); private browser; + private static interpolations = { eventname: "Lauf für Kaya! 2021", sponsoring_receipt_minimum_amount: '10', currency_symbol: "€" } /** * Main constructor. @@ -30,7 +31,7 @@ export class PdfCreator { }); Handlebars.registerHelper('__', function (str) { - return i18next.t(str).toString(); + return i18next.t(str, PdfCreator.interpolations).toString(); } ); puppeteer.launch({ headless: true }).then(browser => { @@ -48,6 +49,7 @@ export class PdfCreator { const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); const result = template({ runners }) + console.log(template) return await this.renderPdf(result, { format: "A5", landscape: true }); } diff --git a/src/locales/de.json b/src/locales/de.json index 1bd446a..0157138 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -14,5 +14,7 @@ "date": "Datum", "signature": "Unterschrift", "location": "Ort", - "sponsoring_subtitle": "Ich Bin" + "sponsoring_subtitle": "Ich/Wir sind bereit anlässlich des {{eventname}}", + "sponsoring_address_condition": "Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - Spendenquittungen können erst ab einem Gesamtbetrag von {{sponsoring_receipt_minimum_amount}}{{currency_symbol}} ausgestellt werden", + "sponsoring_amount_per_distance": "mit einem Betrag von _____{{currency_symbol}} pro gelaufenem Kilometer zu unterstützen." } \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json index 0d50c5c..084afc8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -12,5 +12,8 @@ "city": "City", "location": "Location", "date": "date", - "signature": "Signature" -} + "signature": "Signature", + "sponsoring_address_condition": "You have to provide an address if you want a donation receipt - Donation receipts can't be issued for total donation amounts under {{sponsoring_receipt_minimum_amount}}{{currency_symbol}}", + "sponsoring_subtitle": "On the ocation of the {{eventname}} I/We want to support", + "sponsoring_amount_per_distance": "with the amount of _____{{currency_symbol}} per kilometer run." +} \ No newline at end of file diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 5f17d30..796f05c 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -43,7 +43,7 @@

-

{{__ "sponsoring_subtitle"}}

+

{{__ "sponsoring_subtitle"}}

@@ -70,7 +70,7 @@
-

mit einem Betrag von _____€ pro gelaufenem Kilometer zu unterstützen.

+

{{__ "sponsoring_amount_per_distance"}}

@@ -84,8 +84,7 @@

{{__ "address"}} ({{__ "sponsor"}})

-

(Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - - Spendenquittungen können erst ab einem Gesamtbetrag von 10€ ausgestellt werden)

+

({{__ "sponsoring_address_condition"}})

-- 2.47.2 From 47a05facb33c178e9bf3f99c25049abc010361c4 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 21:30:18 +0100 Subject: [PATCH 29/45] Moved pdf creatior initialization to new function ref #5 --- src/PdfCreator.ts | 17 ++++++++++------- src/controllers/PdfController.ts | 5 +---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index c527ab9..9c9cdff 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -20,7 +20,13 @@ export class PdfCreator { * Initializes i18n(ext), Handlebars and puppeteer. */ constructor() { - i18next + this.init().then(() => { + return this; + }) + } + + public async init() { + await i18next .use(Backend) .init({ fallbackLng: 'en', @@ -29,14 +35,12 @@ export class PdfCreator { loadPath: path.join(__dirname, '/locales/{{lng}}.json') } }); - Handlebars.registerHelper('__', + await Handlebars.registerHelper('__', function (str) { return i18next.t(str, PdfCreator.interpolations).toString(); } ); - puppeteer.launch({ headless: true }).then(browser => { - this.browser = browser; - }); + this.browser = await puppeteer.launch({ headless: true }); } /** @@ -49,7 +53,6 @@ export class PdfCreator { const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); const result = template({ runners }) - console.log(template) return await this.renderPdf(result, { format: "A5", landscape: true }); } @@ -59,7 +62,7 @@ export class PdfCreator { * @param options Puppeteer PDF option (eg: {format: "A4"}) */ public async renderPdf(html: string, options): Promise { - const page = await this.browser.newPage(); + let page = await this.browser.newPage(); await page.setContent(html); const pdf = await page.pdf(options); await page.close(); diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 0190235..0f6ac16 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -10,10 +10,7 @@ import { PdfCreator } from '../PdfCreator'; */ @JsonController() export class PdfController { - private pdf: PdfCreator; - constructor() { - this.pdf = new PdfCreator(); - } + private pdf: PdfCreator = new PdfCreator(); @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.
You can choose your prefered locale by passing the 'locale' query-param." }) -- 2.47.2 From ee8ba99cc7778f89a8bb99400c7d1cf1a12898f7 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 21:37:56 +0100 Subject: [PATCH 30/45] Fixed the controller not waiting for initialization ref #5 --- src/PdfCreator.ts | 8 +++++--- src/controllers/PdfController.ts | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 9c9cdff..0f74596 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -20,11 +20,13 @@ export class PdfCreator { * Initializes i18n(ext), Handlebars and puppeteer. */ constructor() { - this.init().then(() => { - return this; - }) + this.init(); } + /** + * Main constructor. + * Initializes i18n(ext), Handlebars and puppeteer. + */ public async init() { await i18next .use(Backend) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 0f6ac16..b99e486 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -11,10 +11,15 @@ import { PdfCreator } from '../PdfCreator'; @JsonController() export class PdfController { private pdf: PdfCreator = new PdfCreator(); + private initialized: boolean = false; @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.
You can choose your prefered locale by passing the 'locale' query-param." }) async generateContracts(@Body({ validate: true }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string) { + if (!this.initialized) { + await this.pdf.init(); + this.initialized = true; + } if (!Array.isArray(runners)) { runners = [runners]; } -- 2.47.2 From 388d8a2dc6ee06d39e621e1e45ae595dae587483 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 21:48:47 +0100 Subject: [PATCH 31/45] Removed fullname from groups (to be renabled later) ref #5 --- src/models/RunnerGroup.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/models/RunnerGroup.ts b/src/models/RunnerGroup.ts index e84053f..0b9b109 100644 --- a/src/models/RunnerGroup.ts +++ b/src/models/RunnerGroup.ts @@ -24,13 +24,5 @@ export class RunnerGroup { */ @IsObject() @IsOptional() - parentGroup?: RunnerGroup - - /** - * Returns the groups full name in the format: org.name/team.name (or just org). - */ - public get fullName(): string { - if (!this.parentGroup) { return this.name; } - return `${this.name}/${this.parentGroup.fullName}`; - } + parentGroup?: RunnerGroup; } -- 2.47.2 From c07319b250db9452f6122e797b6059151031e2a9 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sat, 6 Feb 2021 22:02:16 +0100 Subject: [PATCH 32/45] Now awaiting language change ref #5 --- src/PdfCreator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 0f74596..97bb157 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -51,7 +51,7 @@ export class PdfCreator { * @param locale The locale used for the contracts (default:en) */ public async generateSponsoringContract(runners: Runner[], locale: string = "en"): Promise { - i18next.changeLanguage(locale); + await i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); const result = template({ runners }) -- 2.47.2 From 42443af734ccc9ce202aec045a07775f4a054b92 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 12:32:23 +0100 Subject: [PATCH 33/45] Added automatic img to base64 conversion ref #5 --- package.json | 5 ++++- src/PdfCreator.ts | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 00bd151..cfbd746 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,8 @@ "license": "CC-BY-NC-SA-4.0", "dependencies": { "@odit/class-validator-jsonschema": "^2.1.1", + "axios": "^0.21.1", + "cheerio": "^1.0.0-rc.5", "class-transformer": "0.3.1", "class-validator": "^0.13.1", "consola": "^2.15.0", @@ -48,6 +50,7 @@ "handlebars": "^4.7.6", "i18next": "^19.8.7", "i18next-fs-backend": "^1.0.8", + "mime-types": "^2.1.28", "puppeteer": "^7.0.1", "reflect-metadata": "^0.1.13", "routing-controllers": "^0.9.0-alpha.6", @@ -77,4 +80,4 @@ "publish": false } } -} \ No newline at end of file +} diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 97bb157..6b81587 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -1,11 +1,13 @@ +import axios from 'axios'; +import cheerio from "cheerio"; import fs from "fs"; import Handlebars from 'handlebars'; import i18next from "i18next"; import Backend from 'i18next-fs-backend'; +import mime from "mime-types"; import path from 'path'; import puppeteer from "puppeteer"; import { Runner } from './models/Runner'; - /** * This class is responsible for all things pdf creation. * This uses the html templates from src/templates. @@ -58,12 +60,47 @@ export class PdfCreator { return await this.renderPdf(result, { format: "A5", landscape: true }); } + /** + * Converts all images in html to base64. + * Works with image files in the template directory or images from urls. + * @param html The html string whoms images shall get replaced. + */ + public async imgToBase64(html): Promise { + const $ = cheerio.load(html) + $('img').each(async (index, element) => { + let imgsrc = $(element).attr("src"); + const img_type = mime.lookup(imgsrc); + + if (!(img_type.includes("image"))) { + throw new Error("File is not image mime type"); + } + + let image; + if (imgsrc.startsWith("http")) { + image = (await axios.get(imgsrc)).data; + image = Buffer.from(image).toString('base64'); + } + else { + if (imgsrc.startsWith("./")) { + imgsrc = imgsrc.replace("./", ""); + } + image = fs.readFileSync(`${this.templateDir}/${imgsrc}`, { encoding: "base64" }); + } + + image = `data:${img_type};base64,${image}` + $(element).attr("src", image) + }) + + return $.html(); + } + /** * This method manages the creation of pdfs via puppeteer. * @param html The HTML that should get rendered. * @param options Puppeteer PDF option (eg: {format: "A4"}) */ public async renderPdf(html: string, options): Promise { + html = await this.imgToBase64(html); let page = await this.browser.newPage(); await page.setContent(html); const pdf = await page.pdf(options); -- 2.47.2 From e401d0ec7219e88fbb277b2dcf456a22dae0d1e5 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 12:32:54 +0100 Subject: [PATCH 34/45] Removed base64 image ref #5 --- src/templates/sponsoring_contract.html | 107 +++++++++++-------------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index 796f05c..bdda7d5 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -21,19 +21,14 @@ .column { margin-bottom: -20; } - - .detail { - padding: 0rem 0.5rem 1rem 0.5rem; - } {{#each runners}}
- -
+ +

{{__ "sponsoring_title"}}

@@ -44,67 +39,61 @@

{{__ "sponsoring_subtitle"}}

-
-
-
- {{this.firstname}} - {{this.middlename}} -

{{__ "firstname"}}

-
-
- {{this.id}} -

ID

-
-
- CODE Here -
+
+
+ {{this.firstname}} + {{this.middlename}} +

{{__ "firstname"}}

-
-
- {{this.lastname}} -

{{__ "lastname"}}

-
-
- {{this.group.name}} -

{{__ "group"}}

-
+
+ {{this.id}} +

ID

+
+
+ CODE Here +
+
+
+
+ {{this.lastname}} +

{{__ "lastname"}}

+
+
+ {{this.group.name}} +

{{__ "group"}}

{{__ "sponsoring_amount_per_distance"}}

-
-
-
- Nachname: Peter -

{{__ "lastname"}}

-
-
- Vorname: Peter -

{{__ "firstname"}}

-
+
+
+ Nachname: Peter +

{{__ "lastname"}}

+
+
+ Vorname: Peter +

{{__ "firstname"}}

{{__ "address"}} ({{__ "sponsor"}})

({{__ "sponsoring_address_condition"}})

-
-
-
- An der Gesamtschule -

{{__ "street"}}

-
-
- 1234 -

{{__ "house_number"}}

-
+
+
+ An der Gesamtschule +

{{__ "street"}}

-
-
- 91074 -

{{__ "postalcode"}}

-
-
- Herzogenaurach -

{{__ "city"}}

-
+
+ 1234 +

{{__ "house_number"}}

+
+
+
+
+ 91074 +

{{__ "postalcode"}}

+
+
+ Herzogenaurach +

{{__ "city"}}


-- 2.47.2 From 1e67672ef0d28f94a50b0377cca8e8ff2a87e983 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 12:55:24 +0100 Subject: [PATCH 35/45] Added translation sorting secript ref # --- package.json | 5 +++-- sort_translations.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 sort_translations.js diff --git a/package.json b/package.json index cfbd746..814da18 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "nodemon src/app.ts", "build": "rimraf ./dist && tsc", "licenses:export": "license-exporter --markdown", - "release": "release-it --only-version" + "release": "release-it --only-version", + "translations:sort": "node sort_translations.js" }, "repository": { "type": "git", @@ -80,4 +81,4 @@ "publish": false } } -} +} \ No newline at end of file diff --git a/sort_translations.js b/sort_translations.js new file mode 100644 index 0000000..1120c86 --- /dev/null +++ b/sort_translations.js @@ -0,0 +1,16 @@ +const fs = require('fs'); +// get all language files +const files = fs.readdirSync('./src/locales/'); +files.forEach((f) => { + // read file as object + const unordered = JSON.parse(fs.readFileSync(`src/locales/${f}`)); + // order object by keys alpabetically A-Z + const ordered = Object.keys(unordered).sort().reduce((obj, key) => { + obj[key] = unordered[key]; + return obj; + }, {}); + // format output as json for commit diff compatibility + const out = JSON.stringify(ordered, 0, 4); + // write output file + fs.writeFileSync(`src/locales/${f}`, out); +}); -- 2.47.2 From 1962499d18685347302fd7d8491c6e3e7a355fcb Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 12:55:40 +0100 Subject: [PATCH 36/45] Sorted locales ref #5 --- src/locales/de.json | 36 ++++++++++++++++++------------------ src/locales/en.json | 34 +++++++++++++++++----------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index 0157138..7fd4d49 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -1,20 +1,20 @@ { - "firstname": "Vorname", - "lastname": "Nachname", - "group": "Team/Klasse", - "id": "ID", - "sponsoring_title": "Sponsoringerklärung", - "please_use_blockletters": "Bitte in DRUCKBUCHSTABEN schreiben", - "address": "Adresse", - "sponsor": "Sponsor", - "street": "Straße", - "house_number": "Hausnummer", - "postalcode": "Postleitzahl", - "city": "Stadt", - "date": "Datum", - "signature": "Unterschrift", - "location": "Ort", - "sponsoring_subtitle": "Ich/Wir sind bereit anlässlich des {{eventname}}", - "sponsoring_address_condition": "Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - Spendenquittungen können erst ab einem Gesamtbetrag von {{sponsoring_receipt_minimum_amount}}{{currency_symbol}} ausgestellt werden", - "sponsoring_amount_per_distance": "mit einem Betrag von _____{{currency_symbol}} pro gelaufenem Kilometer zu unterstützen." + "address": "Adresse", + "city": "Stadt", + "date": "Datum", + "firstname": "Vorname", + "group": "Team/Klasse", + "house_number": "Hausnummer", + "id": "ID", + "lastname": "Nachname", + "location": "Ort", + "please_use_blockletters": "Bitte in DRUCKBUCHSTABEN schreiben", + "postalcode": "Postleitzahl", + "signature": "Unterschrift", + "sponsor": "Sponsor", + "sponsoring_address_condition": "Muss ausgefüllt werden, wenn Sie eine Spendenquittung benötigen - Spendenquittungen können erst ab einem Gesamtbetrag von {{sponsoring_receipt_minimum_amount}}{{currency_symbol}} ausgestellt werden", + "sponsoring_amount_per_distance": "mit einem Betrag von _____{{currency_symbol}} pro gelaufenem Kilometer zu unterstützen.", + "sponsoring_subtitle": "Ich/Wir sind bereit anlässlich des {{eventname}}", + "sponsoring_title": "Sponsoringerklärung", + "street": "Straße" } \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json index 084afc8..317b9b6 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,19 +1,19 @@ { - "firstname": "First name", - "lastname": "Last name", - "please_use_blockletters": "Please write in BLOCK LETTERS.", - "sponsoring_title": "Sponsoring contract", - "group": "Team/class", - "address": "Address", - "sponsor": "sponsor", - "street": "Street", - "house_number": "House number", - "postalcode": "Postal code", - "city": "City", - "location": "Location", - "date": "date", - "signature": "Signature", - "sponsoring_address_condition": "You have to provide an address if you want a donation receipt - Donation receipts can't be issued for total donation amounts under {{sponsoring_receipt_minimum_amount}}{{currency_symbol}}", - "sponsoring_subtitle": "On the ocation of the {{eventname}} I/We want to support", - "sponsoring_amount_per_distance": "with the amount of _____{{currency_symbol}} per kilometer run." + "address": "Address", + "city": "City", + "date": "date", + "firstname": "First name", + "group": "Team/class", + "house_number": "House number", + "lastname": "Last name", + "location": "Location", + "please_use_blockletters": "Please write in BLOCK LETTERS.", + "postalcode": "Postal code", + "signature": "Signature", + "sponsor": "sponsor", + "sponsoring_address_condition": "You have to provide an address if you want a donation receipt - Donation receipts can't be issued for total donation amounts under {{sponsoring_receipt_minimum_amount}}{{currency_symbol}}", + "sponsoring_amount_per_distance": "with the amount of _____{{currency_symbol}} per kilometer run.", + "sponsoring_subtitle": "On the ocation of the {{eventname}} I/We want to support", + "sponsoring_title": "Sponsoring contract", + "street": "Street" } \ No newline at end of file -- 2.47.2 From 2d0b7ce79ed47d4827096a2bbccfe3bbcd061810 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 12:59:11 +0100 Subject: [PATCH 37/45] Formatting ref #5 --- src/PdfCreator.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 6b81587..5ea6871 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -107,5 +107,4 @@ export class PdfCreator { await page.close(); return pdf; } - } \ No newline at end of file -- 2.47.2 From 5e1252545b7eafeee6c3a1d67567d00e5d615d85 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 13:04:45 +0100 Subject: [PATCH 38/45] Removed the example data from the fill-in fields ref #5 --- src/templates/sponsoring_contract.html | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index bdda7d5..aba83be 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -50,7 +50,7 @@

ID

- CODE Here +
@@ -66,11 +66,11 @@

{{__ "sponsoring_amount_per_distance"}}

- Nachname: Peter +

{{__ "lastname"}}

- Vorname: Peter +

{{__ "firstname"}}

@@ -78,33 +78,32 @@

({{__ "sponsoring_address_condition"}})

- An der Gesamtschule +

{{__ "street"}}

- 1234 +

{{__ "house_number"}}

- 91074 +

{{__ "postalcode"}}

- Herzogenaurach +

{{__ "city"}}


- Herzogenaurach, 01.01.0101 +

{{__ "location"}}, {{__ "date"}}

- U̵̢̮͑̀n̵̗͌ẗ̵̢́̅e̶̻̊͋r̵̞̐͝s̴̭̓͂c̷͕͌̐h̷̥̩̄r̷̬̃i̴̙͓͠f̵̱͒͊t̷̩̤̀  𝓤𝓷𝓽𝓮𝓻𝓼𝓬𝓱𝓻𝓲𝓯𝓽 +

{{__ "signature"}}

-- 2.47.2 From 1ced0e317544217599a42c6b270c9136dc73676d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 13:11:54 +0100 Subject: [PATCH 39/45] Added option to generate empty sponsoring contracts ref #5 --- src/PdfCreator.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 5ea6871..00e850d 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -8,6 +8,7 @@ import mime from "mime-types"; import path from 'path'; import puppeteer from "puppeteer"; import { Runner } from './models/Runner'; +import { RunnerGroup } from './models/RunnerGroup'; /** * This class is responsible for all things pdf creation. * This uses the html templates from src/templates. @@ -53,6 +54,9 @@ export class PdfCreator { * @param locale The locale used for the contracts (default:en) */ public async generateSponsoringContract(runners: Runner[], locale: string = "en"): Promise { + if (runners.length == 1 && Object.keys(runners[0]).length == 0) { + runners[0] = this.generateEmptyRunner(); + } await i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); @@ -107,4 +111,21 @@ export class PdfCreator { await page.close(); return pdf; } + + /** + * Generates a new dummy runner with halfspaces for all strings. + * Can be used to generate empty sponsoring contracts. + * @returns A new runner object that apears to be empty. + */ + private generateEmptyRunner(): Runner { + let group = new RunnerGroup(); + group.id = 0; + group.name = " "; + let runner = new Runner(); + runner.id = 0; + runner.firstname = " "; + runner.lastname = " "; + runner.group = group; + return runner; + } } \ No newline at end of file -- 2.47.2 From 4f191dcb52cd727e34770ab4304937cd1e7e480d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 15:41:53 +0100 Subject: [PATCH 40/45] Expanded max request body size to 500mb ref #5 --- src/controllers/PdfController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index b99e486..9a0bb52 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -15,7 +15,7 @@ export class PdfController { @Post('/contracts') @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.
You can choose your prefered locale by passing the 'locale' query-param." }) - async generateContracts(@Body({ validate: true }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string) { + async generateContracts(@Body({ validate: true, options: { limit: "500mb" } }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string) { if (!this.initialized) { await this.pdf.init(); this.initialized = true; -- 2.47.2 From 785544ca16cd4907a378eb2d48e4269778e3dccc Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 16:04:56 +0100 Subject: [PATCH 41/45] Added pdf merging for big requests (over 100 runners) ref #5 --- package.json | 3 ++- src/PdfCreator.ts | 31 ++++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 814da18..d6dbe76 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "i18next": "^19.8.7", "i18next-fs-backend": "^1.0.8", "mime-types": "^2.1.28", + "pdf-lib": "^1.16.0", "puppeteer": "^7.0.1", "reflect-metadata": "^0.1.13", "routing-controllers": "^0.9.0-alpha.6", @@ -81,4 +82,4 @@ "publish": false } } -} \ No newline at end of file +} diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 00e850d..f07255f 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -6,6 +6,7 @@ import i18next from "i18next"; import Backend from 'i18next-fs-backend'; import mime from "mime-types"; import path from 'path'; +import { PDFDocument } from 'pdf-lib'; import puppeteer from "puppeteer"; import { Runner } from './models/Runner'; import { RunnerGroup } from './models/RunnerGroup'; @@ -45,7 +46,7 @@ export class PdfCreator { return i18next.t(str, PdfCreator.interpolations).toString(); } ); - this.browser = await puppeteer.launch({ headless: true }); + this.browser = await puppeteer.launch({ headless: true, args: ['--disable-dev-shm-usage', '--shm-size=10gb'] }); } /** @@ -57,6 +58,15 @@ export class PdfCreator { if (runners.length == 1 && Object.keys(runners[0]).length == 0) { runners[0] = this.generateEmptyRunner(); } + if (runners.length > 100) { + let pdfs: Buffer[] = new Array(); + let i, j; + for (i = 0, j = runners.length; i < j; i += 100) { + let chunk = runners.slice(i, i + 100); + pdfs.push(await this.generateSponsoringContract(chunk, locale)); + } + return await this.mergePdfs(pdfs); + } await i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); @@ -112,6 +122,25 @@ export class PdfCreator { return pdf; } + /** + * Merges multiple pdfs into one. + * @param pdfs The pdfs you want to merge as an buffer array. + * @returns The merged pdf as a buffer. + */ + private async mergePdfs(pdfs: Buffer[]): Promise { + const mergedPdf = await PDFDocument.create(); + + for (const pdfBuffer of pdfs) { + const pdf = await PDFDocument.load(pdfBuffer); + const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices()); + copiedPages.forEach((page) => { + mergedPdf.addPage(page); + }); + } + + return (await mergedPdf.save()); + } + /** * Generates a new dummy runner with halfspaces for all strings. * Can be used to generate empty sponsoring contracts. -- 2.47.2 From 06dedc0797b649f3fa8934f0d774ccae2b062849 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 16:07:38 +0100 Subject: [PATCH 42/45] Removed puppeteer args ref #5 --- src/PdfCreator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index f07255f..dd5f6b8 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -46,7 +46,7 @@ export class PdfCreator { return i18next.t(str, PdfCreator.interpolations).toString(); } ); - this.browser = await puppeteer.launch({ headless: true, args: ['--disable-dev-shm-usage', '--shm-size=10gb'] }); + this.browser = await puppeteer.launch({ headless: true }); } /** -- 2.47.2 From 4773a5f18c866b6e9d50b421d7917416860cb6b5 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 16:11:35 +0100 Subject: [PATCH 43/45] Added sentence about large requests to the /contracts openapi description ref #5 --- src/controllers/PdfController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index 9a0bb52..affc7a4 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -14,7 +14,7 @@ export class PdfController { private initialized: boolean = false; @Post('/contracts') - @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.
You can choose your prefered locale by passing the 'locale' query-param." }) + @OpenAPI({ description: "Generate Sponsoring contract pdfs from runner objects.
You can choose your prefered locale by passing the 'locale' query-param.
If you provide more than 100 runenrs this could take a moment or two (we tested up to 1000 runners in about 70sec so far)." }) async generateContracts(@Body({ validate: true, options: { limit: "500mb" } }) runners: Runner | Runner[], @Res() res: any, @QueryParam("locale") locale: string) { if (!this.initialized) { await this.pdf.init(); -- 2.47.2 From e92820e12f289b4fd28b4ebc985b5b711777fc35 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 16:28:26 +0100 Subject: [PATCH 44/45] Parellized the chunks ref #5 --- src/PdfCreator.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index dd5f6b8..efd360c 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -54,24 +54,29 @@ export class PdfCreator { * @param runner The runner you want to generate the contracts for. * @param locale The locale used for the contracts (default:en) */ - public async generateSponsoringContract(runners: Runner[], locale: string = "en"): Promise { + public async generateSponsoringContract(runners: Runner[], locale: string = "en"): Promise { if (runners.length == 1 && Object.keys(runners[0]).length == 0) { runners[0] = this.generateEmptyRunner(); } if (runners.length > 100) { - let pdfs: Buffer[] = new Array(); + let pdf_promises = new Array>(); let i, j; for (i = 0, j = runners.length; i < j; i += 100) { let chunk = runners.slice(i, i + 100); - pdfs.push(await this.generateSponsoringContract(chunk, locale)); + pdf_promises.push(this.generateSponsoringContract(chunk, locale)); } + const pdfs = await Promise.all(pdf_promises); return await this.mergePdfs(pdfs); } + console.log("triggered") await i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); const result = template({ runners }) - return await this.renderPdf(result, { format: "A5", landscape: true }); + console.log("finished: bars") + const pdf = await this.renderPdf(result, { format: "A5", landscape: true }); + console.log("finished: puppet") + return pdf } /** -- 2.47.2 From 140fda11cc88cb93218116d4cbdbf13c014a659d Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Sun, 7 Feb 2021 16:37:24 +0100 Subject: [PATCH 45/45] Added optimization args ref #5 --- src/PdfCreator.ts | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index efd360c..1155da0 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -32,6 +32,41 @@ export class PdfCreator { * Initializes i18n(ext), Handlebars and puppeteer. */ public async init() { + const minimal_args = [ + '--autoplay-policy=user-gesture-required', + '--disable-background-networking', + '--disable-background-timer-throttling', + '--disable-backgrounding-occluded-windows', + '--disable-breakpad', + '--disable-client-side-phishing-detection', + '--disable-component-update', + '--disable-default-apps', + '--disable-dev-shm-usage', + '--disable-domain-reliability', + '--disable-extensions', + '--disable-features=AudioServiceOutOfProcess', + '--disable-hang-monitor', + '--disable-ipc-flooding-protection', + '--disable-notifications', + '--disable-offer-store-unmasked-wallet-cards', + '--disable-popup-blocking', + '--disable-print-preview', + '--disable-prompt-on-repost', + '--disable-renderer-backgrounding', + '--disable-speech-api', + '--disable-sync', + '--hide-scrollbars', + '--ignore-gpu-blacklist', + '--metrics-recording-only', + '--mute-audio', + '--no-default-browser-check', + '--no-first-run', + '--no-pings', + '--no-zygote', + '--password-store=basic', + '--use-gl=swiftshader' + ]; + await i18next .use(Backend) .init({ @@ -46,7 +81,7 @@ export class PdfCreator { return i18next.t(str, PdfCreator.interpolations).toString(); } ); - this.browser = await puppeteer.launch({ headless: true }); + this.browser = await puppeteer.launch({ headless: true, args: minimal_args }); } /** @@ -58,24 +93,21 @@ export class PdfCreator { if (runners.length == 1 && Object.keys(runners[0]).length == 0) { runners[0] = this.generateEmptyRunner(); } - if (runners.length > 100) { + if (runners.length > 50) { let pdf_promises = new Array>(); let i, j; - for (i = 0, j = runners.length; i < j; i += 100) { - let chunk = runners.slice(i, i + 100); + for (i = 0, j = runners.length; i < j; i += 50) { + let chunk = runners.slice(i, i + 50); pdf_promises.push(this.generateSponsoringContract(chunk, locale)); } const pdfs = await Promise.all(pdf_promises); return await this.mergePdfs(pdfs); } - console.log("triggered") await i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8'); const template = Handlebars.compile(template_source); const result = template({ runners }) - console.log("finished: bars") const pdf = await this.renderPdf(result, { format: "A5", landscape: true }); - console.log("finished: puppet") return pdf } -- 2.47.2