feat(pdfs): Experimental generation of large runner card files
This commit is contained in:
parent
6dcfd9a4fe
commit
93422b9779
@ -1,197 +1,256 @@
|
||||
<script>
|
||||
import { _ } from "svelte-i18n";
|
||||
import {
|
||||
RunnerCardService,
|
||||
RunnerOrganizationService,
|
||||
RunnerTeamService,
|
||||
} from "@odit/lfk-client-js";
|
||||
import toast from "svelte-french-toast";
|
||||
import DocumentServer from "./DocumentServer.ts";
|
||||
import { _ } from "svelte-i18n";
|
||||
import {
|
||||
RunnerCardService,
|
||||
RunnerOrganizationService,
|
||||
RunnerTeamService,
|
||||
} from "@odit/lfk-client-js";
|
||||
import toast from "svelte-french-toast";
|
||||
import DocumentServer from "./DocumentServer.ts";
|
||||
|
||||
import { init } from "@paralleldrive/cuid2";
|
||||
const createId = init({ length: 10, fingerprint: "lfk-frontend" });
|
||||
const documentServer = new DocumentServer(
|
||||
config.baseurl_documentserver,
|
||||
config.documentserver_key
|
||||
);
|
||||
import { init } from "@paralleldrive/cuid2";
|
||||
const createId = init({ length: 10, fingerprint: "lfk-frontend" });
|
||||
const documentServer = new DocumentServer(
|
||||
config.baseurl_documentserver,
|
||||
config.documentserver_key
|
||||
);
|
||||
|
||||
export let cards_show = false;
|
||||
export let generate_cards = [];
|
||||
export let generate_runners = [];
|
||||
export let generate_orgs = [];
|
||||
export let generate_teams = [];
|
||||
export let cards_show = false;
|
||||
export let generate_cards = [];
|
||||
export let generate_runners = [];
|
||||
export let generate_orgs = [];
|
||||
export let generate_teams = [];
|
||||
|
||||
function download(blob, fileName) {
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
let a = document.createElement("a");
|
||||
a.href = url;
|
||||
a.download = fileName;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
toast.dismiss();
|
||||
toast.success($_("pdf-successfully-generated"));
|
||||
}
|
||||
function download(blob, fileName) {
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
let a = document.createElement("a");
|
||||
a.href = url;
|
||||
a.download = fileName;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
toast.dismiss();
|
||||
toast.success($_("pdf-successfully-generated"));
|
||||
}
|
||||
|
||||
function generateRunnerCards(locale) {
|
||||
if (generate_orgs.length > 0) {
|
||||
generateOrgCards(locale);
|
||||
} else if (generate_teams.length > 0) {
|
||||
generateTeamCards(locale);
|
||||
} else if (generate_runners.length > 0) {
|
||||
generateRunnersCards(locale);
|
||||
function generateRunnerCards(locale, useCombined = false) {
|
||||
if (generate_orgs.length > 0) {
|
||||
if(useCombined){
|
||||
generateOrgCardsCombined(locale);
|
||||
} else {
|
||||
generateCards(locale);
|
||||
generateOrgCards(locale)
|
||||
}
|
||||
}
|
||||
} else if (generate_teams.length > 0) {
|
||||
generateTeamCards(locale);
|
||||
} else if (generate_runners.length > 0) {
|
||||
generateRunnersCards(locale);
|
||||
} else {
|
||||
generateCards(locale);
|
||||
}
|
||||
}
|
||||
|
||||
function generateCards(locale) {
|
||||
toast.loading($_("generating-pdf"));
|
||||
documentServer
|
||||
.generateCards(generate_cards, locale)
|
||||
.then((blob) => {
|
||||
download(blob, `${$_("runnercards")}-${locale}-${createId()}.pdf`);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
function generateCards(locale) {
|
||||
toast.loading($_("generating-pdf"));
|
||||
documentServer
|
||||
.generateCards(generate_cards, locale)
|
||||
.then((blob) => {
|
||||
download(blob, `${$_("runnercards")}-${locale}-${createId()}.pdf`);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
}
|
||||
|
||||
async function generateRunnersCards(locale) {
|
||||
toast.loading($_("generating-pdf"));
|
||||
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
||||
let cards = [];
|
||||
for (let runner of generate_runners) {
|
||||
let card = current_cards.find((c) => c.runner?.id == runner.id);
|
||||
if (!card) {
|
||||
card = await RunnerCardService.runnerCardControllerPost({
|
||||
runner: runner.id,
|
||||
});
|
||||
}
|
||||
cards.push(card);
|
||||
}
|
||||
documentServer
|
||||
.generateCards(cards, locale)
|
||||
.then((blob) => {
|
||||
let fileName = `${$_("runnercards")}-${locale}-${createId()}.pdf`;
|
||||
if (generate_runners.length == 1) {
|
||||
fileName = `${$_("runnercards")}_${generate_runners[0].firstname}_${
|
||||
generate_runners[0].lastname
|
||||
}-${locale}-${createId()}.pdf`;
|
||||
}
|
||||
download(blob, fileName);
|
||||
})
|
||||
.catch((err) => {});
|
||||
}
|
||||
async function generateRunnersCards(locale) {
|
||||
toast.loading($_("generating-pdf"));
|
||||
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
||||
let cards = [];
|
||||
for (let runner of generate_runners) {
|
||||
let card = current_cards.find((c) => c.runner?.id == runner.id);
|
||||
if (!card) {
|
||||
card = await RunnerCardService.runnerCardControllerPost({
|
||||
runner: runner.id,
|
||||
});
|
||||
}
|
||||
cards.push(card);
|
||||
}
|
||||
documentServer
|
||||
.generateCards(cards, locale)
|
||||
.then((blob) => {
|
||||
let fileName = `${$_("runnercards")}-${locale}-${createId()}.pdf`;
|
||||
if (generate_runners.length == 1) {
|
||||
fileName = `${$_("runnercards")}_${generate_runners[0].firstname}_${
|
||||
generate_runners[0].lastname
|
||||
}-${locale}-${createId()}.pdf`;
|
||||
}
|
||||
download(blob, fileName);
|
||||
})
|
||||
.catch((err) => {});
|
||||
}
|
||||
|
||||
async function generateTeamCards(locale) {
|
||||
toast.loading($_("generating-pdfs"));
|
||||
let count = 0;
|
||||
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
||||
for (const t of generate_teams) {
|
||||
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||
t.id
|
||||
);
|
||||
let cards = [];
|
||||
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);
|
||||
}
|
||||
documentServer
|
||||
.generateCards(cards, locale)
|
||||
.then((blob) => {
|
||||
download(
|
||||
blob,
|
||||
`${$_("runnercards")}_${t.name}-${locale}-${createId()}.pdf`
|
||||
);
|
||||
})
|
||||
.catch((err) => {});
|
||||
}
|
||||
}
|
||||
async function generateTeamCards(locale) {
|
||||
toast.loading($_("generating-pdfs"));
|
||||
let count = 0;
|
||||
const current_cards = await RunnerCardService.runnerCardControllerGetAll();
|
||||
for (const t of generate_teams) {
|
||||
const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||
t.id
|
||||
);
|
||||
let cards = [];
|
||||
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);
|
||||
}
|
||||
documentServer
|
||||
.generateCards(cards, locale)
|
||||
.then((blob) => {
|
||||
download(
|
||||
blob,
|
||||
`${$_("runnercards")}_${t.name}-${locale}-${createId()}.pdf`
|
||||
);
|
||||
})
|
||||
.catch((err) => {});
|
||||
}
|
||||
}
|
||||
|
||||
async function generateOrgCards(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 count = 0;
|
||||
let runners =
|
||||
await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
||||
o.id,
|
||||
true
|
||||
);
|
||||
let cards = [];
|
||||
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}_direct-${locale}-${createId()}.pdf`
|
||||
);
|
||||
})
|
||||
.catch((err) => {});
|
||||
for (const t of o.teams) {
|
||||
count++;
|
||||
let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||
t.id
|
||||
);
|
||||
let cards = [];
|
||||
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}_${
|
||||
t.name
|
||||
}-${locale}-${createId()}.pdf`
|
||||
);
|
||||
})
|
||||
.catch((err) => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
async function generateOrgCards(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 count = 0;
|
||||
let runners =
|
||||
await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
|
||||
o.id,
|
||||
true
|
||||
);
|
||||
let cards = [];
|
||||
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}_direct-${locale}-${createId()}.pdf`
|
||||
);
|
||||
})
|
||||
.catch((err) => {});
|
||||
for (const t of o.teams) {
|
||||
count++;
|
||||
let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
|
||||
t.id
|
||||
);
|
||||
let cards = [];
|
||||
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}_${
|
||||
t.name
|
||||
}-${locale}-${createId()}.pdf`
|
||||
);
|
||||
})
|
||||
.catch((err) => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
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}
|
||||
<button
|
||||
on:click={() => {
|
||||
generateRunnerCards("de");
|
||||
}}
|
||||
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
|
||||
</button>
|
||||
<button
|
||||
on:click={() => {
|
||||
generateRunnerCards("en");
|
||||
}}
|
||||
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")}: EN
|
||||
</button>
|
||||
<button
|
||||
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
|
||||
</button>
|
||||
<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"
|
||||
>
|
||||
{$_("generate-runnercards")}: EN
|
||||
</button>
|
||||
{/if}
|
||||
|
Loading…
x
Reference in New Issue
Block a user