199
									
								
								src/components/runners/GenerateSponsoringContracts.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								src/components/runners/GenerateSponsoringContracts.svelte
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
			
		||||
<script>
 | 
			
		||||
    import { getLocaleFromNavigator, _ } from "svelte-i18n";
 | 
			
		||||
    import { RunnerOrganizationService } from "@odit/lfk-client-js";
 | 
			
		||||
    import Toastify from "toastify-js";
 | 
			
		||||
    export let sponsoring_contracts_show = false;
 | 
			
		||||
    export let generate_runners = [];
 | 
			
		||||
    export let generate_orgs = [];
 | 
			
		||||
    export let generate_teams = [];
 | 
			
		||||
    $: sponsoring_contracts_download_open=false;
 | 
			
		||||
    document.addEventListener("click", function (e) {
 | 
			
		||||
        if (
 | 
			
		||||
            e.target.parentNode?.parentNode?.id != "sponsoring:dropdown" &&
 | 
			
		||||
            e.target.parentNode?.parentNode?.id != "sponsoring:dropdown:menu"
 | 
			
		||||
        ) {
 | 
			
		||||
            sponsoring_contracts_download_open = false;
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    
 | 
			
		||||
    function generateSponsoringContract(locale) {
 | 
			
		||||
        sponsoring_contracts_download_open = false;
 | 
			
		||||
        const toast = Toastify({
 | 
			
		||||
            text: $_("generating-pdf"),
 | 
			
		||||
            duration: -1,
 | 
			
		||||
        }).showToast();
 | 
			
		||||
 | 
			
		||||
        if(generate_orgs.length>0){
 | 
			
		||||
            generateOrgContracts(toast, locale);
 | 
			
		||||
        }
 | 
			
		||||
        else if(generate_teams.length>0){
 | 
			
		||||
            generateTeamContracts(toast, locale);
 | 
			
		||||
        }
 | 
			
		||||
        else{
 | 
			
		||||
            generateRunnerContracts(toast, locale);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function generateTeamContracts(toast, locale) {
 | 
			
		||||
        //TODO:
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    async function generateOrgContracts(toast, locale) {
 | 
			
		||||
    let count = 0;
 | 
			
		||||
    for await (const o of generate_orgs) {
 | 
			
		||||
      const runners = await RunnerOrganizationService.runnerOrganizationControllerGetRunners(
 | 
			
		||||
        o.id
 | 
			
		||||
      );
 | 
			
		||||
      fetch(
 | 
			
		||||
        `${config.baseurl}/documents/contracts?locale=${locale}&download=true&key=${config.documentserver_key}`,
 | 
			
		||||
        {
 | 
			
		||||
          method: "POST",
 | 
			
		||||
          headers: {
 | 
			
		||||
            "Content-Type": "application/json",
 | 
			
		||||
          },
 | 
			
		||||
          body: JSON.stringify(runners),
 | 
			
		||||
        }
 | 
			
		||||
      )
 | 
			
		||||
        .then((response) => {
 | 
			
		||||
          if (response.status != "200") {
 | 
			
		||||
            toast.hideToast();
 | 
			
		||||
            Toastify({
 | 
			
		||||
              text: $_("pdf-generation-failed"),
 | 
			
		||||
              duration: 3500,
 | 
			
		||||
              backgroundColor:
 | 
			
		||||
                "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
            }).showToast();
 | 
			
		||||
          } else {
 | 
			
		||||
            return response.blob();
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        .then((blob) => {
 | 
			
		||||
          count++;
 | 
			
		||||
          const url = window.URL.createObjectURL(blob);
 | 
			
		||||
          let a = document.createElement("a");
 | 
			
		||||
          a.href = url;
 | 
			
		||||
          a.download = "Sponsorings_" + o.name + ".pdf";
 | 
			
		||||
          document.body.appendChild(a);
 | 
			
		||||
          a.click();
 | 
			
		||||
          a.remove();
 | 
			
		||||
          if (count === orgs.length) {
 | 
			
		||||
            toast.hideToast();
 | 
			
		||||
            Toastify({
 | 
			
		||||
              text: $_("pdfs-successfully-generated"),
 | 
			
		||||
              duration: 3500,
 | 
			
		||||
              backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
 | 
			
		||||
            }).showToast();
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        .catch((err) => {});
 | 
			
		||||
    }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function generateRunnerContracts(toast, locale) {
 | 
			
		||||
        fetch(
 | 
			
		||||
            `${config.baseurl}/documents/contracts?locale=${locale}&download=true&key=${config.documentserver_key}`,
 | 
			
		||||
            {
 | 
			
		||||
                method: "POST",
 | 
			
		||||
                headers: {
 | 
			
		||||
                    "Content-Type": "application/json",
 | 
			
		||||
                },
 | 
			
		||||
                body: JSON.stringify(
 | 
			
		||||
                    generate_runners
 | 
			
		||||
                ),
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
            .then((response) => {
 | 
			
		||||
                if (response.status != "200") {
 | 
			
		||||
                    toast.hideToast();
 | 
			
		||||
                    Toastify({
 | 
			
		||||
                        text: $_("pdf-generation-failed"),
 | 
			
		||||
                        duration: 3500,
 | 
			
		||||
                        backgroundColor:
 | 
			
		||||
                            "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
                    }).showToast();
 | 
			
		||||
                } else {
 | 
			
		||||
                    return response.blob();
 | 
			
		||||
                }
 | 
			
		||||
            })
 | 
			
		||||
            .then((blob) => {
 | 
			
		||||
                const url = window.URL.createObjectURL(blob);
 | 
			
		||||
                let a = document.createElement("a");
 | 
			
		||||
                a.href = url;
 | 
			
		||||
                a.download = "Sponsoring.pdf";
 | 
			
		||||
                document.body.appendChild(a);
 | 
			
		||||
                a.click();
 | 
			
		||||
                a.remove();
 | 
			
		||||
                toast.hideToast();
 | 
			
		||||
                Toastify({
 | 
			
		||||
                    text: $_("pdf-successfully-generated"),
 | 
			
		||||
                    duration: 3500,
 | 
			
		||||
                    backgroundColor:
 | 
			
		||||
                        "linear-gradient(to right, #00b09b, #96c93d)",
 | 
			
		||||
                }).showToast();
 | 
			
		||||
            })
 | 
			
		||||
            .catch((err) => {
 | 
			
		||||
                console.error(err);
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#if sponsoring_contracts_show}
 | 
			
		||||
    <div id="sponsoring:dropdown" class="relative inline-block">
 | 
			
		||||
        <div>
 | 
			
		||||
            <button
 | 
			
		||||
                on:click={() => {
 | 
			
		||||
                    sponsoring_contracts_download_open = !sponsoring_contracts_download_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-sponsoring-contracts')}
 | 
			
		||||
                <svg
 | 
			
		||||
                    xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
                    width="24"
 | 
			
		||||
                    height="24"
 | 
			
		||||
                    viewBox="0 0 24 24"
 | 
			
		||||
                    class="-mr-1 ml-2 h-5 w-5"><path
 | 
			
		||||
                        fill="none"
 | 
			
		||||
                        d="M0 0h24v24H0z" />
 | 
			
		||||
                    <path
 | 
			
		||||
                        fill="currentColor"
 | 
			
		||||
                        d="M3 19h18v2H3v-2zm10-5.83l6.07-6.07 1.42 1.41L12 17 3.52 8.52l1.4-1.42L11 13.17V2h2v11.17z" /></svg>
 | 
			
		||||
            </button>
 | 
			
		||||
        </div>
 | 
			
		||||
        {#if sponsoring_contracts_download_open}
 | 
			
		||||
            <div
 | 
			
		||||
                class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5"
 | 
			
		||||
                id="sponsoring:dropdown:menu">
 | 
			
		||||
                <div
 | 
			
		||||
                    class="py-1"
 | 
			
		||||
                    role="menu"
 | 
			
		||||
                    aria-orientation="vertical"
 | 
			
		||||
                    aria-labelledby="options-menu">
 | 
			
		||||
                    <span
 | 
			
		||||
                        class="block w-full text-left px-4 py-2 text-sm text-gray-700">{$_('select-language')}</span>
 | 
			
		||||
                    <button
 | 
			
		||||
                        on:click={() => {
 | 
			
		||||
                            generateSponsoringContract('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')}
 | 
			
		||||
                    </button>
 | 
			
		||||
                    <button
 | 
			
		||||
                        on:click={() => {
 | 
			
		||||
                            generateSponsoringContract('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')}
 | 
			
		||||
                    </button>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        {/if}
 | 
			
		||||
    </div>
 | 
			
		||||
{/if}
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
<script>
 | 
			
		||||
  import { getLocaleFromNavigator, _ } from "svelte-i18n";
 | 
			
		||||
  import GenerateSponsoringContracts from "./GenerateSponsoringContracts.svelte";
 | 
			
		||||
  import store from "../../store";
 | 
			
		||||
  import {
 | 
			
		||||
    RunnerService,
 | 
			
		||||
@@ -18,8 +19,10 @@
 | 
			
		||||
  $: original_data_pdf = {};
 | 
			
		||||
  $: original_data = {};
 | 
			
		||||
  $: editable = {};
 | 
			
		||||
  $: group = {}
 | 
			
		||||
  $: changes_performed = !(JSON.stringify(original_data) == JSON.stringify(editable));
 | 
			
		||||
  $: group = {};
 | 
			
		||||
  $: changes_performed = !(
 | 
			
		||||
    JSON.stringify(original_data) == JSON.stringify(editable)
 | 
			
		||||
  );
 | 
			
		||||
  $: isEmailValid =
 | 
			
		||||
    (editable.email || "") === "" ||
 | 
			
		||||
    (editable.email && isEmail(editable.email || ""));
 | 
			
		||||
@@ -31,6 +34,8 @@
 | 
			
		||||
    isLastnameValid &&
 | 
			
		||||
    isEmailValid &&
 | 
			
		||||
    editable.group != null;
 | 
			
		||||
  $: sponsoring_contracts_show = true;
 | 
			
		||||
  $: generate_runners = [original_data_pdf];
 | 
			
		||||
  runner_promise.then((data) => {
 | 
			
		||||
    data_loaded = true;
 | 
			
		||||
    original_data_pdf = Object.assign(original_data_pdf, data);
 | 
			
		||||
@@ -38,27 +43,21 @@
 | 
			
		||||
    original_data = Object.assign(original_data, data);
 | 
			
		||||
    editable = Object.assign(editable, original_data);
 | 
			
		||||
 | 
			
		||||
    RunnerOrganizationService.runnerOrganizationControllerGetAll().then((val) => {
 | 
			
		||||
      const orgs = val.map((r) => {
 | 
			
		||||
        return { label: r.name, value: r };
 | 
			
		||||
      });
 | 
			
		||||
      groups = groups.concat(orgs);
 | 
			
		||||
      RunnerTeamService.runnerTeamControllerGetAll().then((val) => {
 | 
			
		||||
        const teams = val.map((r) => {
 | 
			
		||||
          return { label: `${r.parentGroup.name} > ${r.name}`, value: r };
 | 
			
		||||
    RunnerOrganizationService.runnerOrganizationControllerGetAll().then(
 | 
			
		||||
      (val) => {
 | 
			
		||||
        const orgs = val.map((r) => {
 | 
			
		||||
          return { label: r.name, value: r };
 | 
			
		||||
        });
 | 
			
		||||
        groups = groups.concat(teams);
 | 
			
		||||
        group = groups.find(g => g.value.id == editable.group)
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
  document.addEventListener("click", function (e) {
 | 
			
		||||
    if (
 | 
			
		||||
      e.target.parentNode?.parentNode?.id != "sponsoring:dropdown" &&
 | 
			
		||||
      e.target.parentNode?.parentNode?.id != "sponsoring:dropdown:menu"
 | 
			
		||||
    ) {
 | 
			
		||||
      sponsoring_contracts_download_open = false;
 | 
			
		||||
    }
 | 
			
		||||
        groups = groups.concat(orgs);
 | 
			
		||||
        RunnerTeamService.runnerTeamControllerGetAll().then((val) => {
 | 
			
		||||
          const teams = val.map((r) => {
 | 
			
		||||
            return { label: `${r.parentGroup.name} > ${r.name}`, value: r };
 | 
			
		||||
          });
 | 
			
		||||
          groups = groups.concat(teams);
 | 
			
		||||
          group = groups.find((g) => g.value.id == editable.group);
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  });
 | 
			
		||||
  let groups = [];
 | 
			
		||||
  function submit() {
 | 
			
		||||
@@ -90,59 +89,6 @@
 | 
			
		||||
      })
 | 
			
		||||
      .catch((err) => {});
 | 
			
		||||
  }
 | 
			
		||||
  function generateSponsoringContract(locale) {
 | 
			
		||||
    sponsoring_contracts_download_open = false;
 | 
			
		||||
    const toast = Toastify({
 | 
			
		||||
      text: $_("generating-pdf"),
 | 
			
		||||
      duration: -1,
 | 
			
		||||
    }).showToast();
 | 
			
		||||
    fetch(
 | 
			
		||||
      `${config.baseurl}/documents/contracts?locale=${locale}&download=true&key=${config.documentserver_key}`,
 | 
			
		||||
      {
 | 
			
		||||
        method: "POST",
 | 
			
		||||
        headers: {
 | 
			
		||||
          "Content-Type": "application/json",
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify([original_data_pdf]),
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
      .then((response) => {
 | 
			
		||||
        if (response.status != "200") {
 | 
			
		||||
          toast.hideToast();
 | 
			
		||||
          Toastify({
 | 
			
		||||
            text: $_("pdf-generation-failed"),
 | 
			
		||||
            duration: 3500,
 | 
			
		||||
            backgroundColor:
 | 
			
		||||
              "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
          }).showToast();
 | 
			
		||||
        } else {
 | 
			
		||||
          return response.blob();
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      .then((blob) => {
 | 
			
		||||
        const url = window.URL.createObjectURL(blob);
 | 
			
		||||
        let a = document.createElement("a");
 | 
			
		||||
        a.href = url;
 | 
			
		||||
        a.download =
 | 
			
		||||
          "Sponsoring_" +
 | 
			
		||||
          original_data.firstname +
 | 
			
		||||
          (original_data.middlename || "") +
 | 
			
		||||
          original_data.lastname +
 | 
			
		||||
          ".pdf";
 | 
			
		||||
        document.body.appendChild(a);
 | 
			
		||||
        a.click();
 | 
			
		||||
        a.remove();
 | 
			
		||||
        toast.hideToast();
 | 
			
		||||
        Toastify({
 | 
			
		||||
          text: $_("pdf-successfully-generated"),
 | 
			
		||||
          duration: 3500,
 | 
			
		||||
          backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
 | 
			
		||||
        }).showToast();
 | 
			
		||||
      })
 | 
			
		||||
      .catch((err) => {
 | 
			
		||||
        console.error(err);
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#await runner_promise}
 | 
			
		||||
@@ -207,64 +153,9 @@
 | 
			
		||||
              }}
 | 
			
		||||
              class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-400 text-base font-medium text-white sm:w-auto sm:text-sm">{$_('cancel')}</button>
 | 
			
		||||
          {/if}
 | 
			
		||||
          <div id="sponsoring:dropdown" class="relative inline-block">
 | 
			
		||||
            <div>
 | 
			
		||||
              <button
 | 
			
		||||
                on:click={() => {
 | 
			
		||||
                  sponsoring_contracts_download_open = !sponsoring_contracts_download_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-sponsoring-contract')}
 | 
			
		||||
                <svg
 | 
			
		||||
                  xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
                  width="24"
 | 
			
		||||
                  height="24"
 | 
			
		||||
                  viewBox="0 0 24 24"
 | 
			
		||||
                  class="-mr-1 ml-2 h-5 w-5"><path
 | 
			
		||||
                    fill="none"
 | 
			
		||||
                    d="M0 0h24v24H0z" />
 | 
			
		||||
                  <path
 | 
			
		||||
                    fill="currentColor"
 | 
			
		||||
                    d="M3 19h18v2H3v-2zm10-5.83l6.07-6.07 1.42 1.41L12 17 3.52 8.52l1.4-1.42L11 13.17V2h2v11.17z" /></svg>
 | 
			
		||||
              </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            {#if sponsoring_contracts_download_open}
 | 
			
		||||
              <div
 | 
			
		||||
                class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5"
 | 
			
		||||
                id="sponsoring:dropdown:menu">
 | 
			
		||||
                <div
 | 
			
		||||
                  class="py-1"
 | 
			
		||||
                  role="menu"
 | 
			
		||||
                  aria-orientation="vertical"
 | 
			
		||||
                  aria-labelledby="options-menu">
 | 
			
		||||
                  <span
 | 
			
		||||
                    class="block w-full text-left px-4 py-2 text-sm text-gray-700">{$_('select-language')}</span>
 | 
			
		||||
                  <button
 | 
			
		||||
                    on:click={() => {
 | 
			
		||||
                      generateSponsoringContract('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 inline-flex"
 | 
			
		||||
                    role="menuitem">
 | 
			
		||||
                    {$_('german')}
 | 
			
		||||
                  </button>
 | 
			
		||||
                  <button
 | 
			
		||||
                    on:click={() => {
 | 
			
		||||
                      generateSponsoringContract('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 inline-flex"
 | 
			
		||||
                    role="menuitem">
 | 
			
		||||
                    {$_('english')}
 | 
			
		||||
                  </button>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            {/if}
 | 
			
		||||
          </div>
 | 
			
		||||
          <GenerateSponsoringContracts
 | 
			
		||||
            bind:sponsoring_contracts_show
 | 
			
		||||
            bind:generate_runners />
 | 
			
		||||
          {#if !delete_triggered}
 | 
			
		||||
            <button
 | 
			
		||||
              on:click={() => {
 | 
			
		||||
@@ -378,13 +269,17 @@
 | 
			
		||||
            .toLowerCase()
 | 
			
		||||
            .includes(
 | 
			
		||||
              filterText.toLowerCase()
 | 
			
		||||
            ) || option.id.value.toString().startsWith(filterText.toLowerCase())}
 | 
			
		||||
            ) || option.id.value
 | 
			
		||||
            .toString()
 | 
			
		||||
            .startsWith(filterText.toLowerCase())}
 | 
			
		||||
        items={groups}
 | 
			
		||||
        showChevron={true}
 | 
			
		||||
        placeholder={$_('search-for-an-organization-or-team-by-name-or-id')}
 | 
			
		||||
        noOptionsMessage={$_('no-organization-or-team-found')}
 | 
			
		||||
        bind:selectedValue={group}
 | 
			
		||||
        on:select={(selectedValue) => {editable.group = selectedValue.detail.value.id}}
 | 
			
		||||
        on:select={(selectedValue) => {
 | 
			
		||||
          editable.group = selectedValue.detail.value.id;
 | 
			
		||||
        }}
 | 
			
		||||
        on:clear={() => (editable.group = null)} />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="text-sm w-full">
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,7 @@
 | 
			
		||||
  import RunnersEmptyState from "./RunnersEmptyState.svelte";
 | 
			
		||||
  import Select from "svelte-select";
 | 
			
		||||
  import Toastify from "toastify-js";
 | 
			
		||||
  import GenerateSponsoringContracts from "./GenerateSponsoringContracts.svelte";
 | 
			
		||||
  $: searchvalue = "";
 | 
			
		||||
  $: active_deletes = [];
 | 
			
		||||
  export let current_runners = [];
 | 
			
		||||
@@ -20,7 +21,10 @@
 | 
			
		||||
  $: filter__teams = selectedFilter_teams || [];
 | 
			
		||||
  $: filter__orgs = selectedFilter || [];
 | 
			
		||||
  $: filterGroupIDs = filter__teams.concat(filter__orgs).map((i) => i.value);
 | 
			
		||||
  $: sponsoring_contracts_download_open = false;
 | 
			
		||||
  $: sponsoring_contracts_show = current_runners.some(
 | 
			
		||||
    (r) => r.is_selected === true
 | 
			
		||||
  );
 | 
			
		||||
  $: generate_runners = current_runners.filter((r) => r.is_selected === true);
 | 
			
		||||
  $: teams = [];
 | 
			
		||||
  $: orgs = [];
 | 
			
		||||
  $: mappedteams = teams.map(function (g) {
 | 
			
		||||
@@ -31,14 +35,7 @@
 | 
			
		||||
      return { value: g.id, label: g.name };
 | 
			
		||||
    })
 | 
			
		||||
    .concat(mappedteams);
 | 
			
		||||
  document.addEventListener("click", function (e) {
 | 
			
		||||
    if (
 | 
			
		||||
      e.target.parentNode?.parentNode?.id != "sponsoring:dropdown" &&
 | 
			
		||||
      e.target.parentNode?.parentNode?.id != "sponsoring:dropdown:menu"
 | 
			
		||||
    ) {
 | 
			
		||||
      sponsoring_contracts_download_open = false;
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  RunnerTeamService.runnerTeamControllerGetAll().then((val) => {
 | 
			
		||||
    teams = val;
 | 
			
		||||
  });
 | 
			
		||||
@@ -51,56 +48,6 @@
 | 
			
		||||
    }
 | 
			
		||||
    return id.toString() === searchvalue;
 | 
			
		||||
  }
 | 
			
		||||
  function generateSponsoringContract(locale) {
 | 
			
		||||
    sponsoring_contracts_download_open = false;
 | 
			
		||||
    const toast = Toastify({
 | 
			
		||||
      text: $_("generating-pdf"),
 | 
			
		||||
      duration: -1,
 | 
			
		||||
    }).showToast();
 | 
			
		||||
    fetch(
 | 
			
		||||
      `${config.baseurl}/documents/contracts?locale=${locale}&download=true&key=${config.documentserver_key}`,
 | 
			
		||||
      {
 | 
			
		||||
        method: "POST",
 | 
			
		||||
        headers: {
 | 
			
		||||
          "Content-Type": "application/json",
 | 
			
		||||
        },
 | 
			
		||||
        body: JSON.stringify(
 | 
			
		||||
          current_runners.filter((r) => r.is_selected === true)
 | 
			
		||||
        ),
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
      .then((response) => {
 | 
			
		||||
        if (response.status != "200") {
 | 
			
		||||
          toast.hideToast();
 | 
			
		||||
          Toastify({
 | 
			
		||||
            text: $_("pdf-generation-failed"),
 | 
			
		||||
            duration: 3500,
 | 
			
		||||
            backgroundColor:
 | 
			
		||||
              "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
 | 
			
		||||
          }).showToast();
 | 
			
		||||
        } else {
 | 
			
		||||
          return response.blob();
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
      .then((blob) => {
 | 
			
		||||
        const url = window.URL.createObjectURL(blob);
 | 
			
		||||
        let a = document.createElement("a");
 | 
			
		||||
        a.href = url;
 | 
			
		||||
        a.download = "Sponsoring.pdf";
 | 
			
		||||
        document.body.appendChild(a);
 | 
			
		||||
        a.click();
 | 
			
		||||
        a.remove();
 | 
			
		||||
        toast.hideToast();
 | 
			
		||||
        Toastify({
 | 
			
		||||
          text: $_("pdf-successfully-generated"),
 | 
			
		||||
          duration: 3500,
 | 
			
		||||
          backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
 | 
			
		||||
        }).showToast();
 | 
			
		||||
      })
 | 
			
		||||
      .catch((err) => {
 | 
			
		||||
        console.error(err);
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:GET')}
 | 
			
		||||
@@ -136,66 +83,9 @@
 | 
			
		||||
          isMulti={true} />
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="h-12">
 | 
			
		||||
        {#if current_runners.some((r) => r.is_selected === true)}
 | 
			
		||||
          <div id="sponsoring:dropdown" class="relative inline-block">
 | 
			
		||||
            <div>
 | 
			
		||||
              <button
 | 
			
		||||
                on:click={() => {
 | 
			
		||||
                  sponsoring_contracts_download_open = !sponsoring_contracts_download_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-sponsoring-contracts')}
 | 
			
		||||
                <svg
 | 
			
		||||
                  xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
                  width="24"
 | 
			
		||||
                  height="24"
 | 
			
		||||
                  viewBox="0 0 24 24"
 | 
			
		||||
                  class="-mr-1 ml-2 h-5 w-5"><path
 | 
			
		||||
                    fill="none"
 | 
			
		||||
                    d="M0 0h24v24H0z" />
 | 
			
		||||
                  <path
 | 
			
		||||
                    fill="currentColor"
 | 
			
		||||
                    d="M3 19h18v2H3v-2zm10-5.83l6.07-6.07 1.42 1.41L12 17 3.52 8.52l1.4-1.42L11 13.17V2h2v11.17z" /></svg>
 | 
			
		||||
              </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            {#if sponsoring_contracts_download_open}
 | 
			
		||||
              <div
 | 
			
		||||
                class="origin-top-right absolute right-0 mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5"
 | 
			
		||||
                id="sponsoring:dropdown:menu">
 | 
			
		||||
                <div
 | 
			
		||||
                  class="py-1"
 | 
			
		||||
                  role="menu"
 | 
			
		||||
                  aria-orientation="vertical"
 | 
			
		||||
                  aria-labelledby="options-menu">
 | 
			
		||||
                  <span
 | 
			
		||||
                    class="block w-full text-left px-4 py-2 text-sm text-gray-700">{$_('select-language')}</span>
 | 
			
		||||
                  <button
 | 
			
		||||
                    on:click={() => {
 | 
			
		||||
                      generateSponsoringContract('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')}
 | 
			
		||||
                  </button>
 | 
			
		||||
                  <button
 | 
			
		||||
                    on:click={() => {
 | 
			
		||||
                      generateSponsoringContract('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')}
 | 
			
		||||
                  </button>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            {/if}
 | 
			
		||||
          </div>
 | 
			
		||||
        {/if}
 | 
			
		||||
        <GenerateSponsoringContracts
 | 
			
		||||
          bind:sponsoring_contracts_show
 | 
			
		||||
          bind:generate_runners />
 | 
			
		||||
      </div>
 | 
			
		||||
      <div
 | 
			
		||||
        class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user