feat(pdfs): Experimental generation of large runner card files

This commit is contained in:
Nicolai Ort 2025-05-01 19:08:49 +02:00
parent 6dcfd9a4fe
commit 93422b9779
Signed by: niggl
GPG Key ID: 13AFA55AF62F269F

View File

@ -33,9 +33,13 @@
toast.success($_("pdf-successfully-generated"));
}
function generateRunnerCards(locale) {
function generateRunnerCards(locale, useCombined = false) {
if (generate_orgs.length > 0) {
generateOrgCards(locale);
if(useCombined){
generateOrgCardsCombined(locale);
} else {
generateOrgCards(locale)
}
} else if (generate_teams.length > 0) {
generateTeamCards(locale);
} else if (generate_runners.length > 0) {
@ -175,6 +179,55 @@
}
}
}
async function generateOrgCardsCombined(locale) {
toast.loading($_("generating-pdfs"));
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
let count = 0;
let count_orgs = 0;
for (const o of generate_orgs) {
count_orgs++;
let cards = [];
let count = 0;
let runners =
await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
o.id,
true
);
for (let runner of runners) {
let card = current_cards.find((c) => c.runner?.id == runner.id);
if (!card) {
card = await RunnerCardService.runnerCardControllerPost({
runner: runner.id,
});
}
cards.push(card);
}
for (const t of o.teams) {
count++;
let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
t.id
);
for (let runner of runners) {
let card = current_cards.find((c) => c.runner?.id == runner.id);
if (!card) {
card = await RunnerCardService.runnerCardControllerPost({
runner: runner.id,
});
}
cards.push(card);
}
}
await documentServer
.generateCards(cards, locale)
.then((blob) => {
download(
blob,
`${$_("runnercards")}_${o.name}-${locale}-${createId()}.pdf`
);
})
.catch((err) => {});
}
}
</script>
{#if cards_show}
@ -182,6 +235,9 @@
on:click={() => {
generateRunnerCards("de");
}}
on:contextmenu|preventDefault={() => {
generateRunnerCards("de", true);
}}
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:w-auto sm:text-sm mb-1 lg:mb-0"
>
{$_("generate-runnercards")}: DE
@ -189,6 +245,9 @@
<button
on:click={() => {
generateRunnerCards("en");
}}
on:contextmenu|preventDefault={() => {
generateRunnerCards("en", true);
}}
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:w-auto sm:text-sm mb-1 lg:mb-0"
>