diff --git a/src/components/orgs/OrgDetail.svelte b/src/components/orgs/OrgDetail.svelte index 6fdcd8d6..60b0bccc 100644 --- a/src/components/orgs/OrgDetail.svelte +++ b/src/components/orgs/OrgDetail.svelte @@ -12,6 +12,7 @@ import Select from "svelte-select"; import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte"; import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte"; + import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte"; import { tick } from "svelte"; $: delete_triggered = false; $: address_valid_or_none = @@ -34,6 +35,7 @@ $: iscityvalid = editable.address?.city?.trim().length !== 0; $: sponsoring_contracts_show = true; $: cards_show = true; + $: certificates_show = true; $: generate_orgs = [original_object]; $: registrationLink = `${config.baseurl}/selfservice/register/${editable.registrationKey}`; const getContactLabel = (option) => @@ -176,6 +178,7 @@ bind:sponsoring_contracts_show bind:generate_orgs /> + {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:IMPORT')} { @@ -186,7 +189,7 @@ {$_('import-runners')} {/if} - {#if store.state.jwtinfo.userdetails.permissions.includes('USER:DELETE')} + {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:DELETE')} {#if delete_triggered} r.is_selected === true); $: cards_show = current_organizations.some((r) => r.is_selected === true); - $: generate_orgs = current_organizations.filter((r) => r.is_selected === true); + $: generate_orgs = current_organizations.some((r) => r.is_selected === true); + $: certificates_show = current_organizations.some( + (r) => r.is_selected === true + ); export let current_organizations = []; const promise = RunnerOrganizationService.runnerOrganizationControllerGetAll().then( @@ -55,6 +59,9 @@ + diff --git a/src/components/pdf_generation/GenerateRunnerCards.svelte b/src/components/pdf_generation/GenerateRunnerCards.svelte index 68e623bf..7c536629 100644 --- a/src/components/pdf_generation/GenerateRunnerCards.svelte +++ b/src/components/pdf_generation/GenerateRunnerCards.svelte @@ -67,7 +67,7 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Runnercards.pdf"; + a.download = `${$_('runnercards')}-${locale}.pdf`; document.body.appendChild(a); a.click(); a.remove(); @@ -127,7 +127,12 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Runnercards.pdf"; + if(generate_runners.length == 1){ + a.download = `${$_('runnercards')}_${generate_runners[0].firstname}_${generate_runners[0].lastname}-${locale}.pdf`; + } + else{ + a.download = `Runnercards-${locale}.pdf`; + } document.body.appendChild(a); a.click(); a.remove(); @@ -191,7 +196,7 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Sponsorings_" + t.name + ".pdf"; + a.download = `${$_('runnercards')}_${t.name}-${locale}.pdf`; document.body.appendChild(a); a.click(); a.remove(); @@ -258,7 +263,7 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Sponsorings_" + o.name + ".pdf"; + a.download = `${$_('runnercards')}_${o.name}-${locale}.pdf`; document.body.appendChild(a); a.click(); a.remove(); diff --git a/src/components/pdf_generation/GenerateRunnerCertificates.svelte b/src/components/pdf_generation/GenerateRunnerCertificates.svelte new file mode 100644 index 00000000..f7cabc47 --- /dev/null +++ b/src/components/pdf_generation/GenerateRunnerCertificates.svelte @@ -0,0 +1,277 @@ + + +{#if certificates_show} + + + { + certificates_dropdown_open = !certificates_dropdown_open; + }} + type="button" + class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-600 text-base font-medium text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500 sm:ml-3 sm:w-auto sm:text-sm inline-flex" + id="options-menu" + aria-haspopup="true" + aria-expanded="true"> + {$_('generate-runner-certificates')} + + + + + {#if certificates_dropdown_open} + + + {$_('select-language')} + { + generateCertificates('de'); + }} + type="submit" + class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900" + role="menuitem"> + {$_('german')} + + { + generateCertificates('en'); + }} + type="submit" + class="block w-full text-left px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 hover:text-gray-900 focus:outline-none focus:bg-gray-100 focus:text-gray-900" + role="menuitem"> + {$_('english')} + + + + {/if} + +{/if} diff --git a/src/components/pdf_generation/GenerateSponsoringContracts.svelte b/src/components/pdf_generation/GenerateSponsoringContracts.svelte index 377ac82b..c84b2238 100644 --- a/src/components/pdf_generation/GenerateSponsoringContracts.svelte +++ b/src/components/pdf_generation/GenerateSponsoringContracts.svelte @@ -69,7 +69,7 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Sponsorings_" + t.name + ".pdf"; + a.download = `${$_('sponsorings')}_${t.name}-${locale}.pdf`; document.body.appendChild(a); a.click(); a.remove(); @@ -124,7 +124,7 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Sponsorings_" + o.name + ".pdf"; + a.download = `${$_('sponsorings')}_${o.name}-${locale}.pdf`; document.body.appendChild(a); a.click(); a.remove(); @@ -174,7 +174,10 @@ const url = window.URL.createObjectURL(blob); let a = document.createElement("a"); a.href = url; - a.download = "Sponsoring.pdf"; + if(generate_runners.length == 1){ + a.download = `${$_('sponsorings')}_${generate_runners[0].firstname}_${generate_runners[0].lastname}-${locale}.pdf`; + } + a.download = `${$_('sponsorings')}-${locale}.pdf`; document.body.appendChild(a); a.click(); a.remove(); diff --git a/src/components/runners/RunnerDetail.svelte b/src/components/runners/RunnerDetail.svelte index c998cf69..39df7b0c 100644 --- a/src/components/runners/RunnerDetail.svelte +++ b/src/components/runners/RunnerDetail.svelte @@ -2,6 +2,7 @@ import { getLocaleFromNavigator, _ } from "svelte-i18n"; import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte"; import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte"; + import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte"; import store from "../../store"; import { RunnerService, @@ -36,6 +37,7 @@ editable.group != null; $: sponsoring_contracts_show = true; $: cards_show = true; + $: certificates_show = true; $: generate_runners = [original_data_pdf]; runner_promise.then((data) => { data_loaded = true; @@ -158,7 +160,10 @@ bind:sponsoring_contracts_show bind:generate_runners /> + {#if !delete_triggered} r.is_selected === true ); + $: certificates_show = current_runners.some( + (r) => r.is_selected === true + ); $: generate_runners = current_runners.filter((r) => r.is_selected === true); $: teams = []; $: orgs = []; @@ -92,6 +96,9 @@ + diff --git a/src/components/teams/TeamDetail.svelte b/src/components/teams/TeamDetail.svelte index 24400507..2be431bb 100644 --- a/src/components/teams/TeamDetail.svelte +++ b/src/components/teams/TeamDetail.svelte @@ -14,6 +14,7 @@ import Teams from "./Teams.svelte"; import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte"; import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte"; + import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte"; let [teamdata, original, delete_team, orgs, contacts, modal_open] = [ {}, {}, @@ -30,6 +31,7 @@ $: data_changed = JSON.stringify(teamdata) === JSON.stringify(original); $: sponsoring_contracts_show = true; $: cards_show = true; + $: certificates_show = true; $: generate_teams = [original]; $: group = {}; $: contact = {}; @@ -122,6 +124,9 @@ + {#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:IMPORT')} { diff --git a/src/components/teams/TeamsOverview.svelte b/src/components/teams/TeamsOverview.svelte index ff6ed46d..18b58369 100644 --- a/src/components/teams/TeamsOverview.svelte +++ b/src/components/teams/TeamsOverview.svelte @@ -9,6 +9,7 @@ import { clickOutside } from "../base/outsideclick"; import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte"; import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte"; + import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte"; $: searchvalue = ""; $: active_deletes = []; $: sponsoring_contracts_show = current_teams.some( @@ -17,6 +18,9 @@ $: cards_show = current_teams.some( (r) => r.is_selected === true ); + $: certificates_show = current_teams.some( + (r) => r.is_selected === true + ); $: generate_teams = current_teams.filter((r) => r.is_selected === true); export let current_teams = []; let modal_open = false; @@ -61,6 +65,9 @@ + diff --git a/src/locales/de.json b/src/locales/de.json index 7f07204c..8ebb7418 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -50,6 +50,7 @@ "card-deleted": "Karte gelöscht", "card-updated": "Karte aktualisiert", "cards": "Läuferkarten", + "certificates": "Urkunden", "change-your-password-here": "Hier kannst du dein Passwort ändern", "changing-your-password": "Passwort wird geändert", "city": "Stadt", @@ -191,10 +192,12 @@ "geerbte": "geerbte", "general-stats": "Allgemeine Statistiken", "general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten", + "generate-runner-certificate": "Urkunde generieren", + "generate-runner-certificates": "Urkunden generieren", "generate-runnercards": "Läuferkarten generieren", "generate-sponsoring-contract": "Sponsoringvertrag generieren", "generate-sponsoring-contracts": "Sponsoringverträge generieren", - "generating-pdf": "Pdf wird generiert...", + "generating-pdf": "PDF wird generiert...", "generating-pdfs": "PDFs werden generiert...", "generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.", "german": "Deutsch", @@ -321,6 +324,7 @@ "runner-import": "Läufer:innen Import", "runner-is-being-added": "Läufer:in wird hinzugefügt...", "runner-updated": "Läufer:in aktualisiert!", + "runnercards": "Laeuferkarten", "runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen", "runners": "Läufer", "runners-are-being-imported": "Läufer:innen werden importiert ...", @@ -350,6 +354,7 @@ "settings": "Einstellungen", "settings-for-your-profile": "Die Einstellungen deines Accounts", "something-about-the-group": "Infos zur Gruppe", + "sponsorings": "Sponsoringerklaerungen", "stats-are-being-loaded": "Die Statistiken werden geladen...", "status": "Status", "stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können", diff --git a/src/locales/en.json b/src/locales/en.json index b86f6b7c..8405634a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -50,6 +50,7 @@ "card-deleted": "Card deleted", "card-updated": "Card updated", "cards": "Cards", + "certificates": "Certificates", "change-your-password-here": "Change your password here", "changing-your-password": "Changing your password", "city": "City", @@ -191,6 +192,8 @@ "geerbte": "inherited", "general-stats": "General Stats", "general_promise_error": "😢 Error", + "generate-runner-certificate": "Generate runner certificate", + "generate-runner-certificates": "Generate runner certificates", "generate-runnercards": "Generate Runnercards", "generate-sponsoring-contract": "generate sponsoring contract", "generate-sponsoring-contracts": "generate sponsoring contracts", @@ -321,6 +324,7 @@ "runner-import": "Runner Import", "runner-is-being-added": "Runner is being added...", "runner-updated": "Runner updated!", + "runnercards": "Runnercards", "runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"", "runners": "Runners", "runners-are-being-imported": "Runners are being imported...", @@ -350,6 +354,7 @@ "settings": "Settings", "settings-for-your-profile": "Settings for your profile", "something-about-the-group": "Something about the group...", + "sponsorings": "Sponsorings", "stats-are-being-loaded": "stats are being loaded...", "status": "Status", "stuff-that-could-harm-your-profile": "Stuff that could harm your profile",