Compare commits
	
		
			5 Commits
		
	
	
		
			1.9.7
			...
			feature/sp
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						c3226c37c9
	
				 | 
					
					
						|||
| 
						
						
							
						
						210140fd67
	
				 | 
					
					
						|||
| 
						
						
							
						
						35e58d233e
	
				 | 
					
					
						|||
| 
						
						
							
						
						a09bf31e22
	
				 | 
					
					
						|||
| 
						
						
							
						
						7c31fba83a
	
				 | 
					
					
						
							
								
								
									
										81
									
								
								src/components/pdf_generation/DownloadProgressModal.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/components/pdf_generation/DownloadProgressModal.svelte
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
<script>
 | 
			
		||||
	import { _ } from "svelte-i18n";
 | 
			
		||||
	import { clickOutside } from "../base/outsideclick";
 | 
			
		||||
	import { onMount } from "svelte";
 | 
			
		||||
	export let download_details = "";
 | 
			
		||||
	export let modal_open;
 | 
			
		||||
	onMount(() => {
 | 
			
		||||
		document.onkeydown = (e) => {
 | 
			
		||||
			e = e || window.event;
 | 
			
		||||
			if (e.key === "Escape") {
 | 
			
		||||
				modal_open = false;
 | 
			
		||||
			}
 | 
			
		||||
			if (e.keyCode === 13) {
 | 
			
		||||
				if (createbtnenabled === true) {
 | 
			
		||||
					createbtnenabled = false;
 | 
			
		||||
					submit();
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		};
 | 
			
		||||
	});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#if modal_open}
 | 
			
		||||
	<div
 | 
			
		||||
		class="fixed z-10 inset-0 overflow-y-hidden"
 | 
			
		||||
		use:clickOutside
 | 
			
		||||
		on:click_outside={() => {
 | 
			
		||||
			modal_open = false;
 | 
			
		||||
		}}
 | 
			
		||||
	>
 | 
			
		||||
		<div
 | 
			
		||||
			class="flex items-end justify-center h-screen text-center sm:block p-0 lg:p-4"
 | 
			
		||||
		>
 | 
			
		||||
			<div class="fixed inset-0 transition-opacity" aria-hidden="true">
 | 
			
		||||
				<div
 | 
			
		||||
					class="absolute inset-0 bg-gray-500 opacity-75"
 | 
			
		||||
					data-id="modal_backdrop"
 | 
			
		||||
				/>
 | 
			
		||||
			</div>
 | 
			
		||||
			<span
 | 
			
		||||
				class="hidden sm:inline-block sm:align-middle sm:h-screen"
 | 
			
		||||
				aria-hidden="true">​</span
 | 
			
		||||
			>
 | 
			
		||||
			<div
 | 
			
		||||
				class="inline-block align-bottom text-left shadow-xl transform transition-all sm:align-middle w-full lg:w-auto min-w-auto lg:min-w-[35vw]"
 | 
			
		||||
				role="dialog"
 | 
			
		||||
				aria-modal="true"
 | 
			
		||||
				aria-labelledby="modal-headline"
 | 
			
		||||
			>
 | 
			
		||||
				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl">
 | 
			
		||||
					<div class="">
 | 
			
		||||
						<div
 | 
			
		||||
							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
 | 
			
		||||
						>
 | 
			
		||||
							<svg
 | 
			
		||||
								xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
								viewBox="0 0 24 24"
 | 
			
		||||
								class="h-6 w-6 text-blue-600"
 | 
			
		||||
								fill="currentColor"
 | 
			
		||||
								width="24"
 | 
			
		||||
								height="24"
 | 
			
		||||
								><path fill="none" d="M0 0h24v24H0z" />
 | 
			
		||||
								<path
 | 
			
		||||
									d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"
 | 
			
		||||
								/></svg
 | 
			
		||||
							>
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="mt-3 sm:text-left text-base">
 | 
			
		||||
							<h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
			
		||||
								{$_('download_laeuft')}
 | 
			
		||||
							</h3>
 | 
			
		||||
							<div class="w-full">
 | 
			
		||||
								{download_details}
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
{/if}
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
	import DocumentServer from "./DocumentServer";
 | 
			
		||||
	import { init } from "@paralleldrive/cuid2";
 | 
			
		||||
	import toast from "svelte-french-toast";
 | 
			
		||||
	import DownloadProgressModal from "./DownloadProgressModal.svelte";
 | 
			
		||||
	const createId = init({ length: 10, fingerprint: "lfk-frontend" });
 | 
			
		||||
	const documentServer = new DocumentServer(
 | 
			
		||||
		config.baseurl_documentserver,
 | 
			
		||||
@@ -17,8 +18,12 @@
 | 
			
		||||
	export let generate_runners = [];
 | 
			
		||||
	export let generate_orgs = [];
 | 
			
		||||
	export let generate_teams = [];
 | 
			
		||||
	//
 | 
			
		||||
	export let download_modal_open = false;
 | 
			
		||||
	export let download_details = "";
 | 
			
		||||
 | 
			
		||||
	function generateSponsoringContract(locale) {
 | 
			
		||||
		download_modal_open = true;
 | 
			
		||||
		if (generate_orgs.length > 0) {
 | 
			
		||||
			generateOrgContracts(locale);
 | 
			
		||||
		} else if (generate_teams.length > 0) {
 | 
			
		||||
@@ -41,19 +46,24 @@
 | 
			
		||||
 | 
			
		||||
	async function generateTeamContracts(locale) {
 | 
			
		||||
		toast.loading($_("generating-pdfs"));
 | 
			
		||||
		let totalCount = generate_teams.length;
 | 
			
		||||
		let count = 0;
 | 
			
		||||
		for (const t of generate_teams) {
 | 
			
		||||
			count++;
 | 
			
		||||
			download_details = `${t.parentGroup.name} > ${t.name}`;
 | 
			
		||||
			const runners = await RunnerTeamService.runnerTeamControllerGetRunners(
 | 
			
		||||
				t.id
 | 
			
		||||
			);
 | 
			
		||||
			documentServer
 | 
			
		||||
			await documentServer
 | 
			
		||||
				.generateContracts(runners, locale)
 | 
			
		||||
				.then((blob) => {
 | 
			
		||||
					download(
 | 
			
		||||
						blob,
 | 
			
		||||
						`${$_("sponsorings")}_${t.name}-${locale}-${createId()}.pdf`
 | 
			
		||||
					);
 | 
			
		||||
					if (count === totalCount) {
 | 
			
		||||
						download_modal_open = false;
 | 
			
		||||
					}
 | 
			
		||||
				})
 | 
			
		||||
				.catch((err) => {});
 | 
			
		||||
		}
 | 
			
		||||
@@ -61,15 +71,23 @@
 | 
			
		||||
 | 
			
		||||
	async function generateOrgContracts(locale) {
 | 
			
		||||
		toast.loading($_("generating-pdf"));
 | 
			
		||||
		let count_orgs = 0;
 | 
			
		||||
		let totalCount = 0;
 | 
			
		||||
		for (const o of generate_orgs) {
 | 
			
		||||
			count_orgs++;
 | 
			
		||||
			let count = 0;
 | 
			
		||||
			totalCount++;
 | 
			
		||||
			for (const t of o.teams) {
 | 
			
		||||
				totalCount++;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		console.log({ totalCount });
 | 
			
		||||
		let count = 0;
 | 
			
		||||
		for (const o of generate_orgs) {
 | 
			
		||||
			count++;
 | 
			
		||||
			let runners =
 | 
			
		||||
				await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
 | 
			
		||||
					o.id,
 | 
			
		||||
					true
 | 
			
		||||
				);
 | 
			
		||||
			download_details = o.name;
 | 
			
		||||
			await documentServer
 | 
			
		||||
				.generateContracts(runners, locale)
 | 
			
		||||
				.then((blob) => {
 | 
			
		||||
@@ -84,6 +102,7 @@
 | 
			
		||||
				let runners = await RunnerTeamService.runnerTeamControllerGetRunners(
 | 
			
		||||
					t.id
 | 
			
		||||
				);
 | 
			
		||||
				download_details = `${o.name} > ${t.name}`;
 | 
			
		||||
				await documentServer
 | 
			
		||||
					.generateContracts(runners, locale)
 | 
			
		||||
					.then((blob) => {
 | 
			
		||||
@@ -93,15 +112,19 @@
 | 
			
		||||
								t.name
 | 
			
		||||
							}-${locale}-${createId()}.pdf`
 | 
			
		||||
						);
 | 
			
		||||
						console.log({ count });
 | 
			
		||||
						if (count === totalCount) {
 | 
			
		||||
							download_modal_open = false;
 | 
			
		||||
						}
 | 
			
		||||
					})
 | 
			
		||||
					.catch((err) => {});
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function generateRunnerContracts(locale) {
 | 
			
		||||
	async function generateRunnerContracts(locale) {
 | 
			
		||||
		toast.loading($_("generating-pdf"));
 | 
			
		||||
		documentServer
 | 
			
		||||
		await documentServer
 | 
			
		||||
			.generateContracts(generate_runners, locale)
 | 
			
		||||
			.then((blob) => {
 | 
			
		||||
				let fileName = `${$_("sponsorings")}-${locale}-${createId()}.pdf`;
 | 
			
		||||
@@ -111,6 +134,7 @@
 | 
			
		||||
					}-${locale}-${createId()}.pdf`;
 | 
			
		||||
				}
 | 
			
		||||
				download(blob, fileName);
 | 
			
		||||
				download_modal_open = false;
 | 
			
		||||
			})
 | 
			
		||||
			.catch((err) => {
 | 
			
		||||
				console.error(err);
 | 
			
		||||
@@ -119,6 +143,7 @@
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#if sponsoring_contracts_show}
 | 
			
		||||
	<DownloadProgressModal {download_details} modal_open={download_modal_open} />
 | 
			
		||||
	<button
 | 
			
		||||
		on:click={() => {
 | 
			
		||||
			generateSponsoringContract("de");
 | 
			
		||||
 
 | 
			
		||||
@@ -204,6 +204,7 @@
 | 
			
		||||
    "donors-are-being-loaded": "Sponsoren werden geladen",
 | 
			
		||||
    "dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
 | 
			
		||||
    "dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
 | 
			
		||||
    "download_laeuft": "Download läuft...",
 | 
			
		||||
    "e-mail-adress": "E-Mail-Adresse",
 | 
			
		||||
    "edit": "Bearbeiten",
 | 
			
		||||
    "edit-a-card": "Läuferkarte bearbeiten",
 | 
			
		||||
 
 | 
			
		||||
@@ -204,6 +204,7 @@
 | 
			
		||||
    "donors-are-being-loaded": "donors are being loaded",
 | 
			
		||||
    "dont-have-your-email-connected": "Don't have your email connected?",
 | 
			
		||||
    "dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
 | 
			
		||||
    "download_laeuft": "Download in progress...",
 | 
			
		||||
    "e-mail-adress": "E-Mail Adress",
 | 
			
		||||
    "edit": "Edit",
 | 
			
		||||
    "edit-a-card": "Edit a card",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user