diff --git a/src/controllers/PdfController.ts b/src/controllers/PdfController.ts index f3a1009..74659f3 100644 --- a/src/controllers/PdfController.ts +++ b/src/controllers/PdfController.ts @@ -18,7 +18,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.
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, @QueryParam("codeformat") codeformat: string) { + async generateContracts(@Body({ validate: true, options: { limit: "500mb" } }) runners: Runner[], @Res() res: any, @QueryParam("locale") locale: string, @QueryParam("codeformat") codeformat: string) { if (!this.initialized) { await this.pdf.init(); this.initialized = true; @@ -26,6 +26,7 @@ export class PdfController { if (!Array.isArray(runners)) { runners = [runners]; } + runners = this.mapRunnerGroupNames(runners) const contracts = await this.pdf.generateSponsoringContract(runners, locale, codeformat); res.setHeader('content-type', 'application/pdf'); return contracts; @@ -41,8 +42,37 @@ export class PdfController { if (!Array.isArray(cards)) { cards = [cards]; } + cards = this.mapCardGroupNames(cards); const contracts = await this.pdf.generateRunnerCards(cards, locale); res.setHeader('content-type', 'application/pdf'); return contracts; } + + private mapRunnerGroupNames(runners: Runner[]): Runner[] { + let response = new Array(); + for (let runner of runners) { + if (!runner.group.parentGroup) { + runner.group.fullName = runner.group.name; + } + else { + runner.group.fullName = `${runner.group.parentGroup.name}/${runner.group.name}`; + } + response.push(runner) + } + return response; + } + + private mapCardGroupNames(cards: RunnerCard[]): RunnerCard[] { + let response = new Array(); + for (let card of cards) { + if (!card.runner.group.parentGroup) { + card.runner.group.fullName = card.runner.group.name; + } + else { + card.runner.group.fullName = `${card.runner.group.parentGroup.name}/${card.runner.group.name}`; + } + response.push(card) + } + return response; + } } diff --git a/src/models/Runner.ts b/src/models/Runner.ts index e1c0efb..60a1c8b 100644 --- a/src/models/Runner.ts +++ b/src/models/Runner.ts @@ -13,7 +13,8 @@ import { IsPositive, - IsString + IsString, + ValidateNested } from "class-validator"; import { RunnerGroup } from './RunnerGroup'; @@ -53,6 +54,7 @@ export class Runner { * The runner's group. */ @IsObject() + @ValidateNested() group: RunnerGroup; /** @@ -60,4 +62,8 @@ export class Runner { */ @IsInt() distance: number; + + constructor() { + console.log("called") + } } diff --git a/src/models/RunnerGroup.ts b/src/models/RunnerGroup.ts index 0b9b109..cd560f9 100644 --- a/src/models/RunnerGroup.ts +++ b/src/models/RunnerGroup.ts @@ -25,4 +25,6 @@ export class RunnerGroup { @IsObject() @IsOptional() parentGroup?: RunnerGroup; + + fullName: string; } diff --git a/src/templates/runner_card.html b/src/templates/runner_card.html index c85218e..76d1760 100644 --- a/src/templates/runner_card.html +++ b/src/templates/runner_card.html @@ -48,7 +48,7 @@

{{this.runner.lastname}}, {{this.runner.firstname}} {{this.runner.middlename}}

-

{{this.runner.group.name}}

+

{{this.runner.group.fullName}}

{{/each}} diff --git a/src/templates/sponsoring_contract.html b/src/templates/sponsoring_contract.html index b75d7f2..ddcad0a 100644 --- a/src/templates/sponsoring_contract.html +++ b/src/templates/sponsoring_contract.html @@ -64,7 +64,7 @@

{{__ "lastname"}}

- {{this.group.name}} + {{this.group.fullName}}

{{__ "group"}}