|
|
|
@ -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}
|
|
|
|
|