From d89191b7f7985afb63b71b2af54fc768e91a39ed Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Thu, 12 Mar 2026 16:28:48 +0100 Subject: [PATCH] update bundles --- public/dist/js/apps/Abgabetool/Abgabetool.js | 2 +- public/dist/js/apps/Abgabetool/Abgabetool.js.map | 2 +- public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js | 4 ++-- public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js.map | 2 +- public/dist/js/apps/Cis/ProfilUpdateRequests.js | 4 ++-- public/dist/js/apps/Cis/ProfilUpdateRequests.js.map | 2 +- public/dist/js/apps/Dashboard/Fhc.js | 2 +- public/dist/js/apps/Dashboard/Fhc.js.map | 2 +- public/dist/js/apps/LVVerwaltung.js | 2 +- public/dist/js/apps/LVVerwaltung.js.map | 2 +- public/dist/js/apps/LogsViewer/LogsViewer.js | 2 +- public/dist/js/apps/LogsViewer/LogsViewer.js.map | 2 +- public/dist/js/apps/Messages/NewMessage.js | 2 +- public/dist/js/apps/Messages/NewMessage.js.map | 2 +- public/dist/js/apps/Nachrichten.js | 4 ++-- public/dist/js/apps/Nachrichten.js.map | 2 +- public/dist/js/apps/Studentenverwaltung.js | 4 ++-- public/dist/js/apps/Studentenverwaltung.js.map | 2 +- public/dist/js/apps/Vertragsverwaltung.js | 2 +- public/dist/js/apps/Vertragsverwaltung.js.map | 2 +- public/dist/js/apps/lehre/lvplanung/LvTemplates.js | 4 ++-- public/dist/js/apps/lehre/lvplanung/LvTemplates.js.map | 2 +- 22 files changed, 27 insertions(+), 27 deletions(-) diff --git a/public/dist/js/apps/Abgabetool/Abgabetool.js b/public/dist/js/apps/Abgabetool/Abgabetool.js index e0ab72c77..f40178fd9 100644 --- a/public/dist/js/apps/Abgabetool/Abgabetool.js +++ b/public/dist/js/apps/Abgabetool/Abgabetool.js @@ -1,4 +1,4 @@ import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import a from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";import n from"../../../../js/components/vueDatepicker.js.php";var r={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},o={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const i={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",i)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},s={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},l={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},d={abmeldung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const i="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(i)},create(t,e,i,a,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:i,datum_wiedereinstieg:a,attachment:n},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,i){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},p={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},c={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:a,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:a,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:a}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:a})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,a=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...a?{fileID:a}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},u={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},h={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+a)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+a)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+a)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+a)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:a,ausbildungssemester:n},r){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+a+"/"+n,r)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,a){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,a)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:a,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:a},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:a})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:a})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,a){const n=a?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},g={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},b={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},f={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},m={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},v={person:g,prestudent:b,mitarbeiter:f,anrechnung:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:m,projektphase:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},A={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},y={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},a="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(a,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},$={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,a,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:a,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},_={content(t,e=null,i=null,a=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...a?{sichtbar:a}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},w={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},z={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},k={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},T={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},S={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,a=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:a})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},F={search:r,phrasen:o,navigation:s,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:l,studstatus:d,profil:p,profilUpdate:c,lvPlan:u,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:a=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:h,notiz:v,betriebsmittel:A,checkperson:y,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:$,cms:_,lehre:w,addons:z,messages:k,vorlagen:T,addons:z,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+i.person_id)},getAllContractsNotAssigned(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+i.person_id)},getAllContractsAssigned(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+i.person_id+"/"+i.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+i.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:S,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},x={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,a){if("string"==typeof t&&void 0===a)[e,i,a]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===a&&(a=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},a?a.form=t:a={form:t}}return[e,i,a]}function a(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const a of i)t.FormData.append(e+(i.length>1?"[]":""),a);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(a=>t.FormData.append(e+(i.length>1?"[]":""),a)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),a(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,a,r)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,a,r]=i(t,e,a,r),a&&(r?r.params=a:r={params:a}),n.get(e,r)),post:(t,e,a,r)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,a,r]=i(t,e,a,r),n.post(e,a,r)),_defaultErrorHandlers:{validation(e,i){const a=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(a.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>a.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>a.alertDefault("error",t,e,!0)),!1)},general(e,i){const a=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?a.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):a.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var a="";switch(a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,a,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,a,!0);break;default:a="Type: PHP "+e.severity+"\n\n"+a,i.alertSystemError(a)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var a="";a+="Type: "+e.class+"\n\n",a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),i.alertSystemError(a)},db(e){const i=t.config.globalProperties.$fhcAlert;var a="";void 0!==e.heading&&(a+=e.heading+"\n\n"),void 0!==e.code&&(a+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(a+="SQL: "+e.sql+"\n\n"),void 0!==e.message?a+="Message: "+e.message+"\n\n":void 0!==e.messages&&(a+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(a+="Filename: "+e.filename+"\n"),void 0!==e.line&&(a+="Line Number: "+e.line+"\n"),i.alertSystemError(a)},auth(e,i){const a=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?a.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):a.alertDefault("error",e.message,n)}}};class r{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,a,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,a,n)),post:(e,i,a,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,a,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new r(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const o=new r(F);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),o.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=o,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const C="error",D="retval",O={get:function(t,e,i=null){return O._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return O._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(C)||!t.hasOwnProperty(D)||0!=t.error)},isError:function(t){return!O.isSuccess(t)},hasData:function(t){return!(!O.isSuccess(t)||!("object"==typeof t[D]&&Object.keys(t[D]).length>0||"array"==typeof t[D]&&t[D].length>0||"string"==typeof t[D]&&""!=t[D].trim()||"number"==typeof t[D]))},getData:function(t){return O.hasData(t)?t[D]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(D)?t[D]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(C)?t[C]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,a){let n={method:i,url:O._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof a)for(var r in a)n[r]=a[r];return axios(n)}},P=document.createElement("div"),E=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){P.parentElement.removeChild(P)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});E.use(t),E.use(a);const j=E.mount(P);document.body.appendChild(P);var B={install:(t,e)=>{t.config.globalProperties.$p||t.use(U);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);j.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);j.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);j.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);j.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);j.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{j.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,a)=>{j.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,a=!1,n=!1){let r={severity:t,summary:e,detail:i,html:n};a||(r.life=3e3),j.$refs.toast.add(r)},alertMultiple(t,e="info",i="Info",a=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,a,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let a=O.getError(t.response.data);"object"!=typeof a&&(a=t.response.data),i.resetFormValidation(e);const n=Object.entries(a).filter(([t,i])=>{const a=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!a||(a.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),r=e.querySelector("[data-fhc-form-error]");return void(r&&n.length?r.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=O.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},M={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(B);let a={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function a(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const a=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,a])=>{if("_default"==t){await i.loadCategory("dashboard");t='
'+i.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=a.length,t+"
"+a.join("
")+"
"}));return{counter:e,msgs:a}}let n,r;Array.isArray(e)?({counter:n,msgs:r}=await a(e)):({counter:n,msgs:r}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:r,msgs:o}=await a(i);return n.counter+=r,n.msgs.push("
"+e+"
"+o.join("")+"
"),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const o=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",o,"
"+r.join("")+"
",!0,!0)},php(e){i(e,(e,i)=>{var a="";switch(a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,a,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,a,!0);break;default:a="Type: PHP "+e.severity+"\n\n"+a,i&&(a=i+"\n\n"+a),t.config.globalProperties.$fhcAlert.alertSystemError(a)}})},exception(e){i(e,(e,i)=>{var a="";i&&(a+=i+"\n\n"),a+="Type: "+e.class+"\n\n",a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(a)})},db(e){i(e,(e,i)=>{var a="";i&&(a+=i+"\n\n"),void 0!==e.heading&&(a+=e.heading+"\n\n"),void 0!==e.code&&(a+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(a+="SQL: "+e.sql+"\n\n"),void 0!==e.message?a+="Message: "+e.message+"\n\n":void 0!==e.messages&&(a+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(a+="Filename: "+e.filename+"\n"),void 0!==e.line&&(a+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(a)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var a="";a+="Controller name: "+e.controller+"\n",a+="Method name: "+e.method+"\n",a+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,a,!0)})}}};function n(t,e,i,a){if("string"==typeof t&&void 0===a)[e,i,a]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===a&&(a=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},a?a.form=t:a={form:t}}return[e,i,a]}function r(t){if("string"==typeof t.data||t.data instanceof String)return r({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function o(t){if(!1===t||"off"===t)return{...a,success:!1,fail:!1};if(!t||!0===t)return{...a};if("success"===t)return{...a,fail:!1};if("fail"===t)return{...a,success:!1};const{success:e,fail:i,handler:n,combine:r}=t;return t={...a},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:r}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function s(t){const e=o(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const i={},a=[];if(null==e)return{};for(;e.length;)a.push(e.pop());for(var n of a){let a=n.type,o=null;for(var r in t.combine){let e=t.combine[r].includes(a),i=t.handler[r];if(e&&i&&(o=r,"form"==o))break}o&&(a=o);t.handler[a]?(i[a]||(i[a]=[]),Array.isArray(n)?i[a].push(...n):i[a].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(a=o(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const a of i)t.FormData.append(e+(i.length>1?"[]":""),a);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(a=>t.FormData.append(e+(i.length>1?"[]":""),a)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),r(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=s(t.config);if(!e.fail)return Promise.reject(t);const i=l(t),a=d(e,i);for(var n in a)e.handler[n](a[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,i,a)=>([e,i,a]=n(t,e,i,a),i&&(a?a.params=i:a={params:i}),p.get(e,a)),post:(t,e,i,a)=>([e,i,a]=n(t,e,i,a),p.post(e,i,a)),call(e,i,a){if(Array.isArray(e)){const r=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),r.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(a,void 0,void 0,i||{}),r=s(e);if(!r.success&&!r.fail)return t;const o={};for(var p of t){const[t,e]="fulfilled"===p.status?[r.success,p.value]:[r.fail,p.reason];if(!t)return;const i=d(r,l(e));for(var c in i)o[c]?o[c][e.config.errorHeader]=i[c]:o[c]={[e.config.errorHeader]:i[c]}}for(var u in o)r.handler[u](o[u]);return t})}let{method:r,url:o,params:p,config:c}=e;return void 0!==i&&(c=i),r||(r="get"),r.toLowerCase&&(r=r.toLowerCase()),"get"==r?this.get(a,o,p,c):"post"==r?this.post(a,o,p,c):void console.error("FhcApi: method not allowed:",r)},getErrorHandler:t=>s(t)},t.provide("$api",t.config.globalProperties.$api)}},N={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const R=Vue.reactive({}),L={};let V=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),I=Vue.computed(()=>V.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==V.value).LC_Time:null);const H={user_language:V,user_locale:I,setLanguage(t){const e=Object.keys(R);return this.config.globalProperties.$api.call(N.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{R[t.category][t.phrase]=t.text}),V.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(L[t]||(L[t]=this.config.globalProperties.$api.call(N.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{R[t]=e})),L[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let a=Vue.computed(()=>R[t]?function(t,e,i){let a=R[t][e];return a?(i&&(a=a.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),a):"<< PHRASE "+e+">>"}(t,e,i):"");return R[t]||this.loadCategory(t),a.value}};var U={install(t,e){t.config.globalProperties.$fhcApi||t.use(x),t.config.globalProperties.$api||t.use(M),t.config.globalProperties.$p={t:H.t,loadCategory:e=>H.loadCategory.call(t,e),setLanguage:e=>H.setLanguage.call(t,e),user_language:V,user_locale:I,t_ref:H.t_ref},t.provide("$p",t.config.globalProperties.$p)}},G=Object.freeze({__proto__:null,default:U,user_locale:I}),q={components:{DmsItem:{emits:["delete"],props:{modelValue:{type:[File,Object],required:!0}},data:()=>({preview:""}),watch:{modelValue(t){"application/x.fhc-dms+json"==t.type&&t.text().then(t=>{const e=JSON.parse(t);this.preview=e.preview||""})}},template:'\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • '}},emits:["update:modelValue"],props:{modelValue:{type:[FileList,Array],required:!0},multiple:Boolean,id:String,name:String,inputClass:[String,Array,Object],noList:Boolean,accept:{type:String,default:""},disabled:{type:Boolean,default:!1}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),addFiles(t){if(!this.multiple)return this.$emit("update:modelValue",t.target.files);const e=new DataTransfer,i=[];for(var a of this.modelValue)e.items.add(a),i.push(this.stringifyFile(a));for(var a of t.target.files)i.indexOf(this.stringifyFile(a))<0&&e.items.add(a);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],i=new DataTransfer;for(var a of this.modelValue)a!==e&&i.items.add(a);this.$emit("update:modelValue",i.files)}},watch:{modelValue(t){if(!t)return;if(t instanceof FileList){if(!this.$refs.upload)return;return this.$refs.upload.files=t}const e=new DataTransfer;for(var i of t)if(i instanceof File)e.items.add(i);else{const t=new File([JSON.stringify(i)],i.name,{type:"application/x.fhc-dms+json"});e.items.add(t)}this.$emit("update:modelValue",e.files)}},template:'\n\t
    \n\t\t\n\t\t\n\t
    '},J={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal","toggleFullscreen"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen,this.$emit("toggleFullscreen")}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,a){const n=this,r={};void 0!==t&&(r.default=()=>t),void 0!==i&&(r.title=()=>i),void 0!==a&&(r.footer=()=>a);let o=!1;return"undefined"!=typeof primevue&&(o=!0),new Promise((t,i)=>{const a=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":a.unmount},r),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){s.parentElement.removeChild(s)}}),s=document.createElement("div");o&&a.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return G}).then(t=>{a.use(t.default),a.mount(s),document.body.appendChild(s)})})},template:''},Z={getConfig:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getConfig"}),getConfigStudent:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getConfigStudent"}),getStudentProjektarbeiten:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudentProjektarbeiten",params:{uid:t}}),getStudentProjektabgaben:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudentProjektabgaben",params:{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid}}),postStudentProjektarbeitEndupload:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),postStudentProjektarbeitZwischenabgabe:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),getMitarbeiterProjektarbeiten:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten",params:{showall:t}}),postProjektarbeitAbgabe(t){let e=t.datum;if(t.datum instanceof Date){e=`${t.datum.getFullYear()}-${String(t.datum.getMonth()+1).padStart(2,"0")}-${String(t.datum.getDate()).padStart(2,"0")}`}return{method:"post",url:"/api/frontend/v1/Abgabe/postProjektarbeitAbgabe",params:{paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:e,note:t.note_pk,upload_allowed:!!t.upload_allowed,beurteilungsnotiz:t.beurteilungsnotiz??"",fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.betreuer_person_id}}},deleteProjektarbeitAbgabe:t=>({method:"post",url:"/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe",params:{paabgabe_id:t}}),postSerientermin:(t,e,i,a,n,r,o)=>({method:"post",url:"/api/frontend/v1/Abgabe/postSerientermin",params:{datum:t,paabgabetyp_kurzbz:e,bezeichnung:i,kurzbz:a,upload_allowed:n,projektarbeit_ids:r,fixtermin:o}}),fetchDeadlines:t=>({method:"post",url:"/api/frontend/v1/Abgabe/fetchDeadlines",params:{person_id:t}}),getPaAbgabetypen:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getPaAbgabetypen"}),getNoten:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getNoten"}),getProjektarbeitenForStudiengang:(t,e=0)=>({method:"get",url:"/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang",params:{studiengang_kz:t,benotet:e}}),getStudiengaenge:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudiengaenge"}),postStudentProjektarbeitZusatzdaten:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),getSignaturStatusForProjektarbeitAbgaben:(t,e)=>({method:"post",url:"/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben",params:{paabgabe_ids:t,student_uid:e}})};const W={name:"FhcOverlay",props:{active:{type:Boolean,default:!1}},template:'\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t'},Y={name:"AbgabeStudentDetail",components:{Upload:q,BsModal:J,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,Accordion:primevue.accordion,AccordionTab:primevue.accordiontab,Message:primevue.message,Inplace:primevue.inplace,VueDatePicker:n,FhcOverlay:W},inject:["notenOptions","isMobile","isViewMode","moodle_link"],props:{projektarbeit:{type:Object,default:null},viewMode:{type:Boolean,default:!1}},data:()=>({loading:!1,eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}),methods:{getNoteBezeichnung(t){const e=this.notenOptions.find(e=>e.note==t.note);return e?.bezeichnung?e?.positiv?this.$capitalize(this.$p.t("abgabetool/c4positivBenotet"))+" ✅":this.$capitalize(this.$p.t("abgabetool/c4negativBenotet"))+" ❌":!0!==e?.benotbar||t.note?"":this.$capitalize(this.$p.t("abgabetool/c4notYetGraded"))},async validate(t,e=!1){return t.file.length?!e||!1!==await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/confirmEnduploadSpeichern"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"p-button-primary",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"p-button-secondary"}):(this.$fhcAlert.alertWarning(this.$capitalize(this.$p.t("global/warningChooseFile"))),!1)},async triggerEndupload(){if(!await this.validate(this.enduploadTermin,!0))return!1;const t=new FormData;t.append("paabgabetyp_kurzbz",this.enduploadTermin.paabgabetyp_kurzbz),t.append("projektarbeit_id",this.enduploadTermin.projektarbeit_id),t.append("paabgabe_id",this.enduploadTermin.paabgabe_id),t.append("student_uid",this.projektarbeit.student_uid),t.append("bperson_id",this.projektarbeit.bperson_id),t.append("sprache",this.form.sprache.sprache),t.append("abstract",this.form.abstract),t.append("abstract_en",this.form.abstract_en),t.append("schlagwoerter",this.form.schlagwoerter),t.append("schlagwoerter_en",this.form.schlagwoerter_en),t.append("seitenanzahl",this.form.seitenanzahl);for(let e=0;e{this.handleUploadRes(t,this.enduploadTermin)}).finally(()=>{this.loading=!1}),this.$refs.modalContainerEnduploadZusatzdaten.hide()},downloadAbgabe(t){const e=`/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;window.open(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+e)},formatDate(t){const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},async upload(t){if(!await this.validate(t))return!1;if("end"===t.bezeichnung?.paabgabetyp_kurzbz)this.enduploadTermin=t,this.$refs.modalContainerEnduploadZusatzdaten.show();else{const e=new FormData;e.append("paabgabetyp_kurzbz",t.paabgabetyp_kurzbz),e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("paabgabe_id",t.paabgabe_id),e.append("student_uid",this.projektarbeit.student_uid),e.append("bperson_id",this.projektarbeit.bperson_id);for(let i=0;i{this.handleUploadRes(e,t)}).finally(()=>{this.loading=!1})}},handleUploadRes(t,e){"success"==t.meta.status?(this.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t("abgabetool/c4fileUploadSuccessv3"))),e.abgabedatum=(new Date).toISOString().split("T")[0],void 0!==t?.data?.signatur&&(e.signatur=t.data.signatur)):this.$fhcAlert.alertError(this.$capitalize(this.$p.t("abgabetool/c4fileUploadErrorv3"))),t.meta.signaturInfo&&this.$fhcAlert.alertInfo(t.meta.signaturInfo)},getOptionLabel:t=>t.sprache,getTerminNoteBezeichnung(t){const e=this.notenOptions.find(e=>e.note==t.note);return e?e.bezeichnung:""}},watch:{projektarbeit(t){this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract??"",this.form.abstract_en=t.abstract_en??"",this.form.schlagwoerter=t.schlagwoerter??"",this.form.schlagwoerter_en=t.schlagwoerter_en??"",this.form.kontrollschlagwoerter=t.kontrollschlagwoerter??"",this.form.seitenanzahl=t.seitenanzahl??1}},computed:{getMoodleLink(){return this.moodle_link+this.projektarbeit.studiengang_kz},getMessagePtStyle:()=>({root:{style:{margin:"0px"}},wrapper:{style:{padding:"6px"}}}),getEid(){return this.$capitalize(this.$p.t("abgabetool/c4eidesstattlicheErklaerung"))},allowedToSaveZusatzdaten(){return this.form.schlagwoerter.length>0&&this.form.schlagwoerter_en.length>0&&this.form.abstract.length>0&&this.form.abstract_en.length>0&&this.form.seitenanzahl>0},getAllowedToSendEndupload(){return this.eidAkzeptiert&&this.allowedToSaveZusatzdaten},qualityGateTerminAvailable(){let t=!1;return this.projektarbeit?.abgabetermine.forEach(e=>{"qualgate1"!=e.paabgabetyp_kurzbz&&"qualgate2"!=e.paabgabetyp_kurzbz||(t=!0)}),t},getTooltipVerspaetet(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipVerspaetet")),class:"custom-tooltip"}},getTooltipVerpasst(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipVerpasst")),class:"custom-tooltip"}},getTooltipAbzugeben(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbzugeben")),class:"custom-tooltip"}},getTooltipStandard(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipStandardv2")),class:"custom-tooltip"}},getTooltipAbgegeben(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgegeben")),class:"custom-tooltip"}},getTooltipFixtermin(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipFixtermin")),class:"custom-tooltip"}},getTooltipAbgabeDetected(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgabeDetected")),class:"custom-tooltip"}},getTooltipNotAllowedToUpload(){return this.isViewMode?{value:this.$capitalize(this.$p.t("abgabetool/c4studentAbgabeNotAllowedInViewMode")),class:"custom-tooltip"}:{value:this.$capitalize(this.$p.t("abgabetool/c4studentAbgabeNotAllowedRegular")),class:"custom-tooltip"}},getTooltipBeurteilungerforderlich(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipBeurteilungerforderlich")),class:"custom-tooltip"}},getTooltipBestanden(){return{value:this.$p.t("abgabetool/c4tooltipBestanden"),class:"custom-tooltip"}},getTooltipNichtBestanden(){return{value:this.$p.t("abgabetool/c4tooltipNichtBestanden"),class:"custom-tooltip"}}},created(){},mounted(){},template:'\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t(\'abgabetool/c4abgabeStudentenbereich\') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'person/student\') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'abgabetool/c4titel\') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'abgabetool/c4betreuerv2\') ) }}: {{projektarbeit ? $p.t(\'abgabetool/c4betrart\' + projektarbeit.betreuerart_kurzbz) + \' \' + projektarbeit.betreuer : \'\'}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t(\'abgabetool/c4checkoutStgMoodleInfos\') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t(\'abgabetool/c4keineAbgabetermineGefunden\') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n '},K="Europe/Vienna",Q=luxon.DateTime.now().setZone(K);function X(t,e){const i=luxon.DateTime.fromISO(t.datum,{zone:K}).endOf("day"),a=t.abgabedatum?luxon.DateTime.fromISO(t.abgabedatum,{zone:K}):null;t.diffindays=i.diff(Q,"days").days;const n=a&&a>i;if(t.note){const i="object"==typeof t.note?t.note:e.find(e=>e.note==t.note);if(!0===i?.positiv)return"bestanden";if(!1===i?.positiv)return"nichtbestanden"}return t.bezeichnung?.benotbar&&i<=Q?"beurteilungerforderlich":t.upload_allowed?t.abgabedatum?n?"verspaetet":"abgegeben":ithis.notenOptions),isViewMode:Vue.computed(()=>this.isViewMode),moodle_link:Vue.computed(()=>this.moodle_link)}},props:{student_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({uid:""}),validator:t=>t&&t.uid}},data:()=>({activeTabIndex:[0],abgabeTypeOptions:null,phrasenPromise:null,phrasenResolved:!1,loading:!1,notenOptions:null,detail:null,projektarbeiten:null,selectedProjektarbeit:null,moodle_link:null}),methods:{checkQualityGatesStrict(t){let e=!1,i=!1;return t.forEach(t=>{const a=this.notenOptions?.find(e=>e.note==t.note);a&&a.positiv&&("qualgate1"==t.paabgabetyp_kurzbz?e=!0:"qualgate2"==t.paabgabetyp_kurzbz&&(i=!0))}),e&&i},checkQualityGatesOptional(t){const e=t.find(t=>"qualgate1"==t.paabgabetyp_kurzbz),i=t.find(t=>"qualgate2"==t.paabgabetyp_kurzbz);let a=!0;e&&(a=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate1"==t.paabgabetyp_kurzbz&&(a=!0)}));let n=!0;return i&&(n=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate2"==t.paabgabetyp_kurzbz&&(n=!0)})),a&&n},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){this.loading=!0,this.loadAbgaben(t).then(e=>{const i=this.projektarbeiten?.find(e=>e.projektarbeit_id==t.projektarbeit_id);i.abgabetermine=e.data[0].retval;const a=null!==i.note;i.abgabetermine.forEach(t=>{if(t.file=[],t.allowedToUpload=!1,"end"==t.paabgabetyp_kurzbz){const e=!t.fixtermin||!this.isPastDate(t.datum);t.allowedToUpload=e&&this.checkQualityGatesOptional(i.abgabetermine)}else t.fixtermin?t.allowedToUpload=!this.isPastDate(t.datum):t.allowedToUpload=t.upload_allowed;a&&(t.allowedToUpload=!1),t.bezeichnung=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz===t.paabgabetyp_kurzbz),t.dateStyle=X(t,this.notenOptions)}),i.betreuer=this.buildBetreuer(i),i.student_uid=this.student_uid,this.selectedProjektarbeit=i,this.$refs.modalContainerAbgabeDetail.show()}).finally(()=>{this.loading=!1})},centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",detailFormatter(t){const e=t.getValue();return"detailTermine"===e.mode?'
    ':"beurteilungDownload"===e.mode?'
    ':void 0},mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",buildMailToLink:t=>"mailto:"+t.email,buildBetreuer:t=>(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),async setupData(t){const e=t[0]??null;e&&(this.projektarbeiten=e.map(t=>({...t,details:{student_uid:this.student_uid,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.bperson_id,betreuerart_kurzbz:t.betreuerart_kurzbz,mode:"detailTermine"},beurteilung1:t.downloadLink1??null,beurteilung2:t.downloadLink2??null,sem:t.studiensemester_kurzbz,stg:t.kurzbzlang,mail:this.buildMailToLink(t),betreuer:this.buildBetreuer(t),typ:t.projekttypbezeichnung,titel:t.titel})))},loadProjektarbeiten(){this.$api.call(Z.getStudentProjektarbeiten(this.student_uid)).then(t=>{t?.data&&this.setupData(t.data)})},loadAbgaben(t){return new Promise(e=>{this.$api.call(Z.getStudentProjektabgaben(t)).then(t=>{e(t)})})},async setupMounted(){this.loadProjektarbeiten()},getAccTabHeaderForProjektarbeit(t){let e="";return e+=t.titel??this.$p.t("abgabetool/keinTitel"),e},getMailLink:t=>t.email?"mailto:"+t.email:"",getNoteBezeichnung(t){if(t.note&&this.notenOptions){const e=this.notenOptions.find(e=>e.note==t.note);return e?.bezeichnung}return""},handleDownloadBeurteilung1(t){window.open(t.beurteilung1)},handleDownloadBeurteilung2(t){window.open(t.beurteilung2)}},watch:{},computed:{isViewMode(){return this.student_uid!==this.viewData.uid},student_uid(){return this.student_uid_prop||this.viewData?.uid||null}},async created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0}),this.loading=!0,await this.$api.call(Z.getNoten()).then(t=>{"success"==t.meta.status&&(this.notenOptions=t.data[0],this.allowedNotenOptions=this.notenOptions.filter(e=>t.data[1].includes(e.note)))}).finally(()=>{this.loading=!1}),this.$api.call(Z.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1}),this.$api.call(Z.getConfigStudent()).then(t=>{this.moodle_link=t.data?.moodle_link}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\n '},et={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},it="Filter Component New Filter";var at={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let i=e.type.toLowerCase();return i.indexOf("int")>=0?t[e.name]="Numeric":i.indexOf("varchar")>=0||i.indexOf("text")>=0||i.indexOf("bpchar")>=0?t[e.name]="Text":i.indexOf("timestamp")>=0||i.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=it);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:it})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},nt={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const rt={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},ot={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var st={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let n=[];for(var e in t){var i,a=t[e];a&&("[object String]"===Object.prototype.toString.call(a)?null!==(i=this.stringToFileFormatter(a))?n.push({icon:"fa-solid "+rt[i],label:a===e?ot[i]:e,formatter:i}):null!==(i=this.stringToFileFormatter(e))?n.push({icon:"fa-solid "+rt[i],label:a,formatter:i}):alert("neither "+e+" nor "+a+" are supported download file types"):"object"!=typeof a||Array.isArray(a)?null!==(i=this.stringToFileFormatter(e))?n.push({icon:"fa-solid "+rt[i],label:ot[i],formatter:i}):alert(e+" is not a supported download file type"):null!==(i=this.stringToFileFormatter(e))?(void 0===a.formatter&&(a.formatter=i),void 0===a.label&&(a.label=ot[i]),void 0===a.icon&&(a.icon=rt[i]),n.push(a)):(void 0===a.label&&(a.label=e),n.push(a)))}t=n}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+rt[e],label:ot[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const lt=new WeakMap;var dt={mounted(t,e){let i=!1;lt.set(t,e=>{if(!i)return;if(t.contains(e.target))return;const a=bootstrap.Collapse.getInstance(t);a&&a.hide()}),t.addEventListener("shown.bs.collapse",()=>{i=!0}),t.addEventListener("hide.bs.collapse",()=>{i=!1}),document.addEventListener("click",lt.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",lt.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var i=0,a=this.table.rowManager.element.clientWidth,n=0,r=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(r=t),t.visible&&(i+=t.getWidth())}),r?(n=a-i+r.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(r.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?r.setWidth(n):r.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var pt={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},ct=0;const ut={components:{CoreFetchCmpt:et,FilterConfig:at,FilterColumns:nt,TableDownload:st},directives:{collapseAutoClose:dt},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],i=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(i=this.tabulatorOptions.columns),!Array.isArray(i)||Array.isArray(i)&&i.length=0,i.push(t)}}else for(let a of i)a.visible=e.indexOf(a.field)>=0||-1==t.indexOf(a.field),a.hasOwnProperty("resizable")&&(a.resizable=a.visible);return i},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,i=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(pt.getFilter(t)),null,i):this.startFetchCmpt(t=>this.$api.call(pt.getFilterById(t)),{filterId:e},i)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let i=0;i{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(pt.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(pt.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(pt.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(pt.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,i=t.currentTarget.getAttribute("href");e=null==i?t.currentTarget.value:i.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(pt.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let i=e[this.parentIdField];for(let a=0;a{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'},ht={name:"AbgabeMitarbeiterDetail",components:{BsModal:J,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,SpeedDial:primevue.speeddial,Accordion:primevue.accordion,AccordionTab:primevue.accordiontab,Message:primevue.message,VueDatePicker:n},emits:["paUpdated"],inject:["abgabeTypeOptions","abgabetypenBetreuer","allowedNotenOptions","notenOptionsNonFinal","turnitin_link","old_abgabe_beurteilung_link"],props:{projektarbeit:{type:Object,default:null},isFullscreen:{type:Boolean,default:!1},assistenzMode:{type:Boolean,default:!1}},data(){return{showAutomagicModalPhrase:!1,eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,speedDialItems:[{label:Vue.computed(()=>this.$p.t("abgabetool/c4newAbgabetermin")),icon:"fa fa-plus",command:this.openCreateNewAbgabeModal,disabled:Vue.computed(()=>!this.getAllowedToCreateNewTermin)},{label:Vue.computed(()=>this.$p.t("abgabetool/c4benoten")),icon:"fa fa-user-check",command:this.openBenotung,disabled:Vue.computed(()=>1==this.assistenzMode)},{label:Vue.computed(()=>this.$p.t("abgabetool/c4plagiatcheck_link")),icon:"fa fa-clipboard-check",command:this.openPlagiatcheck},{label:Vue.computed(()=>this.$p.t("abgabetool/c4student_perspective")),icon:"fa fa-eye",command:this.openStudentPage}],newTermin:null,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}},methods:{getNoteBezeichnung(t){return t.noteBackend?.bezeichnung?t.noteBackend?.positiv?this.$capitalize(this.$p.t("abgabetool/c4positivBenotet"))+" ✅":this.$capitalize(this.$p.t("abgabetool/c4negativBenotet"))+" ❌":!0!==t.bezeichnung?.benotbar||t.noteBackend?"":this.$capitalize(this.$p.t("abgabetool/c4notYetGraded"))},getPlaceholderTermin(t){return t?.bezeichnung?this.$p.t("abgabetool/c4paatyp"+t.paabgabetyp_kurzbz):this.$p.t("abgabetool/abgabetypPlaceholder")},saveTermin(t){return t.paabgabe_id,t.note_pk=t.note?.note??null,t.betreuer_person_id=this.projektarbeit.betreuer_person_id,t.fixtermin=!t.invertedFixtermin,this.$api.call(Z.postProjektarbeitAbgabe(t)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert"));const i=this.allowedNotenOptions.find(t=>t.note==e.data[0].note),a={allowedToSave:!0,allowedToDelete:!0,...e.data[0]};a.note&&(a.note=i,a.noteBackend=i),a.invertedFixtermin=!a.fixtermin;const n=e.data[1],r=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==a.paabgabetyp_kurzbz);if(a.bezeichnung={bezeichnung:t.bezeichnung?.bezeichnung,paabgabetyp_kurzbz:t.bezeichnung?.paabgabetyp_kurzbz,benotbar:r.benotbar},n){const e=this.allowedNotenOptions.find(t=>t.note==n.note);n.note=e,t.paabgabetyp_kurzbz=a.paabgabetyp_kurzbz,t.noteBackend=i,t.dateStyle=X(t,this.notenOptions)}else a.dateStyle=X(a,this.notenOptions),this.projektarbeit.abgabetermine.push(a);this.projektarbeit.abgabetermine.sort((t,e)=>new Date(t.datum)-new Date(e.datum)),this.projektarbeit.abgabetermine.findIndex(e=>t.paabgabe_id==e.paabgabe_id);const o=!n&&!a.note?.positiv&&null!==a.note,s=n&&!a.note?.positiv&&null!==a.note&&(n.note?.positiv||void 0===n.note);o||s?(this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:!1,paabgabetyp_kurzbz:"",bezeichnung:this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===a.paabgabetyp_kurzbz),abgabedatum:null,insertvon:this.viewData?.uid??""},this.showAutomagicModalPhrase=!0,this.$refs.modalContainerCreateNewAbgabe.show()):this.showAutomagicModalPhrase=!1,this.$emit("paUpdated",this.projektarbeit)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},openZusatzdatenModal(){this.$refs.modalContainerZusatzdaten.show()},async saveZusatzdaten(){if(!await this.validateZusatzdaten())return!1;const t=this.projektarbeit,e=new FormData;e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("sprache",this.form.sprache.sprache),e.append("abstract",this.form.abstract),e.append("abstract_en",this.form.abstract_en),e.append("schlagwoerter",this.form.schlagwoerter),e.append("schlagwoerter_en",this.form.schlagwoerter_en),e.append("seitenanzahl",this.form.seitenanzahl),this.loading=!0,this.$api.call(Z.postStudentProjektarbeitZusatzdaten(e)).then(e=>{if("success"==e.meta.status){if(this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert")),!data?.retval?.[0])return;const e=data.retval[0];t.seitenanzahl=e.seitenanzahl??1,t.kontrollschlagwoerter=e.kontrollschlagwoerter??"",t.schlagwoerter=e.schlagwoerter??"",t.sprache=e.sprache??"",t.schlagwoerter_en=e.schlagwoerter_en??"",t.abstract=e.abstract??"",t.abstract_en=e.abstract_en??""}}).finally(()=>{this.loading=!1}),this.$refs.modalContainerZusatzdaten.hide()},async validateZusatzdaten(){return!1!==await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/confirmZusatzdatenSpeichern"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"p-button-primary",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"p-button-secondary"})},async handleDeleteTermin(t){if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4confirm_delete"),acceptLabel:"Löschen",acceptClass:"p-button-danger",rejectLabel:"Zurück",rejectClass:"p-button-secondary"}))return!1;this.deleteTermin(t)},deleteTermin(t){this.$api.call(Z.deleteProjektarbeitAbgabe(t.paabgabe_id)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/genericDeleted",[this.$p.t("abgabetool/abgabe")]));const e=this.projektarbeit.abgabetermine.findIndex(e=>e.paabgabe_id===t.paabgabe_id);this.projektarbeit.abgabetermine.splice(e,1),this.$emit("paUpdated",this.projektarbeit)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},downloadAbgabe(t){const e=`/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;window.open(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+e)},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabelSprache:t=>t.sprache,getOptionLabelAbgabetyp(t){return this.$p.t("abgabetool/c4paatyp"+t.paabgabetyp_kurzbz)},getOptionDisabled:t=>!t.aktiv,getNotenOptionLabel:t=>t.bezeichnung,openStudentPage(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Student/"+this.projektarbeit?.student_uid;window.open(t,"_blank")},openPlagiatcheck(){const t=this.turnitin_link;window.open(t,"_blank")},async openBenotung(){if(this.getSemesterBenotbar&&this.projektarbeit?.abgabetermine.find(t=>"end"==t.paabgabetyp_kurzbz&&null!==t.abgabedatum)&&this.projektarbeit?.beurteilungLinkNew){const t=this.projektarbeit?.beurteilungLinkNew;window.open(t,"_blank")}else if(this.projektarbeit?.abgabetermine.find(t=>"end"==t.paabgabetyp_kurzbz&&null!==t.abgabedatum)&&this.projektarbeit?.beurteilungLinkOld){if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4aeltereParbeitBenotenv2"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"btn btn-danger",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"btn btn-outline-secondary"}))return!1;const t=this.projektarbeit?.beurteilungLinkOld;window.open(t,"_blank")}else if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4keinEnduploadErfolgt"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"btn btn-danger",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"btn btn-outline-secondary"}))return!1},formatDate(t){const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},openCreateNewAbgabeModal(){if("Zweitbegutachter"!=this.projektarbeit?.betreuerart_kurzbz){if(!this.newTermin){const t=this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz);this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:t.upload_allowed_default,paabgabetyp_kurzbz:"",bezeichnung:t,abgabedatum:null,insertvon:this.viewData?.uid??""}}this.$refs.modalContainerCreateNewAbgabe.show()}else this.$fhcAlert.alertWarning("Terminanlage disabled")},validateTermin:t=>!0,async handleSaveNewAbgabe(t){if(!this.validateTermin(t))return this.$fhcAlert.alertWarning("invalid termin"),!1;await this.saveTermin(t),this.$refs.modalContainerCreateNewAbgabe.hide(),this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:!1,paabgabetyp_kurzbz:"",bezeichnung:this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz),abgabedatum:null,insertvon:this.viewData?.uid??""}},handleChangeAbgabetyp(t){"qualgate1"===t.bezeichnung?.paabgabetyp_kurzbz||"qualgate2"===t.bezeichnung?.paabgabetyp_kurzbz?t.kurzbz=t.bezeichnung.bezeichnung:t.kurzbz=""}},computed:{getAllowedToCreateNewTermin(){if(this.assistenzMode)return!0;if("Zweitbegutachter"==this.projektarbeit?.betreuerart_kurzbz)return!1;if(void 0!==this.projektarbeit?.note&&null!==this.projektarbeit.note){return!!this.notenOptionsNonFinal.find(t=>t.note)}return!0},allowedToSaveZusatzdaten(){return this.form.schlagwoerter.length>0&&this.form.schlagwoerter_en.length>0&&this.form.abstract.length>0&&this.form.abstract_en.length>0&&this.form.seitenanzahl>0},getAllowedAbgabeTypeOptions(){return this.assistenzMode?this.abgabeTypeOptions:this.abgabeTypeOptions.filter(t=>this.abgabetypenBetreuer.includes(t.paabgabetyp_kurzbz))},getMessagePtStyle:()=>({root:{style:{margin:"0px"}},wrapper:{style:{padding:"6px"}}}),getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert},getSemesterBenotbar(){return this.projektarbeit?.isCurrent??!1},endUploadVorhanden(){return this.projektarbeit?.abgabetermine.find(t=>"end"===t.paabgabetyp_kurzbz&&null!==t.abgabedatum)},qualityGateTerminAvailable(){let t=!1;return this.projektarbeit?.abgabetermine.forEach(e=>{"qualgate1"!=e.bezeichnung?.paabgabetyp_kurzbz&&"qualgate2"!=e?.bezeichnung?.paabgabetyp_kurzbz||(t=!0)}),t},getSpeedDialStyle:()=>"position: static !important;",getSpeedDialWrapperStyle:()=>"position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;",getTooltipVerspaetet(){return{value:this.$p.t("abgabetool/c4tooltipVerspaetet"),class:"custom-tooltip"}},getTooltipVerpasst(){return{value:this.$p.t("abgabetool/c4tooltipVerpasst"),class:"custom-tooltip"}},getTooltipAbzugeben(){return{value:this.$p.t("abgabetool/c4tooltipAbzugeben"),class:"custom-tooltip"}},getTooltipStandard(){return{value:this.$p.t("abgabetool/c4tooltipStandardv2"),class:"custom-tooltip"}},getTooltipBeurteilungerforderlich(){return{value:this.$p.t("abgabetool/c4tooltipBeurteilungerforderlich"),class:"custom-tooltip"}},getTooltipAbgegeben(){return{value:this.$p.t("abgabetool/c4tooltipAbgegeben"),class:"custom-tooltip"}},getTooltipFixtermin(){return{value:this.$p.t("abgabetool/c4tooltipFixtermin"),class:"custom-tooltip"}},getTooltipAbgabeDetected(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgabeDetected")),class:"custom-tooltip"}},getTooltipNotAllowedToSave(){return{value:this.$p.t("abgabetool/c4notAllowedToEditAbgabeTermin"),class:"custom-tooltip"}},getTooltipNotAllowedToDelete(){return{value:this.$p.t("abgabetool/c4notAllowedToDeleteAbgabeTermin"),class:"custom-tooltip"}},getTooltipBestanden(){return{value:this.$p.t("abgabetool/c4tooltipBestanden"),class:"custom-tooltip"}},getTooltipNichtBestanden(){return{value:this.$p.t("abgabetool/c4tooltipNichtBestanden"),class:"custom-tooltip"}},getProjektarbeitTitel(){return this.projektarbeit?.titel?this.$capitalize(this.$p.t("abgabetool/c4titel"))+": "+this.projektarbeit.titel:""},getProjektarbeitStudent(){return this.projektarbeit?.student?this.$capitalize(this.$p.t("person/student"))+": "+this.projektarbeit.student:""}},watch:{"newTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.newTermin.kurzbz=t.bezeichnung),this.newTermin.upload_allowed=t.upload_allowed_default},projektarbeit(t){const e=this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz);this.newTermin={paabgabe_id:-1,projektarbeit_id:t.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:e.upload_allowed_default,paabgabetyp_kurzbz:"",bezeichnung:e,abgabedatum:null,insertvon:this.viewData?.uid??""},t?.abgabetermine?.forEach(t=>t.invertedFixtermin=!t.fixtermin),this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract??"",this.form.abstract_en=t.abstract_en??"",this.form.schlagwoerter=t.schlagwoerter??"",this.form.schlagwoerter_en=t.schlagwoerter_en??"",this.form.kontrollschlagwoerter=t.kontrollschlagwoerter??"",this.form.seitenanzahl=t.seitenanzahl??1}},created(){},mounted(){},template:'\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t(\'abgabetool/c4abgabeMitarbeiterbereich\') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\x3c!--\t\t\t\tTODO: tooltip why this button is disabled--\x3e\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t(\'abgabetool/c4keineAbgabetermineGefunden\') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n'};function gt(t,e,i){let a=document.createElement("div"),n=null,r=t.getValue();if(Array.isArray(r)){const t=r[0]?new Date(r[0]):null,e=r[1]?new Date(r[1]):null;n=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:n}),watch:{val(t){i(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(a),a}async function bt(t,e,i,a,n){let r=t.join(","),o="";const s=i&&"string"==typeof i?i.length+9:0;if(r.length>2024&&!1===await a.confirm({message:n.t("stv","zuvieleEMails")}))return;let l=!0,d=e?.ctrlKey||e?.metaKey;for(;r.length>0;){if(r.length+s>2024){let t=r.lastIndexOf(",",1900);o=r.substring(0,t),r=r.substring(t+1)}else o=r,r="";let t=d?`mailto:?bcc=${o}`:`mailto:${o}`;i&&"string"==typeof i&&(t+=`?subject=${i}`),l?(window.location.href=t,l=!1):!0===await a.confirm({message:n.t("stv","weitereEMail")})&&(window.location.href=t)}}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let i=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let a=new Date(t[1]);return a.setHours(23,59,59,999),i>=e&&i<=a}return i.toDateString()===e.toDateString()}let a=new Date(t);return i.toDateString()===a.toDateString()}});const ft={name:"AbgabetoolMitarbeiter",components:{BsModal:J,CoreFilterCmpt:ut,AbgabeDetail:ht,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,TieredMenu:primevue.tieredmenu,VueDatePicker:n,FhcOverlay:W},provide(){return{abgabeTypeOptions:Vue.computed(()=>this.abgabeTypeOptions),abgabetypenBetreuer:Vue.computed(()=>this.abgabetypenBetreuer),allowedNotenOptions:Vue.computed(()=>this.allowedNotenOptions),notenOptionsNonFinal:Vue.computed(()=>this.notenOptionsNonFinal),turnitin_link:Vue.computed(()=>this.turnitin_link),old_abgabe_beurteilung_link:Vue.computed(()=>this.old_abgabe_beurteilung_link)}},props:{viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.uid}},data(){return{tableData:null,abgabetypenBetreuer:null,detailIsFullscreen:!1,phrasenPromise:null,phrasenResolved:!1,turnitin_link:null,old_abgabe_beurteilung_link:null,BETREUER_SAMMELMAIL_BUTTON_STUDENT:null,saving:!1,loading:!1,abgabeTypeOptions:null,notenOptions:null,allowedNotenOptions:null,notenOptionsNonFinal:null,serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:"",upload_allowed:!1}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitDataStretch",placeholder:Vue.computed(()=>this.$p.t("global/noDataAvailable")),selectable:!0,selectableCheck:this.selectionCheck,rowHeight:40,columns:[{formatter:function(t,e,i){if(!t.getRow().getData().selectable)return;let a=document.createElement("input");a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),t.getRow().getData().checkbox=a;let n=document.createElement("div");return n.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",n.appendChild(a),n},titleFormatter:function(t,e,i){let a=document.createElement("input");return a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),a},hozAlign:"center",headerSort:!1,formatterParams:{handleClick:this.selectHandler},titleFormatterParams:{handleClick:this.selectAllHandler},width:50,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4details"))),field:"details",formatter:this.detailFormatter,headerFilter:!1,headerSort:!1,widthGrow:1,tooltip:!1,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4personenkennzeichen"))),headerFilter:!0,field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4vorname"))),field:"vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nachname"))),field:"nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4projekttyp"))),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"studiensemester_kurzbz",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4titel"))),field:"titel",headerFilter:!0,formatter:this.centeredTextFormatter,maxWidth:500,widthGrow:8},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4betreuerartv2"))),field:"betreuerart_beschreibung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4prevAbgabetermin"))),field:"prevTermin",headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nextAbgabetermin"))),field:"nextTermin",headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate1Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate1Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate2Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate2Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1}],persistence:!1,persistenceID:"abgabeTableBetreuer2026-02-26"},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{"details"===e.getColumn().getField()?(this.setDetailComponent(e.getValue()),this.undoSelection(e)):"mail"===e.getColumn().getField()&&this.undoSelection(e)}},{event:"rowSelectionChanged",handler:async t=>{this.selectedData.filter(e=>!t.includes(e)).forEach(t=>{t.checkbox&&(t.checkbox.checked=!1)}),t.forEach(t=>{t.checkbox&&(t.checkbox.checked=!0)}),this.selectedData=t}}]}},methods:{handlePaUpdated(t){this.checkAbgabetermineProjektarbeit(t),this.$refs.abgabeTable.tabulator.redraw(!0)},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});bt([...new Set(e)],t.originalEvent,"",this.$fhcAlert,this.$p)},getQGateStatusList(){return[this.$p.t("abgabetool/c4keinTerminVorhanden"),this.$p.t("abgabetool/c4positivBenotet"),this.$p.t("abgabetool/c4negativBenotet"),this.$p.t("abgabetool/c4notYetGraded"),this.$p.t("abgabetool/c4notSubmitted"),this.$p.t("abgabetool/c4notHappenedYet")]},sortFuncTerminCol:(t,e,i,a,n,r,o)=>null==t?1:null==e?-1:"prevTermin"==n._column.field?Math.abs(e.diffMs)-Math.abs(t.diffMs):"nextTermin"==n._column.field?Math.abs(t.diffMs)-Math.abs(e.diffMs):Math.abs(e.diffMs)-Math.abs(t.diffMs),headerFilterTerminCol(t,e){if(!e||!e.luxonDate||!e.luxonDate.isValid)return!1;const i=e.luxonDate,a=t=>{if(!t)return null;let e;return e=t instanceof Date?luxon.DateTime.fromJSDate(t):"string"==typeof t?luxon.DateTime.fromISO(t):luxon.DateTime.fromMillis(Number(t)),e.isValid?e:null},n=a(t[0]),r=a(t[1]);return n&&!r?i.hasSame(n,"day"):!(!n||!r)&&(i>=n.startOf("day")&&i<=r.endOf("day"))},loadState(){return JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID)||"null")},saveState(t){if(!this.stateRestored)return;const e={columns:t.getColumnLayout().map(t=>({field:t.field,visible:t.visible,width:t.width})),sort:t.getSorters().map(t=>({field:t.field,dir:t.dir})),filters:t.getFilters(),headerFilters:t.getHeaderFilters()};localStorage.setItem(this.abgabeTableOptions.persistenceID,JSON.stringify(e))},handleTableBuilt(){const t=this.$refs.abgabeTable.tabulator;this.tableBuiltResolve(),t.on("columnMoved",()=>{this.saveState(t)}),t.on("columnResized",()=>{this.saveState(t)}),t.on("columnVisibilityChanged",()=>{this.saveState(t)}),t.on("filterChanged",()=>{this.saveState(t)}),t.on("headerFilterChanged",()=>{this.saveState(t)}),t.on("dataSorted",()=>{this.saveState(t)}),t.on("columnSorted",()=>{this.saveState(t)}),t.on("sortersChanged",()=>{this.saveState(t)});const e=this.loadState();t.on("renderComplete",()=>{if(!this.stateRestored){if(e?.columns&&!this.colLayoutRestored){const i=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(i),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let i of e.headerFilters)t.setHeaderFilterValue(i.field,i.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const i=e.sort.map(e=>{const i=t.columnManager.findColumn(e.field);return i?{column:i,dir:e.dir}:null}).filter(Boolean);t.setSort(i)},100)),this.stateRestored=!0}})},checkQualityGateStatus(t){const e=[],i=[];t.qgate1Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate1StatusRank=0,t.qgate2Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate2StatusRank=0,t.abgabetermine.forEach(t=>{"qualgate1"==t.paabgabetyp_kurzbz&&e.push(t),"qualgate2"==t.paabgabetyp_kurzbz&&i.push(t)}),e.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate1Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate1StatusRank=5):(t.qgate1Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate1StatusRank=4)}else null==e.note&&t.qgate1StatusRank<=3?(t.qgate1Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate1StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate1StatusRank<=2?(t.qgate1Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate1StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate1StatusRank<=1&&(t.qgate1Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate1StatusRank=1)}),i.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate2Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate2StatusRank=5):(t.qgate2Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate2StatusRank=4)}else null==e.note&&t.qgate2StatusRank<=3?(t.qgate2Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate2StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate2StatusRank<=2?(t.qgate2Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate2StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate2StatusRank<=1&&(t.qgate2Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate2StatusRank=1)})},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(i=>{i.dateStyle=X(i,this.notenOptions);const a=luxon.DateTime.fromISO(i.datum).endOf("day");i.luxonDate=a,i.diffMs=a.toMillis()-e.toMillis(),i.diffMs<0?(!t.prevTermin||i.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=i):i.diffMs>0&&(!t.nextTermin||i.diffMs
    '+t+'

    '+i+" - "+this.formatDate(e.datum)+"

    "}return""},selectHandler(t,e){const i=e.getRow();return i.isSelected()?i.deselect():i.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const i=e.getTable().getRows().filter(t=>t.getData().selectable);return i.every(t=>t.isSelected())?i.forEach(t=>t.deselect()):i.forEach(t=>t.select()),t.stopPropagation(),!1},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},toggleShowAll(t){this.showAll=t,this.loading=!0,this.loadProjektarbeiten(t,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1})},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){this.saving=!0,this.$api.call(Z.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.serienTermin.upload_allowed,this.selectedData?.map(t=>t.projektarbeit_id),!1)).then(t=>{if("success"===t.meta.status&&t.data){this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert"));const t=this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft,e=this.$refs.abgabeTable?.tabulator.rowManager.scrollTop;this.loading=!0,this.loadProjektarbeiten(this.showAll,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1,Vue.nextTick(()=>{const i=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");i&&(i.scrollLeft=t,i.scrollTop=e)})})}else this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"))}).finally(()=>{this.saving=!1}),this.$refs.modalContainerAddSeries.hide()},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){this.loading=!0;const e=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);let i=!1;if(void 0!==e.note&&null!==e.note){this.notenOptionsNonFinal.find(t=>t.note)&&(i=!1),i=!0}e?.abgabetermine?.length&&this.$api.call(Z.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const i=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);i&&void 0!==t.signatur&&(i.signatur=t.signatur)})}),e.abgabetermine.forEach(t=>{const e=this.allowedNotenOptions.find(e=>e.note==t.note);e&&(t.note=e),t.file=[],!t.noteBackend&&e&&(t.noteBackend=e),t.allowedToSave=!i,t.allowedToDelete=t.allowedToSave&&!t.abgabedatum,t.bezeichnung=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz===t.paabgabetyp_kurzbz)}),e.student_uid=t.student_uid,e.student=`${e.vorname} ${e.nachname}`,this.selectedProjektarbeit=e,this.$refs.modalContainerAbgabeDetail.show(),this.loading=!1},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.uid+"@"+this.domain},buildPKZ:t=>`${t.uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.tableData=t[0]?.retval?.map(t=>(this.checkAbgabetermineProjektarbeit(t),t.selectable="Zweitbegutachter"!==t.betreuerart_kurzbz,{...t,details:{student_uid:t.uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),typ:t.projekttyp_kurzbz,titel:t.titel})),this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(this.tableData)},loadProjektarbeiten(t=!1,e){this.$api.call(Z.getMitarbeiterProjektarbeiten(t)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()})},loadAbgaben(t){return new Promise(e=>{this.$api.call(Z.getStudentProjektabgaben(t)).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const i=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-i.top-80,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.calcMaxTableHeight()}},watch:{"serienTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.serienTermin.kurzbz=t.bezeichnung),this.serienTermin.upload_allowed=t.upload_allowed_default}},computed:{emailItems(){const t=[];return this.BETREUER_SAMMELMAIL_BUTTON_STUDENT&&t.push({label:this.$p.t("abgabetool/c4sendEmailStudierendev2",[this.uniqueStudentEmailCount]),command:this.sammelMailStudent}),t},uniqueStudentEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.student_uid&&t.add(e.student_uid)}),t.size},getAllowedAbgabeTypeOptions(){return this.abgabeTypeOptions.filter(t=>this.abgabetypenBetreuer.includes(t.paabgabetyp_kurzbz))}},created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0}),this.$api.call(Z.getConfig()).then(t=>{this.turnitin_link=t.data?.turnitin_link,this.old_abgabe_beurteilung_link=t.data?.old_abgabe_beurteilung_link,this.abgabetypenBetreuer=t.data?.abgabetypenBetreuer,this.BETREUER_SAMMELMAIL_BUTTON_STUDENT=t.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT}).catch(t=>{this.loading=!1}),this.$api.call(Z.getNoten()).then(t=>{"success"==t.meta.status&&(this.notenOptions=t.data[0],this.allowedNotenOptions=this.notenOptions.filter(e=>t.data[1].includes(e.note)),this.notenOptionsNonFinal=this.notenOptions.filter(e=>t.data[2].includes(e.note)))}).catch(t=>{this.loading=!1}),this.$api.call(Z.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '};var mt={name:"BootstrapOffcanvas",data:()=>({offcanvas:null}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},keyboard:{type:Boolean,default:!0},scroll:{type:Boolean,default:!1},placement:{type:String,default:"start",validator:t=>["start","end","top","bottom"].includes(t)},noCloseBtn:Boolean,headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"p-4"},footerClass:{type:[String,Array,Object],default:""},dialogClass:[String,Array,Object]},emits:["hideBsOffcanvas","hiddenBsOffcanvas","hidePreventedBsOffcanvas","showBsOffcanvas","shownBsOffcanvas"],methods:{dispose(){return this.offcanvas?.dispose()},hide(){return this.offcanvas?.hide()},show(t){return this.offcanvas?.show(t)},toggle(){return this.offcanvas?.toggle()},popup(t,e,i,a){const n=this,r={};void 0!==t&&(r.default=()=>t),void 0!==i&&(r.title=()=>i),void 0!==a&&(r.footer=()=>a);let o=!1;return"undefined"!=typeof primevue&&(o=!0),new Promise((t,i)=>{const a=Vue.createApp({name:"OffcanvasTmpApp",setup:()=>()=>Vue.h(n,{class:"offcanvas-wrapper",ref:"offcanvas",...e},r),mounted(){this.$refs.offcanvas.show()},beforeUnmount(){this.$refs.offcanvas&&(!1!==this.$refs.offcanvas.result?t(this.$refs.offcanvas.result):i())},unmounted(){s.parentElement.removeChild(s)}}),s=document.createElement("div");o&&a.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return G}).then(t=>{a.use(t.default),a.mount(s),document.body.appendChild(s)})})}},mounted(){this.$refs.offcanvas&&(this.offcanvas=new bootstrap.Offcanvas(this.$refs.offcanvas,{backdrop:this.backdrop,keyboard:this.keyboard,scroll:this.scroll}))},template:'\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t\n\t\t
    \n\t'},vt={getAllStudiensemesterAndAktOrNext:()=>({method:"get",url:"/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext"}),getAll:(t=null,e=null)=>({method:"get",url:"api/frontend/v1/organisation/studiensemester/getAll",params:{order:t,start:e}})};const At={name:"AbgabetoolAssistenz",components:{AbgabeterminStatusLegende:{name:"AbgabeterminStatusLegende",template:'\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipVerspaetet\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipVerpasst\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipAbzugeben\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipStandardv2\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipAbgegeben\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipBeurteilungerforderlich\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipBestanden\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipNichtBestanden\')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t'},BsModal:J,BsOffcanvas:mt,CoreFilterCmpt:ut,AbgabeDetail:ht,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Inplace:primevue.inplace,Textarea:primevue.textarea,Timeline:primevue.timeline,TieredMenu:primevue.tieredmenu,VueDatePicker:n,FhcOverlay:W},provide(){return{abgabeTypeOptions:Vue.computed(()=>this.abgabeTypeOptions),allowedNotenOptions:Vue.computed(()=>this.allowedNotenOptions),notenOptionsNonFinal:Vue.computed(()=>this.notenOptionsNonFinal),turnitin_link:Vue.computed(()=>this.turnitin_link),old_abgabe_beurteilung_link:Vue.computed(()=>this.old_abgabe_beurteilung_link),abgabetypenBetreuer:Vue.computed(()=>this.abgabeTypeOptions)}},props:{stg_kz_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.uid}},data(){return{tableData:null,studiensemesterOptions:null,allSem:null,curSem:null,notenOptionFilter:null,inplaceToggle:!1,headerFiltersRestored:!1,filtersRestored:!1,colLayoutRestored:!1,sortRestored:!1,stateRestored:!1,timelineProjekt:null,selectedStudiengangOption:null,studiengaengeOptions:null,detailIsFullscreen:!1,allConfigPromise:null,phrasenPromise:null,phrasenResolved:!1,turnitin_link:null,old_abgabe_beurteilung_link:null,ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT:null,ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER:null,saving:!1,loading:!1,abgabeTypeOptions:null,notenOptions:null,allowedNotenFilterOptions:null,allowedNotenOptions:null,notenOptionsNonFinal:null,serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:"",fixtermin:!1,invertedFixtermin:!0,upload_allowed:!1}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitData",placeholder:Vue.computed(()=>this.$capitalize(this.$p.t("global/noDataAvailable"))),selectable:!0,selectableCheck:this.selectionCheck,rowHeight:40,renderVerticalBuffer:2e3,columns:[{formatter:function(t,e,i){if(!t.getRow().getData().selectable)return;let a=document.createElement("input");a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),t.getRow().getData().checkbox=a;let n=document.createElement("div");return n.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",n.appendChild(a),n},titleFormatter:function(t,e,i){let a=document.createElement("input");return a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),a},hozAlign:"center",headerSort:!1,formatterParams:{handleClick:this.selectHandler},titleFormatterParams:{handleClick:this.selectAllHandler},width:50,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4details"))),field:"details",headerFilter:!1,headerSort:!1,formatter:this.formAction,tooltip:!1,minWidth:150,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4personenkennzeichen"))),headerFilter:!0,field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4vorname"))),field:"student_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nachname"))),field:"student_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4studstatus"))),field:"studienstatus",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4orgform"))),field:"orgform",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4projekttyp"))),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4note"))),field:"note_bez",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"studiensemester_kurzbz",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4titel"))),field:"titel",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerv2"))),field:"erstbetreuer",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerTitelPre"))),field:"betreuer_titelpre",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerVorname"))),field:"betreuer_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerNachname"))),field:"betreuer_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerTitelPost"))),field:"betreuer_titelpost",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerv2"))),field:"zweitbetreuer",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerTitelPre"))),field:"zweitbetreuer_titelpre",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerVorname"))),field:"zweitbetreuer_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerNachname"))),field:"zweitbetreuer_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerTitelPost"))),field:"zweitbetreuer_titelpost",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4prevAbgabetermin"))),headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,field:"prevTermin",formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nextAbgabetermin"))),field:"nextTermin",headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate1Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate1Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate2Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate2Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1}],persistence:!1,persistenceID:"abgabetool_2026_02_26"},abgabeTableEventHandlers:[{event:"rowSelectionChanged",handler:async t=>{this.selectedData.filter(e=>!t.includes(e)).forEach(t=>{t.checkbox&&(t.checkbox.checked=!1)}),t.forEach(t=>{t.checkbox&&(t.checkbox.checked=!0)}),this.selectedData=t}}]}},methods:{handlePaUpdated(t){this.checkAbgabetermineProjektarbeit(t),this.$refs.abgabeTable.tabulator.redraw(!0)},getQGateStatusList(){return[this.$p.t("abgabetool/c4keinTerminVorhanden"),this.$p.t("abgabetool/c4positivBenotet"),this.$p.t("abgabetool/c4negativBenotet"),this.$p.t("abgabetool/c4notYetGraded"),this.$p.t("abgabetool/c4notSubmitted"),this.$p.t("abgabetool/c4notHappenedYet")]},sortFuncTerminCol:(t,e,i,a,n,r,o)=>null==t?1:null==e?-1:"prevTermin"==n._column.field?Math.abs(e.diffMs)-Math.abs(t.diffMs):"nextTermin"==n._column.field?Math.abs(t.diffMs)-Math.abs(e.diffMs):Math.abs(e.diffMs)-Math.abs(t.diffMs),headerFilterTerminCol(t,e){if(!e||!e.luxonDate||!e.luxonDate.isValid)return!1;const i=e.luxonDate,a=t=>{if(!t)return null;let e;return e=t instanceof Date?luxon.DateTime.fromJSDate(t):"string"==typeof t?luxon.DateTime.fromISO(t):luxon.DateTime.fromMillis(Number(t)),e.isValid?e:null},n=a(t[0]),r=a(t[1]);return n&&!r?i.hasSame(n,"day"):!(!n||!r)&&(i>=n.startOf("day")&&i<=r.endOf("day"))},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});const i=[...new Set(e)],a=this.$p.t("abgabetool/c4sammelmailStudentBetreff",[this.selectedStudiengangOption?.bezeichnung]);bt(i,t.originalEvent,a,this.$fhcAlert,this.$p)},sammelMailBetreuer(t){const e=[];this.selectedData.forEach(t=>{t.betreuer_mail&&e.push(t.betreuer_mail),t.zweitbetreuer_mail&&e.push(t.zweitbetreuer_mail)});const i=[...new Set(e)],a=this.$p.t("abgabetool/c4sammelmailBetreuerBetreff",[this.selectedStudiengangOption?.bezeichnung]);bt(i,t.originalEvent,a,this.$fhcAlert,this.$p)},selectHandler(t,e){const i=e.getRow();return i.isSelected()?i.deselect():i.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const i=e.getTable().getRows().filter(t=>t.getData().selectable);return i.every(t=>t.isSelected())?i.forEach(t=>t.deselect()):i.forEach(t=>t.select()),t.stopPropagation(),!1},checkQualityGateStatus(t){const e=[],i=[];t.qgate1Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate1StatusRank=0,t.qgate2Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate2StatusRank=0,t.abgabetermine.forEach(t=>{"qualgate1"==t.paabgabetyp_kurzbz&&e.push(t),"qualgate2"==t.paabgabetyp_kurzbz&&i.push(t)}),e.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate1Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate1StatusRank=5):(t.qgate1Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate1StatusRank=4)}else null==e.note&&t.qgate1StatusRank<=3?(t.qgate1Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate1StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate1StatusRank<=2?(t.qgate1Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate1StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate1StatusRank<=1&&(t.qgate1Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate1StatusRank=1)}),i.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate2Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate2StatusRank=5):(t.qgate2Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate2StatusRank=4)}else null==e.note&&t.qgate2StatusRank<=3?(t.qgate2Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate2StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate2StatusRank<=2?(t.qgate2Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate2StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate2StatusRank<=1&&(t.qgate2Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate2StatusRank=1)})},getItemBezeichnung:t=>t.bezeichnung?t?.bezeichnung?.bezeichnung??t?.bezeichnung:"",getItemNote(t){if(!t?.note)return"";if(t.note?.bezeichnung)return t.note.bezeichnung;const e=this.notenOptions.find(e=>e.note==t.note);return e?e.bezeichnung:t.note},handleChangeAbgabetypSerientermin(t){"qualgate1"===t.bezeichnung?.paabgabetyp_kurzbz||"qualgate2"===t.bezeichnung?.paabgabetyp_kurzbz?t.kurzbz=t.bezeichnung.bezeichnung:t.kurzbz=""},semesterChanged(t){if(this.$refs.abgabeTable.tabulator){const e=this.$refs.abgabeTable.tabulator,i=e.getFilters().filter(t=>"studiensemester_kurzbz"!=t.field),a=t.value.studiensemester_kurzbz==this.$p.t("abgabetool/c4all")?"":t.value.studiensemester_kurzbz,n={field:"studiensemester_kurzbz",type:t.value.studiensemester_kurzbz==this.$p.t("abgabetool/c4all")?"!=":"=",value:a};e.setFilter([...i,n])}},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(i=>{i.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===i.paabgabetyp_kurzbz),i.dateStyle=X(i,this.notenOptions);const a=luxon.DateTime.fromISO(i.datum).endOf("day");i.luxonDate=a,i.diffMs=a.toMillis()-e.toMillis(),i.diffMs<0?(!t.prevTermin||i.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=i):i.diffMs>0&&(!t.nextTermin||i.diffMs({field:t.field,visible:t.visible,width:t.width})),sort:t.getSorters().map(t=>({field:t.field,dir:t.dir})),filters:t.getFilters(),headerFilters:t.getHeaderFilters()};localStorage.setItem(this.abgabeTableOptions.persistenceID,JSON.stringify(e))},handleTableBuilt(){const t=this.$refs.abgabeTable.tabulator;this.tableBuiltResolve(),t.on("columnMoved",()=>{this.saveState(t)}),t.on("columnResized",()=>{this.saveState(t)}),t.on("columnVisibilityChanged",()=>{this.saveState(t)}),t.on("filterChanged",()=>{this.saveState(t)}),t.on("headerFilterChanged",()=>{this.saveState(t)}),t.on("dataSorted",()=>{this.saveState(t)}),t.on("columnSorted",()=>{this.saveState(t)}),t.on("sortersChanged",()=>{this.saveState(t)});const e=this.loadState();t.on("renderComplete",()=>{if(!this.stateRestored){if(e?.columns&&!this.colLayoutRestored){const i=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(i),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let i of e.headerFilters)t.setHeaderFilterValue(i.field,i.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const i=e.sort.map(e=>{const i=t.columnManager.findColumn(e.field);return i?{column:i,dir:e.dir}:null}).filter(Boolean);t.setSort(i)},100)),this.stateRestored=!0}})},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,getOptionLabelStg:t=>t.kurzbzlang+" "+t.bezeichnung,getOptionLabelStudiensemester:t=>t.studiensemester_kurzbz,getNotenFilterOptionLabel:t=>t.bezeichnung,formatDate(t){if(null===t)return"";const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},formAction(t){const e=document.createElement("div");e.className="d-flex gap-3",e.style.display="flex",e.style.alignItems="stretch",e.style.justifyContent="center",e.style.height="100%";const i=t.getValue(),a=(t,e,i)=>{const a=document.createElement("button");return a.className="btn btn-outline-secondary",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.style.height="100%",a.style.aspectRatio="1 / 1",a.style.padding="0","fa fa-timeline"==t&&(a.style.transform="rotate(90deg)"),a.innerHTML=``,a.title=this.$capitalize(this.$p.t(e)),a.addEventListener("click",t=>{t.stopPropagation(),t.stopImmediatePropagation(),i()}),a};return e.append(a("fa fa-folder-open","abgabetool/c4details",()=>this.setDetailComponent(i)),a("fa fa-timeline","abgabetool/c4termineTimeLine",()=>this.openTimeline(i))),e},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){const t=this.selectedData?.map(t=>t.projektarbeit_id),e=[...this.selectedData];this.saving=!0,this.serienTermin.fixtermin=!this.serienTermin.invertedFixtermin,this.$api.call(Z.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.serienTermin.upload_allowed,t,this.serienTermin.fixtermin)).then(e=>{"success"===e.meta.status&&e.data?this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert")):this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"));const i=e.data;t.forEach(t=>{const e=i.find(e=>e.projektarbeit_id==t),a=this.projektarbeiten.find(e=>e.projektarbeit_id==t);e.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==e.paabgabetyp_kurzbz),a.abgabetermine.push(e),a.abgabetermine.sort((t,e)=>new Date(t.datum)-new Date(e.datum))});const a=this.$refs.abgabeTable.tabulator,n=a.rowManager.scrollLeft,r=a.rowManager.scrollTop,o=this.mapProjekteToTableData(this.projektarbeiten);a.setData(o),a.redraw(!0),Vue.nextTick(()=>{const t=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");t&&(t.scrollLeft=n,t.scrollTop=r)})}).finally(()=>{this.saving=!1,this.selectedData=e}),this.$refs.modalContainerAddSeries.hide()},mapProjekteToTableData(t){return t.map(t=>{if(t.selectable=!0,t.prevTermin=null,t.nextTermin=null,this.checkAbgabetermineProjektarbeit(t),this.notenOptions&&t.note){const e=this.notenOptions.find(e=>e.note==t.note);t.note_bez=e.bezeichnung}return{...t,abgabetermine:t.abgabetermine,details:{student_uid:t.student_uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),erstbetreuer:this.buildErstbetreuer(t),zweitbetreuer:this.buildZweitbetreuer(t),typ:t.projekttyp_kurzbz,titel:t.titel}})},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){const e=this.projektarbeiten.find(e=>e.projektarbeit_id==t.projektarbeit_id);e?.abgabetermine?.length&&this.$api.call(Z.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const i=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);i&&void 0!==t.signatur&&(i.signatur=t.signatur)})});const i=null!==e.note;e.abgabetermine.forEach(t=>{"object"!=typeof t.note&&(t.note=this.allowedNotenOptions.find(e=>e.note==t.note)),!t.noteBackend&&t.note&&(t.noteBackend=t.note),t.file=[],t.allowedToSave=!i,t.allowedToDelete=!i&&!t.abgabedatum});const a=e.vorname??e.student_vorname,n=e.nachname??e.student_nachname;e.student=`${a} ${n}`,this.selectedProjektarbeit=e,this.$refs.modalContainerAbgabeDetail.show()},openTimeline(t){const e=this.projektarbeiten.find(e=>e.projektarbeit_id==t.projektarbeit_id);e?(e.abgabetermine.forEach(t=>{const e=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz==t.paabgabetyp_kurzbz);t.benotbar=e.benotbar}),this.timelineProjekt=e,this.$refs.drawer.show()):this.$fhcAlert.alertInfo("Keine projektarbeit gefunden")},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',mailFormatter:t=>'
    ',timelineFormatter:()=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'",abgabterminFormatter(t){const e=t.getValue();if(e){let t="";switch(e.dateStyle){case"verspaetet":t='';break;case"verpasst":t='';break;case"abzugeben":t='';break;case"standard":t='';break;case"abgegeben":t='';break;case"beurteilungerforderlich":t='';break;case"bestanden":t='';break;case"nichtbestanden":t=''}const i=e.bezeichnung?.bezeichnung??e.bezeichnung;return'
    '+t+'

    '+i+" - "+this.formatDate(e.datum)+"

    "}return""},tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.student_uid+"@"+this.domain},buildPKZ:t=>`${t.student_uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),buildErstbetreuer:t=>t.erstbetreuer_full_name?t.erstbetreuer_full_name:t.betreuer_vorname+" "+t.betreuer_nachname,buildZweitbetreuer:t=>t.zweitbetreuer_full_name??"",async setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.tableData=this.mapProjekteToTableData(this.projektarbeiten),await this.tableBuiltPromise,this.$refs.abgabeTable.tabulator.setData(this.tableData)},loadProjektarbeiten(t=!1,e){this.loading=!0,this.$api.call(Z.getProjektarbeitenForStudiengang(this.selectedStudiengangOption.studiengang_kz,this.notenOptionFilter?.benotet??0)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()}).finally(()=>{this.loading=!1})},loadAbgaben(t){return new Promise(e=>{this.$api.call(Z.getStudentProjektabgaben(t)).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const i=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-i.top-80,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,await this.allConfigPromise,this.calcMaxTableHeight()},getOptionDisabled:t=>!t.aktiv},computed:{emailItems(){const t=[];return this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT&&t.push({label:this.$p.t("abgabetool/c4sendEmailStudierendev2",[this.uniqueStudentEmailCount]),command:this.sammelMailStudent}),this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER&&t.push({label:this.$p.t("abgabetool/c4sendEmailBetreuerv3",[this.uniqueBetreuerEmailCount]),command:this.sammelMailBetreuer}),t},uniqueBetreuerEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.betreuer_mail&&t.add(e.betreuer_mail),e.zweitbetreuer_mail&&t.add(e.zweitbetreuer_mail)}),t.size},uniqueStudentEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.student_uid&&t.add(e.student_uid)}),t.size}},watch:{"serienTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.serienTermin.kurzbz=t.bezeichnung),this.serienTermin.upload_allowed=t.upload_allowed_default},selectedStudiengangOption(t,e){null!==this.notenOptionFilter&&null!==this.selectedStudiengangOption&&this.loadProjektarbeiten()},notenOptionFilter(t){null!==this.notenOptionFilter&&null!==this.selectedStudiengangOption&&this.loadProjektarbeiten()},selectedData(t){const e=this.$refs.abgabeTable?.tabulator;if(!e)return;const i=e.getRows();t.forEach(t=>{const e=i.find(e=>{if(e.getData().projektarbeit_id==t.projektarbeit_id)return e});e.select();const a=e.getElement().children[0]?.children[0]?.children[0];a&&(a.checked=!0)})}},created(){this.loading=!0,this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0});const t=[this.$api.call(Z.getConfig()),this.$api.call(Z.getStudiengaenge()),this.$api.call(vt.getAllStudiensemesterAndAktOrNext()),this.$api.call(Z.getNoten()),this.$api.call(Z.getPaAbgabetypen())];this.allConfigPromise=Promise.allSettled(t).then(t=>{if("fulfilled"===t[0].status){const e=t[0].value;this.turnitin_link=e.data?.turnitin_link,this.old_abgabe_beurteilung_link=e.data?.old_abgabe_beurteilung_link,this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT=e.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT,this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER=e.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER}if("fulfilled"===t[1].status){const e=t[1].value;this.studiengaengeOptions=e.data,this.studiengaengeOptions?.length&&(this.selectedStudiengangOption=this.stg_kz_prop?e.data.find(t=>t.studiengang_kz==this.stg_kz_prop):e.data[0])}if("fulfilled"===t[2].status){const e=t[2].value;this.allSem=e.data[0];const i={studiensemester_kurzbz:this.$p.t("abgabetool/c4all")};this.curSem=i,this.studiensemesterOptions=[i,...this.allSem]}if("fulfilled"===t[3].status){const e=t[3].value;"success"===e.meta?.status&&(this.notenOptions=e.data[0],this.allowedNotenOptions=this.notenOptions.filter(t=>e.data[1].includes(t.note)),this.notenOptionsNonFinal=this.notenOptions.filter(t=>e.data[2].includes(t.note))),this.allowedNotenFilterOptions=[{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/keineNoteEingetragen")),benotet:0},{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/c4benotet")),benotet:1},{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/showAll")),benotet:-1}],this.notenOptionFilter=this.allowedNotenFilterOptions[0]}if("fulfilled"===t[4].status){const e=t[4].value;this.abgabeTypeOptions=e.data}}).finally(()=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '},yt={name:"DeadlineOverview",components:{CoreFilterCmpt:ut},props:{person_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{fullName:null,deadlines:null,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,phrasenPromise:null,phrasenResolved:!1,deadlineTableOptions:{height:700,index:"projektarbeit_id",layout:"fitColumns",placeholder:Vue.computed(()=>this.$p.t("global/noDataAvailable")),columns:[{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zieldatumv2"))),field:"datum",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4fixterminv4"))),field:"fixterminstring",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4abgabetyp"))),field:"typ_bezeichnung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4abgabekurzbzv2"))),field:"kurzbz",formatter:this.centeredTextFormatter,widthGrow:3},{title:Vue.computed(()=>this.$capitalize(this.$p.t("person/studentIn"))),field:"student",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"semester",formatter:this.centeredTextFormatter,widthGrow:1}],persistence:!1},deadlineTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},loadDeadlines(){this.$api.call(Z.fetchDeadlines(this.person_uid_prop??null)).then(t=>{t?.data&&this.setupData(t.data)})},setupData(t){this.deadlines=t,this.deadlines.forEach(t=>{t.student=(t.stud_titelpre?t.stud_titelpre+" ":"")+t.stud_vorname+" "+t.stud_nachname+(t.stud_titelpost?" "+t.stud_titelpost:""),t.fixterminstring=t.fixtermin?this.$p.t("abgabetool/c4yes"):this.$p.t("abgabetool/c4no")}),this.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns),this.$refs.deadlineTable.tabulator.setData(this.deadlines)},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const i=e.getBoundingClientRect();this.deadlineTableOptions.height=window.visualViewport.height-i.top-30,this.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadDeadlines(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0})},mounted(){this.setupMounted()},template:'\n\t\t

    {{$p.t(\'abgabetool/deadlinesTitle\')}} {{ fullName ? (\'-\' + fullName) : \'\'}}

    \n\t\t
    \n\t\t\t\n\t\t \n '};const $t=Vue.createApp({name:"AbgabetoolApp",components:{AbgabetoolStudent:tt,AbgabetoolMitarbeiter:ft,AbgabetoolAssistenz:At,DeadlineOverview:yt},data:function(){return{comp:null,uid:null,student_uid:null,stg_kz:null}},methods:{},computed:{viewData(){return{uid:this.uid}},student_uid_computed(){return this.student_uid??this.uid},stg_kz_computed(){return this.stg_kz??null}},created(){},mounted(){const t=document.getElementById("abgabetoolroot"),e=t.getAttribute("route");this.comp=e;const i=t.getAttribute("uid");this.uid=i;const a=t.getAttribute("stg_kz_prop");this.stg_kz=a;const n=t.getAttribute("student_uid_prop");this.student_uid=n},template:'\n\t\t\n\t'});$t.config.globalProperties.$capitalize=function(t){return t?t[0].toUpperCase()+t.slice(1):""},$t.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),$t.directive("tooltip",primevue.tooltip),$t.use(U),$t.mount("#abgabetoolroot"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:i,topic:a,requested_change:n}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:i,topic:a,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:i,status_message:a}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:i,status_message:a})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...i?{fileID:i}:{}})},updateProfilRequest:function(t,e,i,a=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:i,...a?{fileID:a}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},u={getRoomInfo(t,e,i){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:i})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,i){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:i})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,i){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:i})}},h={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},prestudent(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},person(t,e){let i="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(i)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+i.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+i.id)},addNewAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,i)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,i)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+i.id)},addNewBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,i)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,i)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+i.id)},addNewContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,i)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,i)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,i)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+i.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+i+"/"+a)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+i+"/"+a)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+i+"/"+a)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+i.id)}},status:{insertStatus(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,i)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:i,ausbildungssemester:a}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+i+"/"+a)},updateStatus(t,{prestudent_id:e,status_kurzbz:i,studiensemester_kurzbz:a,ausbildungssemester:n},r){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+i+"/"+a+"/"+n,r)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let i="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(i)},save(t,e,i,a){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(i);return this.$fhcApi.post(t,n,a)}},exam:{getPruefungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+i.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,i)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+i.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let i="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getTeacherProposal(t,e){let i="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},getRepeaterGrades(t,e){let i="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(i=i+"/"+encodeURIComponent(e)),this.$fhcApi.get(i)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:a,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,note:a},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:a})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:i},{errorHeader:a})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,i,a){const n=a?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:i},n)}},mobility:{getMobilitaeten(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+i.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+i.id)},getSupports(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+i.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,i)=>this.$fhcApi.post(t,i,e),t.ajaxResponse=(t,e,i)=>i.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+i.id+"/"+i.studiengang_kz)},getDocumentsAccepted(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+i.id+"/"+i.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+i.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+i.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,i){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+i.student_uid+"/"+i.start_date+"/"+i.end_date+"/"+i.group_consecutiveHours+"/"+i.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},g={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,i)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,i)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},b={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},f={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},m={getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},v={person:g,prestudent:b,mitarbeiter:f,anrechnung:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:m,projektphase:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,i){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+i.id+"/"+i.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,i){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:i})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},A={person:{getAllBetriebsmittel(t,e,i){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+i.type+"/"+i.id)},addNewBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,i)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,i)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},y={updatePersonUnrulyStatus(t,e){try{const i={person_id:t,unruly:e},a="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(a,i,null)}catch(t){throw t}},filterPerson(t,e=""){try{const i=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(i,t)}catch(t){throw t}}},$={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,i,a,n=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:i,typ:a,personenanzahl:n})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},_={content(t,e=null,i=null,a=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...i?{sprache:i}:{},...a?{sichtbar:a}:{}})},getNews(t=1,e=10,i){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:i})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},w={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},z={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},k={person:{getMessages(t,e,i){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+i.id+"/"+i.type+"/"+i.size+"/"+i.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,i){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,i)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},T={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},S={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,i=void 0,a=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:i,studienplan:a})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},F={search:r,phrasen:o,navigation:s,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:l,studstatus:d,profil:p,profilUpdate:c,lvPlan:u,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:i,tag:a=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:i})},insert:function({url:t,title:e,tag:i}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:i})}},stv:h,notiz:v,betriebsmittel:A,checkperson:y,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:$,cms:_,lehre:w,addons:z,messages:k,vorlagen:T,addons:z,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+i.person_id)},getAllContractsNotAssigned(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+i.person_id)},getAllContractsAssigned(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+i.person_id+"/"+i.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,i){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+i.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:S,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},x={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function i(t,e,i,a){if("string"==typeof t&&void 0===a)[e,i,a]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===a&&(a=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},a?a.form=t:a={form:t}}return[e,i,a]}function a(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const n=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});n.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const a of i)t.FormData.append(e+(i.length>1?"[]":""),a);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(a=>t.FormData.append(e+(i.length>1?"[]":""),a)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),n.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config))),a(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[i.type])(i,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),n.getUri({url:t})),get:(t,e,a,r)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,a,r]=i(t,e,a,r),a&&(r?r.params=a:r={params:a}),n.get(e,r)),post:(t,e,a,r)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,a,r]=i(t,e,a,r),n.post(e,a,r)),_defaultErrorHandlers:{validation(e,i){const a=t.config.globalProperties.$fhcAlert;return i?.form?(i.form.clearValidation(),i.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(a.alertError),!1):"object"!=typeof e.messages||(i?.errorHeader?Object.values(e.messages).forEach(e=>a.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>a.alertDefault("error",t,e,!0)),!1)},general(e,i){const a=t.config.globalProperties.$fhcAlert;i?.form?i.form.setFeedback(!1,e.message):i?.errorHeader?a.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):a.alertError(e.message)},php(e){const i=t.config.globalProperties.$fhcAlert;var a="";switch(a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i.alertDefault("warn","PHP "+e.severity,a,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i.alertDefault("info","PHP "+e.severity,a,!0);break;default:a="Type: PHP "+e.severity+"\n\n"+a,i.alertSystemError(a)}},exception(e){const i=t.config.globalProperties.$fhcAlert;var a="";a+="Type: "+e.class+"\n\n",a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),i.alertSystemError(a)},db(e){const i=t.config.globalProperties.$fhcAlert;var a="";void 0!==e.heading&&(a+=e.heading+"\n\n"),void 0!==e.code&&(a+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(a+="SQL: "+e.sql+"\n\n"),void 0!==e.message?a+="Message: "+e.message+"\n\n":void 0!==e.messages&&(a+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(a+="Filename: "+e.filename+"\n"),void 0!==e.line&&(a+="Line Number: "+e.line+"\n"),i.alertSystemError(a)},auth(e,i){const a=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,i?.errorHeader?a.alertDefault("error",Array.isArray(i.errorHeader)?t.config.globalProperties.$p.t.apply(null,i.errorHeader):i.errorHeader,e.message,!0):a.alertDefault("error",e.message,n)}}};class r{constructor(e,i){void 0===i?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,i,a,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,i,a,n)),post:(e,i,a,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,i,a,n))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(i||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new r(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const o=new r(F);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),o.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=o,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const C="error",D="retval",O={get:function(t,e,i=null){return O._axiosCall(t,e,"get",i)},post:function(t,e,i=null){return O._axiosCall(t,e,"post",i)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(C)||!t.hasOwnProperty(D)||0!=t.error)},isError:function(t){return!O.isSuccess(t)},hasData:function(t){return!(!O.isSuccess(t)||!("object"==typeof t[D]&&Object.keys(t[D]).length>0||"array"==typeof t[D]&&t[D].length>0||"string"==typeof t[D]&&""!=t[D].trim()||"number"==typeof t[D]))},getData:function(t){return O.hasData(t)?t[D]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(D)?t[D]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(C)?t[C]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,i){},_axiosCall:function(t,e,i,a){let n={method:i,url:O._generateRouterURI(t),timeout:5e3};if("get"==i?n.params=e:n.data=e,"object"==typeof a)for(var r in a)n[r]=a[r];return axios(n)}},P=document.createElement("div"),E=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:i},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){P.parentElement.removeChild(P)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});E.use(t),E.use(a);const j=E.mount(P);document.body.appendChild(P);var B={install:(t,e)=>{t.config.globalProperties.$p||t.use(U);const i={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);j.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);j.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);j.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);j.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);j.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,i)=>{j.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((i,a)=>{j.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){i(!0)},reject(){i(!1)}})}),alertDefault(t,e,i,a=!1,n=!1){let r={severity:t,summary:e,detail:i,html:n};a||(r.life=3e3),j.$refs.toast.add(r)},alertMultiple(t,e="info",i="Info",a=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,i,t,a,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return i.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(i.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,i.alertSystemError(e)}i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return i.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(i.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?i.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?i.alertWarning(JSON.stringify(t.data.retval)):i.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>i.handleFormValidation(e,t)}else if(400==t?.response?.status){let a=O.getError(t.response.data);"object"!=typeof a&&(a=t.response.data),i.resetFormValidation(e);const n=Object.entries(a).filter(([t,i])=>{const a=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!a||(a.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:i})),!1)}).map(t=>t[1]),r=e.querySelector("[data-fhc-form-error]");return void(r&&n.length?r.dispatchEvent(new CustomEvent("fhc-form-error",{detail:n})):n.forEach(i.alertError))}if(400==t?.response?.status){let e=O.getError(t.response.data);i.alertError("object"==typeof e?Object.values(e):e)}else i.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=i,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},M={install:(t,e)=>{if(t.config.globalProperties.$api)return;function i(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,i])=>i.forEach(i=>e(i,t)))}t.config.globalProperties.$fhcAlert||t.use(B);let a={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const i=t.config.globalProperties.$p;if(!i)return Promise.reject("Phrasen plugin not loaded!");async function a(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,i])=>{t[e]||(t[e]=[]),Array.isArray(i)?t[e].push(...i):t[e].push(i)})}return t},{});let e=0;const a=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,a])=>{if("_default"==t){await i.loadCategory("dashboard");t='
    '+i.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=a.length,t+"
    "+a.join("
    ")+"
    "}));return{counter:e,msgs:a}}let n,r;Array.isArray(e)?({counter:n,msgs:r}=await a(e)):({counter:n,msgs:r}=await Object.entries(e).reduce(async(t,[e,i])=>{const n=await t,{counter:r,msgs:o}=await a(i);return n.counter+=r,n.msgs.push("
    "+e+"
    "+o.join("")+"
    "),n},Promise.resolve({counter:0,msgs:[]}))),await i.loadCategory("ui");const o=i.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",o,"
    "+r.join("")+"
    ",!0,!0)},php(e){i(e,(e,i)=>{var a="";switch(a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",i,a,!0);break;case"Notice":case"User Notice":case"Runtime Notice":i?i+=": PHP "+e.severity:i="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",i,a,!0);break;default:a="Type: PHP "+e.severity+"\n\n"+a,i&&(a=i+"\n\n"+a),t.config.globalProperties.$fhcAlert.alertSystemError(a)}})},exception(e){i(e,(e,i)=>{var a="";i&&(a+=i+"\n\n"),a+="Type: "+e.class+"\n\n",a+="Message: "+e.message+"\n\n",a+="Filename: "+e.filename+"\n",a+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(a+="\nBacktrace: ",e.backtrace.forEach(t=>{a+="\n\tFile: "+t.file+"\n",a+="\tLine: "+t.line+"\n",a+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(a)})},db(e){i(e,(e,i)=>{var a="";i&&(a+=i+"\n\n"),void 0!==e.heading&&(a+=e.heading+"\n\n"),void 0!==e.code&&(a+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(a+="SQL: "+e.sql+"\n\n"),void 0!==e.message?a+="Message: "+e.message+"\n\n":void 0!==e.messages&&(a+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(a+="Filename: "+e.filename+"\n"),void 0!==e.line&&(a+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(a)})},auth(e){i(e,(e,i)=>{i?i+=": "+e.message:i=e.message;var a="";a+="Controller name: "+e.controller+"\n",a+="Method name: "+e.method+"\n",a+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",i,a,!0)})}}};function n(t,e,i,a){if("string"==typeof t&&void 0===a)[e,i,a]=[t,e,i],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===i&&void 0===a&&(a=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},a?a.form=t:a={form:t}}return[e,i,a]}function r(t){if("string"==typeof t.data||t.data instanceof String)return r({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function o(t){if(!1===t||"off"===t)return{...a,success:!1,fail:!1};if(!t||!0===t)return{...a};if("success"===t)return{...a,fail:!1};if("fail"===t)return{...a,success:!1};const{success:e,fail:i,handler:n,combine:r}=t;return t={...a},Object.entries({fail:i,success:e}).forEach(([e,i])=>{void 0!==i&&(t[e]=i)}),Object.entries({handler:n,combine:r}).forEach(([e,i])=>{void 0!==i&&(t[e]={...t[e],...i})}),t}function s(t){const e=o(t?.errorHandling);if(t?.form){const i=e.handler.form;e.handler={...e.handler,form:e=>i(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const i={},a=[];if(null==e)return{};for(;e.length;)a.push(e.pop());for(var n of a){let a=n.type,o=null;for(var r in t.combine){let e=t.combine[r].includes(a),i=t.handler[r];if(e&&i&&(o=r,"form"==o))break}o&&(a=o);t.handler[a]?(i[a]||(i[a]=[]),Array.isArray(n)?i[a].push(...n):i[a].push(n)):e.push(n)}return i}void 0!==e?.errorHandling&&(a=o(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,i])=>{if(i instanceof FileList)for(const a of i)t.FormData.append(e+(i.length>1?"[]":""),a);else Array.isArray(i)?i.every(t=>!(t instanceof File))?t.jsondata[e]=i:i.forEach(a=>t.FormData.append(e+(i.length>1?"[]":""),a)):t.jsondata[e]=i;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(i=>(e.config[i.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[i.type])(i,e.config))),r(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=s(t.config);if(!e.fail)return Promise.reject(t);const i=l(t),a=d(e,i);for(var n in a)e.handler[n](a[n]);return i.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,i,a)=>([e,i,a]=n(t,e,i,a),i&&(a?a.params=i:a={params:i}),p.get(e,a)),post:(t,e,i,a)=>([e,i,a]=n(t,e,i,a),p.post(e,i,a)),call(e,i,a){if(Array.isArray(e)){const r=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),r.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=n(a,void 0,void 0,i||{}),r=s(e);if(!r.success&&!r.fail)return t;const o={};for(var p of t){const[t,e]="fulfilled"===p.status?[r.success,p.value]:[r.fail,p.reason];if(!t)return;const i=d(r,l(e));for(var c in i)o[c]?o[c][e.config.errorHeader]=i[c]:o[c]={[e.config.errorHeader]:i[c]}}for(var u in o)r.handler[u](o[u]);return t})}let{method:r,url:o,params:p,config:c}=e;return void 0!==i&&(c=i),r||(r="get"),r.toLowerCase&&(r=r.toLowerCase()),"get"==r?this.get(a,o,p,c):"post"==r?this.post(a,o,p,c):void console.error("FhcApi: method not allowed:",r)},getErrorHandler:t=>s(t)},t.provide("$api",t.config.globalProperties.$api)}},N={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const R=Vue.reactive({}),L={};let V=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),I=Vue.computed(()=>V.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==V.value).LC_Time:null);const H={user_language:V,user_locale:I,setLanguage(t){const e=Object.keys(R);return this.config.globalProperties.$api.call(N.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{R[t.category][t.phrase]=t.text}),V.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(L[t]||(L[t]=this.config.globalProperties.$api.call(N.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{R[t]=e})),L[t])},t_ref(t,e,i){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,i))},t(t,e,i){if(void 0===i&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(i=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,i),"";let a=Vue.computed(()=>R[t]?function(t,e,i){let a=R[t][e];return a?(i&&(a=a.replace(/\{([^}]*)\}/g,(t,e)=>void 0===i[e]?t:i[e])),a):"<< PHRASE "+e+">>"}(t,e,i):"");return R[t]||this.loadCategory(t),a.value}};var U={install(t,e){t.config.globalProperties.$fhcApi||t.use(x),t.config.globalProperties.$api||t.use(M),t.config.globalProperties.$p={t:H.t,loadCategory:e=>H.loadCategory.call(t,e),setLanguage:e=>H.setLanguage.call(t,e),user_language:V,user_locale:I,t_ref:H.t_ref},t.provide("$p",t.config.globalProperties.$p)}},G=Object.freeze({__proto__:null,default:U,user_locale:I}),q={components:{DmsItem:{emits:["delete"],props:{modelValue:{type:[File,Object],required:!0}},data:()=>({preview:""}),watch:{modelValue(t){"application/x.fhc-dms+json"==t.type&&t.text().then(t=>{const e=JSON.parse(t);this.preview=e.preview||""})}},template:'\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • '}},emits:["update:modelValue"],props:{modelValue:{type:[FileList,Array],required:!0},multiple:Boolean,id:String,name:String,inputClass:[String,Array,Object],noList:Boolean,accept:{type:String,default:""},disabled:{type:Boolean,default:!1}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),addFiles(t){if(!this.multiple)return this.$emit("update:modelValue",t.target.files);const e=new DataTransfer,i=[];for(var a of this.modelValue)e.items.add(a),i.push(this.stringifyFile(a));for(var a of t.target.files)i.indexOf(this.stringifyFile(a))<0&&e.items.add(a);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],i=new DataTransfer;for(var a of this.modelValue)a!==e&&i.items.add(a);this.$emit("update:modelValue",i.files)}},watch:{modelValue(t){if(!t)return;if(t instanceof FileList){if(!this.$refs.upload)return;return this.$refs.upload.files=t}const e=new DataTransfer;for(var i of t)if(i instanceof File)e.items.add(i);else{const t=new File([JSON.stringify(i)],i.name,{type:"application/x.fhc-dms+json"});e.items.add(t)}this.$emit("update:modelValue",e.files)}},template:'\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},J={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal","toggleFullscreen"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen,this.$emit("toggleFullscreen")}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,i,a){const n=this,r={};void 0!==t&&(r.default=()=>t),void 0!==i&&(r.title=()=>i),void 0!==a&&(r.footer=()=>a);let o=!1;return"undefined"!=typeof primevue&&(o=!0),new Promise((t,i)=>{const a=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":a.unmount},r),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):i())},unmounted(){s.parentElement.removeChild(s)}}),s=document.createElement("div");o&&a.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return G}).then(t=>{a.use(t.default),a.mount(s),document.body.appendChild(s)})})},template:''},Z={getConfig:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getConfig"}),getConfigStudent:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getConfigStudent"}),getStudentProjektarbeiten:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudentProjektarbeiten",params:{uid:t}}),getStudentProjektabgaben:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudentProjektabgaben",params:{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid}}),postStudentProjektarbeitEndupload:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),postStudentProjektarbeitZwischenabgabe:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),getMitarbeiterProjektarbeiten:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten",params:{showall:t}}),postProjektarbeitAbgabe(t){let e=t.datum;if(t.datum instanceof Date){e=`${t.datum.getFullYear()}-${String(t.datum.getMonth()+1).padStart(2,"0")}-${String(t.datum.getDate()).padStart(2,"0")}`}return{method:"post",url:"/api/frontend/v1/Abgabe/postProjektarbeitAbgabe",params:{paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:e,note:t.note_pk,upload_allowed:!!t.upload_allowed,beurteilungsnotiz:t.beurteilungsnotiz??"",fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.betreuer_person_id}}},deleteProjektarbeitAbgabe:t=>({method:"post",url:"/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe",params:{paabgabe_id:t}}),postSerientermin:(t,e,i,a,n,r,o)=>({method:"post",url:"/api/frontend/v1/Abgabe/postSerientermin",params:{datum:t,paabgabetyp_kurzbz:e,bezeichnung:i,kurzbz:a,upload_allowed:n,projektarbeit_ids:r,fixtermin:o}}),fetchDeadlines:t=>({method:"post",url:"/api/frontend/v1/Abgabe/fetchDeadlines",params:{person_id:t}}),getPaAbgabetypen:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getPaAbgabetypen"}),getNoten:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getNoten"}),getProjektarbeitenForStudiengang:(t,e=0)=>({method:"get",url:"/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang",params:{studiengang_kz:t,benotet:e}}),getStudiengaenge:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudiengaenge"}),postStudentProjektarbeitZusatzdaten:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),getSignaturStatusForProjektarbeitAbgaben:(t,e)=>({method:"post",url:"/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben",params:{paabgabe_ids:t,student_uid:e}})};const W={name:"FhcOverlay",props:{active:{type:Boolean,default:!1}},template:'\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t'},Y={name:"AbgabeStudentDetail",components:{Upload:q,BsModal:J,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,Accordion:primevue.accordion,AccordionTab:primevue.accordiontab,Message:primevue.message,Inplace:primevue.inplace,VueDatePicker:n,FhcOverlay:W},inject:["notenOptions","isMobile","isViewMode","moodle_link"],props:{projektarbeit:{type:Object,default:null},viewMode:{type:Boolean,default:!1}},data:()=>({loading:!1,eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}),methods:{getNoteBezeichnung(t){const e=this.notenOptions.find(e=>e.note==t.note);return e?.bezeichnung?e?.positiv?this.$capitalize(this.$p.t("abgabetool/c4positivBenotet"))+" ✅":this.$capitalize(this.$p.t("abgabetool/c4negativBenotet"))+" ❌":!0!==e?.benotbar||t.note?"":this.$capitalize(this.$p.t("abgabetool/c4notYetGraded"))},async validate(t,e=!1){return t.file.length?!e||!1!==await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/confirmEnduploadSpeichern"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"p-button-primary",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"p-button-secondary"}):(this.$fhcAlert.alertWarning(this.$capitalize(this.$p.t("global/warningChooseFile"))),!1)},async triggerEndupload(){if(!await this.validate(this.enduploadTermin,!0))return!1;const t=new FormData;t.append("paabgabetyp_kurzbz",this.enduploadTermin.paabgabetyp_kurzbz),t.append("projektarbeit_id",this.enduploadTermin.projektarbeit_id),t.append("paabgabe_id",this.enduploadTermin.paabgabe_id),t.append("student_uid",this.projektarbeit.student_uid),t.append("bperson_id",this.projektarbeit.bperson_id),t.append("sprache",this.form.sprache.sprache),t.append("abstract",this.form.abstract),t.append("abstract_en",this.form.abstract_en),t.append("schlagwoerter",this.form.schlagwoerter),t.append("schlagwoerter_en",this.form.schlagwoerter_en),t.append("seitenanzahl",this.form.seitenanzahl);for(let e=0;e{this.handleUploadRes(t,this.enduploadTermin)}).finally(()=>{this.loading=!1}),this.$refs.modalContainerEnduploadZusatzdaten.hide()},downloadAbgabe(t){const e=`/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;window.open(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+e)},formatDate(t){const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},async upload(t){if(!await this.validate(t))return!1;if("end"===t.bezeichnung?.paabgabetyp_kurzbz)this.enduploadTermin=t,this.$refs.modalContainerEnduploadZusatzdaten.show();else{const e=new FormData;e.append("paabgabetyp_kurzbz",t.paabgabetyp_kurzbz),e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("paabgabe_id",t.paabgabe_id),e.append("student_uid",this.projektarbeit.student_uid),e.append("bperson_id",this.projektarbeit.bperson_id);for(let i=0;i{this.handleUploadRes(e,t)}).finally(()=>{this.loading=!1})}},handleUploadRes(t,e){"success"==t.meta.status?(this.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t("abgabetool/c4fileUploadSuccessv3"))),e.abgabedatum=(new Date).toISOString().split("T")[0],void 0!==t?.data?.signatur&&(e.signatur=t.data.signatur)):this.$fhcAlert.alertError(this.$capitalize(this.$p.t("abgabetool/c4fileUploadErrorv3"))),t.meta.signaturInfo&&this.$fhcAlert.alertInfo(t.meta.signaturInfo)},getOptionLabel:t=>t.sprache,getTerminNoteBezeichnung(t){const e=this.notenOptions.find(e=>e.note==t.note);return e?e.bezeichnung:""}},watch:{projektarbeit(t){this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract??"",this.form.abstract_en=t.abstract_en??"",this.form.schlagwoerter=t.schlagwoerter??"",this.form.schlagwoerter_en=t.schlagwoerter_en??"",this.form.kontrollschlagwoerter=t.kontrollschlagwoerter??"",this.form.seitenanzahl=t.seitenanzahl??1}},computed:{getMoodleLink(){return this.moodle_link+this.projektarbeit.studiengang_kz},getMessagePtStyle:()=>({root:{style:{margin:"0px"}},wrapper:{style:{padding:"6px"}}}),getEid(){return this.$capitalize(this.$p.t("abgabetool/c4eidesstattlicheErklaerung"))},allowedToSaveZusatzdaten(){return this.form.schlagwoerter.length>0&&this.form.schlagwoerter_en.length>0&&this.form.abstract.length>0&&this.form.abstract_en.length>0&&this.form.seitenanzahl>0},getAllowedToSendEndupload(){return this.eidAkzeptiert&&this.allowedToSaveZusatzdaten},qualityGateTerminAvailable(){let t=!1;return this.projektarbeit?.abgabetermine.forEach(e=>{"qualgate1"!=e.paabgabetyp_kurzbz&&"qualgate2"!=e.paabgabetyp_kurzbz||(t=!0)}),t},getTooltipVerspaetet(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipVerspaetet")),class:"custom-tooltip"}},getTooltipVerpasst(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipVerpasst")),class:"custom-tooltip"}},getTooltipAbzugeben(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbzugeben")),class:"custom-tooltip"}},getTooltipStandard(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipStandardv2")),class:"custom-tooltip"}},getTooltipAbgegeben(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgegeben")),class:"custom-tooltip"}},getTooltipFixtermin(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipFixtermin")),class:"custom-tooltip"}},getTooltipAbgabeDetected(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgabeDetected")),class:"custom-tooltip"}},getTooltipNotAllowedToUpload(){return this.isViewMode?{value:this.$capitalize(this.$p.t("abgabetool/c4studentAbgabeNotAllowedInViewMode")),class:"custom-tooltip"}:{value:this.$capitalize(this.$p.t("abgabetool/c4studentAbgabeNotAllowedRegular")),class:"custom-tooltip"}},getTooltipBeurteilungerforderlich(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipBeurteilungerforderlich")),class:"custom-tooltip"}},getTooltipBestanden(){return{value:this.$p.t("abgabetool/c4tooltipBestanden"),class:"custom-tooltip"}},getTooltipNichtBestanden(){return{value:this.$p.t("abgabetool/c4tooltipNichtBestanden"),class:"custom-tooltip"}}},created(){},mounted(){},template:'\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t(\'abgabetool/c4abgabeStudentenbereich\') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'person/student\') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'abgabetool/c4titel\') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'abgabetool/c4betreuerv2\') ) }}: {{projektarbeit ? $p.t(\'abgabetool/c4betrart\' + projektarbeit.betreuerart_kurzbz) + \' \' + projektarbeit.betreuer : \'\'}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t(\'abgabetool/c4checkoutStgMoodleInfos\') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t(\'abgabetool/c4keineAbgabetermineGefunden\') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n '},K="Europe/Vienna",Q=luxon.DateTime.now().setZone(K);function X(t,e){const i=luxon.DateTime.fromISO(t.datum,{zone:K}).endOf("day"),a=t.abgabedatum?luxon.DateTime.fromISO(t.abgabedatum,{zone:K}):null;t.diffindays=i.diff(Q,"days").days;const n=a&&a>i;if(t.note){const i="object"==typeof t.note?t.note:e.find(e=>e.note==t.note);if(!0===i?.positiv)return"bestanden";if(!1===i?.positiv)return"nichtbestanden"}return t.bezeichnung?.benotbar&&i<=Q?"beurteilungerforderlich":t.upload_allowed?t.abgabedatum?n?"verspaetet":"abgegeben":ithis.notenOptions),isViewMode:Vue.computed(()=>this.isViewMode),moodle_link:Vue.computed(()=>this.moodle_link)}},props:{student_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({uid:""}),validator:t=>t&&t.uid}},data:()=>({activeTabIndex:[0],abgabeTypeOptions:null,phrasenPromise:null,phrasenResolved:!1,loading:!1,notenOptions:null,detail:null,projektarbeiten:null,selectedProjektarbeit:null,moodle_link:null}),methods:{checkQualityGatesStrict(t){let e=!1,i=!1;return t.forEach(t=>{const a=this.notenOptions?.find(e=>e.note==t.note);a&&a.positiv&&("qualgate1"==t.paabgabetyp_kurzbz?e=!0:"qualgate2"==t.paabgabetyp_kurzbz&&(i=!0))}),e&&i},checkQualityGatesOptional(t){const e=t.find(t=>"qualgate1"==t.paabgabetyp_kurzbz),i=t.find(t=>"qualgate2"==t.paabgabetyp_kurzbz);let a=!0;e&&(a=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate1"==t.paabgabetyp_kurzbz&&(a=!0)}));let n=!0;return i&&(n=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate2"==t.paabgabetyp_kurzbz&&(n=!0)})),a&&n},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){this.loading=!0,this.loadAbgaben(t).then(e=>{const i=this.projektarbeiten?.find(e=>e.projektarbeit_id==t.projektarbeit_id);i.abgabetermine=e.data[0].retval;const a=null!==i.note;i.abgabetermine.forEach(t=>{if(t.file=[],t.allowedToUpload=!1,"end"==t.paabgabetyp_kurzbz){const e=!t.fixtermin||!this.isPastDate(t.datum);t.allowedToUpload=e&&this.checkQualityGatesOptional(i.abgabetermine)}else t.fixtermin?t.allowedToUpload=!this.isPastDate(t.datum):t.allowedToUpload=t.upload_allowed;a&&(t.allowedToUpload=!1),t.bezeichnung=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz===t.paabgabetyp_kurzbz),t.dateStyle=X(t,this.notenOptions)}),i.betreuer=this.buildBetreuer(i),i.student_uid=this.student_uid,this.selectedProjektarbeit=i,this.$refs.modalContainerAbgabeDetail.show()}).finally(()=>{this.loading=!1})},centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",detailFormatter(t){const e=t.getValue();return"detailTermine"===e.mode?'
    ':"beurteilungDownload"===e.mode?'
    ':void 0},mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",buildMailToLink:t=>"mailto:"+t.email,buildBetreuer:t=>(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),async setupData(t){const e=t[0]??null;e&&(this.projektarbeiten=e.map(t=>({...t,details:{student_uid:this.student_uid,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.bperson_id,betreuerart_kurzbz:t.betreuerart_kurzbz,mode:"detailTermine"},beurteilung1:t.downloadLink1??null,beurteilung2:t.downloadLink2??null,sem:t.studiensemester_kurzbz,stg:t.kurzbzlang,mail:this.buildMailToLink(t),betreuer:this.buildBetreuer(t),typ:t.projekttypbezeichnung,titel:t.titel})))},loadProjektarbeiten(){this.$api.call(Z.getStudentProjektarbeiten(this.student_uid)).then(t=>{t?.data&&this.setupData(t.data)})},loadAbgaben(t){return new Promise(e=>{this.$api.call(Z.getStudentProjektabgaben(t)).then(t=>{e(t)})})},async setupMounted(){this.loadProjektarbeiten()},getAccTabHeaderForProjektarbeit(t){let e="";return e+=t.titel??this.$p.t("abgabetool/keinTitel"),e},getMailLink:t=>t.email?"mailto:"+t.email:"",getNoteBezeichnung(t){if(t.note&&this.notenOptions){const e=this.notenOptions.find(e=>e.note==t.note);return e?.bezeichnung}return""},handleDownloadBeurteilung1(t){window.open(t.beurteilung1)},handleDownloadBeurteilung2(t){window.open(t.beurteilung2)}},watch:{},computed:{isViewMode(){return this.student_uid!==this.viewData.uid},student_uid(){return this.student_uid_prop||this.viewData?.uid||null}},async created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0}),this.loading=!0,await this.$api.call(Z.getNoten()).then(t=>{"success"==t.meta.status&&(this.notenOptions=t.data[0],this.allowedNotenOptions=this.notenOptions.filter(e=>t.data[1].includes(e.note)))}).finally(()=>{this.loading=!1}),this.$api.call(Z.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1}),this.$api.call(Z.getConfigStudent()).then(t=>{this.moodle_link=t.data?.moodle_link}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\n '},et={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},it="Filter Component New Filter";var at={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let i=e.type.toLowerCase();return i.indexOf("int")>=0?t[e.name]="Numeric":i.indexOf("varchar")>=0||i.indexOf("text")>=0||i.indexOf("bpchar")>=0?t[e.name]="Text":i.indexOf("timestamp")>=0||i.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=it);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:it})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},nt={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const rt={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},ot={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var st={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let n=[];for(var e in t){var i,a=t[e];a&&("[object String]"===Object.prototype.toString.call(a)?null!==(i=this.stringToFileFormatter(a))?n.push({icon:"fa-solid "+rt[i],label:a===e?ot[i]:e,formatter:i}):null!==(i=this.stringToFileFormatter(e))?n.push({icon:"fa-solid "+rt[i],label:a,formatter:i}):alert("neither "+e+" nor "+a+" are supported download file types"):"object"!=typeof a||Array.isArray(a)?null!==(i=this.stringToFileFormatter(e))?n.push({icon:"fa-solid "+rt[i],label:ot[i],formatter:i}):alert(e+" is not a supported download file type"):null!==(i=this.stringToFileFormatter(e))?(void 0===a.formatter&&(a.formatter=i),void 0===a.label&&(a.label=ot[i]),void 0===a.icon&&(a.icon=rt[i]),n.push(a)):(void 0===a.label&&(a.label=e),n.push(a)))}t=n}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+rt[e],label:ot[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const lt=new WeakMap;var dt={mounted(t,e){let i=!1;lt.set(t,e=>{if(!i)return;if(t.contains(e.target))return;const a=bootstrap.Collapse.getInstance(t);a&&a.hide()}),t.addEventListener("shown.bs.collapse",()=>{i=!0}),t.addEventListener("hide.bs.collapse",()=>{i=!1}),document.addEventListener("click",lt.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",lt.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var i=0,a=this.table.rowManager.element.clientWidth,n=0,r=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(r=t),t.visible&&(i+=t.getWidth())}),r?(n=a-i+r.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(r.setWidth(0),this.table.modules.responsiveLayout.update()),n>0?r.setWidth(n):r.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var pt={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},ct=0;const ut={components:{CoreFetchCmpt:et,FilterConfig:at,FilterColumns:nt,TableDownload:st},directives:{collapseAutoClose:dt},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],i=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(i=this.tabulatorOptions.columns),!Array.isArray(i)||Array.isArray(i)&&i.length=0,i.push(t)}}else for(let a of i)a.visible=e.indexOf(a.field)>=0||-1==t.indexOf(a.field),a.hasOwnProperty("resizable")&&(a.resizable=a.visible);return i},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,i=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(pt.getFilter(t)),null,i):this.startFetchCmpt(t=>this.$api.call(pt.getFilterById(t)),{filterId:e},i)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.selectableRows||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let i=0;i{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.tabulatorOptions.selectableRows||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(pt.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(pt.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(pt.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(pt.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,i=t.currentTarget.getAttribute("href");e=null==i?t.currentTarget.value:i.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(pt.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let i=e[this.parentIdField];for(let a=0;a{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'},ht={name:"AbgabeMitarbeiterDetail",components:{BsModal:J,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,SpeedDial:primevue.speeddial,Accordion:primevue.accordion,AccordionTab:primevue.accordiontab,Message:primevue.message,VueDatePicker:n},emits:["paUpdated"],inject:["abgabeTypeOptions","abgabetypenBetreuer","allowedNotenOptions","notenOptionsNonFinal","turnitin_link","old_abgabe_beurteilung_link"],props:{projektarbeit:{type:Object,default:null},isFullscreen:{type:Boolean,default:!1},assistenzMode:{type:Boolean,default:!1}},data(){return{showAutomagicModalPhrase:!1,eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,speedDialItems:[{label:Vue.computed(()=>this.$p.t("abgabetool/c4newAbgabetermin")),icon:"fa fa-plus",command:this.openCreateNewAbgabeModal,disabled:Vue.computed(()=>!this.getAllowedToCreateNewTermin)},{label:Vue.computed(()=>this.$p.t("abgabetool/c4benoten")),icon:"fa fa-user-check",command:this.openBenotung,disabled:Vue.computed(()=>1==this.assistenzMode)},{label:Vue.computed(()=>this.$p.t("abgabetool/c4plagiatcheck_link")),icon:"fa fa-clipboard-check",command:this.openPlagiatcheck},{label:Vue.computed(()=>this.$p.t("abgabetool/c4student_perspective")),icon:"fa fa-eye",command:this.openStudentPage}],newTermin:null,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}},methods:{getNoteBezeichnung(t){return t.noteBackend?.bezeichnung?t.noteBackend?.positiv?this.$capitalize(this.$p.t("abgabetool/c4positivBenotet"))+" ✅":this.$capitalize(this.$p.t("abgabetool/c4negativBenotet"))+" ❌":!0!==t.bezeichnung?.benotbar||t.noteBackend?"":this.$capitalize(this.$p.t("abgabetool/c4notYetGraded"))},getPlaceholderTermin(t){return t?.bezeichnung?this.$p.t("abgabetool/c4paatyp"+t.paabgabetyp_kurzbz):this.$p.t("abgabetool/abgabetypPlaceholder")},saveTermin(t){return t.paabgabe_id,t.note_pk=t.note?.note??null,t.betreuer_person_id=this.projektarbeit.betreuer_person_id,t.fixtermin=!t.invertedFixtermin,this.$api.call(Z.postProjektarbeitAbgabe(t)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert"));const i=this.allowedNotenOptions.find(t=>t.note==e.data[0].note),a={allowedToSave:!0,allowedToDelete:!0,...e.data[0]};a.note&&(a.note=i,a.noteBackend=i),a.invertedFixtermin=!a.fixtermin;const n=e.data[1],r=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==a.paabgabetyp_kurzbz);if(a.bezeichnung={bezeichnung:t.bezeichnung?.bezeichnung,paabgabetyp_kurzbz:t.bezeichnung?.paabgabetyp_kurzbz,benotbar:r.benotbar},n){const e=this.allowedNotenOptions.find(t=>t.note==n.note);n.note=e,t.paabgabetyp_kurzbz=a.paabgabetyp_kurzbz,t.noteBackend=i,t.dateStyle=X(t,this.notenOptions)}else a.dateStyle=X(a,this.notenOptions),this.projektarbeit.abgabetermine.push(a);this.projektarbeit.abgabetermine.sort((t,e)=>new Date(t.datum)-new Date(e.datum)),this.projektarbeit.abgabetermine.findIndex(e=>t.paabgabe_id==e.paabgabe_id);const o=!n&&!a.note?.positiv&&null!==a.note,s=n&&!a.note?.positiv&&null!==a.note&&(n.note?.positiv||void 0===n.note);o||s?(this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:!1,paabgabetyp_kurzbz:"",bezeichnung:this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===a.paabgabetyp_kurzbz),abgabedatum:null,insertvon:this.viewData?.uid??""},this.showAutomagicModalPhrase=!0,this.$refs.modalContainerCreateNewAbgabe.show()):this.showAutomagicModalPhrase=!1,this.$emit("paUpdated",this.projektarbeit)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},openZusatzdatenModal(){this.$refs.modalContainerZusatzdaten.show()},async saveZusatzdaten(){if(!await this.validateZusatzdaten())return!1;const t=this.projektarbeit,e=new FormData;e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("sprache",this.form.sprache.sprache),e.append("abstract",this.form.abstract),e.append("abstract_en",this.form.abstract_en),e.append("schlagwoerter",this.form.schlagwoerter),e.append("schlagwoerter_en",this.form.schlagwoerter_en),e.append("seitenanzahl",this.form.seitenanzahl),this.loading=!0,this.$api.call(Z.postStudentProjektarbeitZusatzdaten(e)).then(e=>{if("success"==e.meta.status){if(this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert")),!data?.retval?.[0])return;const e=data.retval[0];t.seitenanzahl=e.seitenanzahl??1,t.kontrollschlagwoerter=e.kontrollschlagwoerter??"",t.schlagwoerter=e.schlagwoerter??"",t.sprache=e.sprache??"",t.schlagwoerter_en=e.schlagwoerter_en??"",t.abstract=e.abstract??"",t.abstract_en=e.abstract_en??""}}).finally(()=>{this.loading=!1}),this.$refs.modalContainerZusatzdaten.hide()},async validateZusatzdaten(){return!1!==await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/confirmZusatzdatenSpeichern"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"p-button-primary",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"p-button-secondary"})},async handleDeleteTermin(t){if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4confirm_delete"),acceptLabel:"Löschen",acceptClass:"p-button-danger",rejectLabel:"Zurück",rejectClass:"p-button-secondary"}))return!1;this.deleteTermin(t)},deleteTermin(t){this.$api.call(Z.deleteProjektarbeitAbgabe(t.paabgabe_id)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/genericDeleted",[this.$p.t("abgabetool/abgabe")]));const e=this.projektarbeit.abgabetermine.findIndex(e=>e.paabgabe_id===t.paabgabe_id);this.projektarbeit.abgabetermine.splice(e,1),this.$emit("paUpdated",this.projektarbeit)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},downloadAbgabe(t){const e=`/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;window.open(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+e)},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabelSprache:t=>t.sprache,getOptionLabelAbgabetyp(t){return this.$p.t("abgabetool/c4paatyp"+t.paabgabetyp_kurzbz)},getOptionDisabled:t=>!t.aktiv,getNotenOptionLabel:t=>t.bezeichnung,openStudentPage(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Student/"+this.projektarbeit?.student_uid;window.open(t,"_blank")},openPlagiatcheck(){const t=this.turnitin_link;window.open(t,"_blank")},async openBenotung(){if(this.getSemesterBenotbar&&this.projektarbeit?.abgabetermine.find(t=>"end"==t.paabgabetyp_kurzbz&&null!==t.abgabedatum)&&this.projektarbeit?.beurteilungLinkNew){const t=this.projektarbeit?.beurteilungLinkNew;window.open(t,"_blank")}else if(this.projektarbeit?.abgabetermine.find(t=>"end"==t.paabgabetyp_kurzbz&&null!==t.abgabedatum)&&this.projektarbeit?.beurteilungLinkOld){if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4aeltereParbeitBenotenv2"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"btn btn-danger",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"btn btn-outline-secondary"}))return!1;const t=this.projektarbeit?.beurteilungLinkOld;window.open(t,"_blank")}else if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4keinEnduploadErfolgt"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"btn btn-danger",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"btn btn-outline-secondary"}))return!1},formatDate(t){const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},openCreateNewAbgabeModal(){if("Zweitbegutachter"!=this.projektarbeit?.betreuerart_kurzbz){if(!this.newTermin){const t=this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz);this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:t.upload_allowed_default,paabgabetyp_kurzbz:"",bezeichnung:t,abgabedatum:null,insertvon:this.viewData?.uid??""}}this.$refs.modalContainerCreateNewAbgabe.show()}else this.$fhcAlert.alertWarning("Terminanlage disabled")},validateTermin:t=>!0,async handleSaveNewAbgabe(t){if(!this.validateTermin(t))return this.$fhcAlert.alertWarning("invalid termin"),!1;await this.saveTermin(t),this.$refs.modalContainerCreateNewAbgabe.hide(),this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:!1,paabgabetyp_kurzbz:"",bezeichnung:this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz),abgabedatum:null,insertvon:this.viewData?.uid??""}},handleChangeAbgabetyp(t){"qualgate1"===t.bezeichnung?.paabgabetyp_kurzbz||"qualgate2"===t.bezeichnung?.paabgabetyp_kurzbz?t.kurzbz=t.bezeichnung.bezeichnung:t.kurzbz=""}},computed:{getAllowedToCreateNewTermin(){if(this.assistenzMode)return!0;if("Zweitbegutachter"==this.projektarbeit?.betreuerart_kurzbz)return!1;if(void 0!==this.projektarbeit?.note&&null!==this.projektarbeit.note){return!!this.notenOptionsNonFinal.find(t=>t.note)}return!0},allowedToSaveZusatzdaten(){return this.form.schlagwoerter.length>0&&this.form.schlagwoerter_en.length>0&&this.form.abstract.length>0&&this.form.abstract_en.length>0&&this.form.seitenanzahl>0},getAllowedAbgabeTypeOptions(){return this.assistenzMode?this.abgabeTypeOptions:this.abgabeTypeOptions.filter(t=>this.abgabetypenBetreuer.includes(t.paabgabetyp_kurzbz))},getMessagePtStyle:()=>({root:{style:{margin:"0px"}},wrapper:{style:{padding:"6px"}}}),getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert},getSemesterBenotbar(){return this.projektarbeit?.isCurrent??!1},endUploadVorhanden(){return this.projektarbeit?.abgabetermine.find(t=>"end"===t.paabgabetyp_kurzbz&&null!==t.abgabedatum)},qualityGateTerminAvailable(){let t=!1;return this.projektarbeit?.abgabetermine.forEach(e=>{"qualgate1"!=e.bezeichnung?.paabgabetyp_kurzbz&&"qualgate2"!=e?.bezeichnung?.paabgabetyp_kurzbz||(t=!0)}),t},getSpeedDialStyle:()=>"position: static !important;",getSpeedDialWrapperStyle:()=>"position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;",getTooltipVerspaetet(){return{value:this.$p.t("abgabetool/c4tooltipVerspaetet"),class:"custom-tooltip"}},getTooltipVerpasst(){return{value:this.$p.t("abgabetool/c4tooltipVerpasst"),class:"custom-tooltip"}},getTooltipAbzugeben(){return{value:this.$p.t("abgabetool/c4tooltipAbzugeben"),class:"custom-tooltip"}},getTooltipStandard(){return{value:this.$p.t("abgabetool/c4tooltipStandardv2"),class:"custom-tooltip"}},getTooltipBeurteilungerforderlich(){return{value:this.$p.t("abgabetool/c4tooltipBeurteilungerforderlich"),class:"custom-tooltip"}},getTooltipAbgegeben(){return{value:this.$p.t("abgabetool/c4tooltipAbgegeben"),class:"custom-tooltip"}},getTooltipFixtermin(){return{value:this.$p.t("abgabetool/c4tooltipFixtermin"),class:"custom-tooltip"}},getTooltipAbgabeDetected(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgabeDetected")),class:"custom-tooltip"}},getTooltipNotAllowedToSave(){return{value:this.$p.t("abgabetool/c4notAllowedToEditAbgabeTermin"),class:"custom-tooltip"}},getTooltipNotAllowedToDelete(){return{value:this.$p.t("abgabetool/c4notAllowedToDeleteAbgabeTermin"),class:"custom-tooltip"}},getTooltipBestanden(){return{value:this.$p.t("abgabetool/c4tooltipBestanden"),class:"custom-tooltip"}},getTooltipNichtBestanden(){return{value:this.$p.t("abgabetool/c4tooltipNichtBestanden"),class:"custom-tooltip"}},getProjektarbeitTitel(){return this.projektarbeit?.titel?this.$capitalize(this.$p.t("abgabetool/c4titel"))+": "+this.projektarbeit.titel:""},getProjektarbeitStudent(){return this.projektarbeit?.student?this.$capitalize(this.$p.t("person/student"))+": "+this.projektarbeit.student:""}},watch:{"newTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.newTermin.kurzbz=t.bezeichnung),this.newTermin.upload_allowed=t.upload_allowed_default},projektarbeit(t){const e=this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz);this.newTermin={paabgabe_id:-1,projektarbeit_id:t.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:e.upload_allowed_default,paabgabetyp_kurzbz:"",bezeichnung:e,abgabedatum:null,insertvon:this.viewData?.uid??""},t?.abgabetermine?.forEach(t=>t.invertedFixtermin=!t.fixtermin),this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract??"",this.form.abstract_en=t.abstract_en??"",this.form.schlagwoerter=t.schlagwoerter??"",this.form.schlagwoerter_en=t.schlagwoerter_en??"",this.form.kontrollschlagwoerter=t.kontrollschlagwoerter??"",this.form.seitenanzahl=t.seitenanzahl??1}},created(){},mounted(){},template:'\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t(\'abgabetool/c4abgabeMitarbeiterbereich\') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\x3c!--\t\t\t\tTODO: tooltip why this button is disabled--\x3e\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t(\'abgabetool/c4keineAbgabetermineGefunden\') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n'};function gt(t,e,i){let a=document.createElement("div"),n=null,r=t.getValue();if(Array.isArray(r)){const t=r[0]?new Date(r[0]):null,e=r[1]?new Date(r[1]):null;n=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:n}),watch:{val(t){i(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(a),a}async function bt(t,e,i,a,n){let r=t.join(","),o="";const s=i&&"string"==typeof i?i.length+9:0;if(r.length>2024&&!1===await a.confirm({message:n.t("stv","zuvieleEMails")}))return;let l=!0,d=e?.ctrlKey||e?.metaKey;for(;r.length>0;){if(r.length+s>2024){let t=r.lastIndexOf(",",1900);o=r.substring(0,t),r=r.substring(t+1)}else o=r,r="";let t=d?`mailto:?bcc=${o}`:`mailto:${o}`;i&&"string"==typeof i&&(t+=`?subject=${i}`),l?(window.location.href=t,l=!1):!0===await a.confirm({message:n.t("stv","weitereEMail")})&&(window.location.href=t)}}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let i=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let a=new Date(t[1]);return a.setHours(23,59,59,999),i>=e&&i<=a}return i.toDateString()===e.toDateString()}let a=new Date(t);return i.toDateString()===a.toDateString()}});const ft={name:"AbgabetoolMitarbeiter",components:{BsModal:J,CoreFilterCmpt:ut,AbgabeDetail:ht,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,TieredMenu:primevue.tieredmenu,VueDatePicker:n,FhcOverlay:W},provide(){return{abgabeTypeOptions:Vue.computed(()=>this.abgabeTypeOptions),abgabetypenBetreuer:Vue.computed(()=>this.abgabetypenBetreuer),allowedNotenOptions:Vue.computed(()=>this.allowedNotenOptions),notenOptionsNonFinal:Vue.computed(()=>this.notenOptionsNonFinal),turnitin_link:Vue.computed(()=>this.turnitin_link),old_abgabe_beurteilung_link:Vue.computed(()=>this.old_abgabe_beurteilung_link)}},props:{viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.uid}},data(){return{tableData:null,abgabetypenBetreuer:null,detailIsFullscreen:!1,phrasenPromise:null,phrasenResolved:!1,turnitin_link:null,old_abgabe_beurteilung_link:null,BETREUER_SAMMELMAIL_BUTTON_STUDENT:null,saving:!1,loading:!1,abgabeTypeOptions:null,notenOptions:null,allowedNotenOptions:null,notenOptionsNonFinal:null,serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:"",upload_allowed:!1}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitDataStretch",placeholder:Vue.computed(()=>this.$p.t("global/noDataAvailable")),selectable:!0,selectableCheck:this.selectionCheck,rowHeight:40,columns:[{formatter:function(t,e,i){if(!t.getRow().getData().selectable)return;let a=document.createElement("input");a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),t.getRow().getData().checkbox=a;let n=document.createElement("div");return n.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",n.appendChild(a),n},titleFormatter:function(t,e,i){let a=document.createElement("input");return a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),a},hozAlign:"center",headerSort:!1,formatterParams:{handleClick:this.selectHandler},titleFormatterParams:{handleClick:this.selectAllHandler},width:50,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4details"))),field:"details",formatter:this.detailFormatter,headerFilter:!1,headerSort:!1,widthGrow:1,tooltip:!1,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4personenkennzeichen"))),headerFilter:!0,field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4vorname"))),field:"vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nachname"))),field:"nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4projekttyp"))),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"studiensemester_kurzbz",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4titel"))),field:"titel",headerFilter:!0,formatter:this.centeredTextFormatter,maxWidth:500,widthGrow:8},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4betreuerartv2"))),field:"betreuerart_beschreibung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4prevAbgabetermin"))),field:"prevTermin",headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nextAbgabetermin"))),field:"nextTermin",headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate1Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate1Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate2Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate2Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1}],persistence:!1,persistenceID:"abgabeTableBetreuer2026-02-26"},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{"details"===e.getColumn().getField()?(this.setDetailComponent(e.getValue()),this.undoSelection(e)):"mail"===e.getColumn().getField()&&this.undoSelection(e)}},{event:"rowSelectionChanged",handler:async t=>{this.selectedData.filter(e=>!t.includes(e)).forEach(t=>{t.checkbox&&(t.checkbox.checked=!1)}),t.forEach(t=>{t.checkbox&&(t.checkbox.checked=!0)}),this.selectedData=t}}]}},methods:{handlePaUpdated(t){this.checkAbgabetermineProjektarbeit(t),this.$refs.abgabeTable.tabulator.redraw(!0)},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});bt([...new Set(e)],t.originalEvent,"",this.$fhcAlert,this.$p)},getQGateStatusList(){return[this.$p.t("abgabetool/c4keinTerminVorhanden"),this.$p.t("abgabetool/c4positivBenotet"),this.$p.t("abgabetool/c4negativBenotet"),this.$p.t("abgabetool/c4notYetGraded"),this.$p.t("abgabetool/c4notSubmitted"),this.$p.t("abgabetool/c4notHappenedYet")]},sortFuncTerminCol:(t,e,i,a,n,r,o)=>null==t?1:null==e?-1:"prevTermin"==n._column.field?Math.abs(e.diffMs)-Math.abs(t.diffMs):"nextTermin"==n._column.field?Math.abs(t.diffMs)-Math.abs(e.diffMs):Math.abs(e.diffMs)-Math.abs(t.diffMs),headerFilterTerminCol(t,e){if(!e||!e.luxonDate||!e.luxonDate.isValid)return!1;const i=e.luxonDate,a=t=>{if(!t)return null;let e;return e=t instanceof Date?luxon.DateTime.fromJSDate(t):"string"==typeof t?luxon.DateTime.fromISO(t):luxon.DateTime.fromMillis(Number(t)),e.isValid?e:null},n=a(t[0]),r=a(t[1]);return n&&!r?i.hasSame(n,"day"):!(!n||!r)&&(i>=n.startOf("day")&&i<=r.endOf("day"))},loadState(){return JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID)||"null")},saveState(t){if(!this.stateRestored)return;const e={columns:t.getColumnLayout().map(t=>({field:t.field,visible:t.visible,width:t.width})),sort:t.getSorters().map(t=>({field:t.field,dir:t.dir})),filters:t.getFilters(),headerFilters:t.getHeaderFilters()};localStorage.setItem(this.abgabeTableOptions.persistenceID,JSON.stringify(e))},handleTableBuilt(){const t=this.$refs.abgabeTable.tabulator;this.tableBuiltResolve(),t.on("columnMoved",()=>{this.saveState(t)}),t.on("columnResized",()=>{this.saveState(t)}),t.on("columnVisibilityChanged",()=>{this.saveState(t)}),t.on("filterChanged",()=>{this.saveState(t)}),t.on("headerFilterChanged",()=>{this.saveState(t)}),t.on("dataSorted",()=>{this.saveState(t)}),t.on("columnSorted",()=>{this.saveState(t)}),t.on("sortersChanged",()=>{this.saveState(t)});const e=this.loadState();t.on("renderComplete",()=>{if(!this.stateRestored){if(e?.columns&&!this.colLayoutRestored){const i=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(i),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let i of e.headerFilters)t.setHeaderFilterValue(i.field,i.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const i=e.sort.map(e=>{const i=t.columnManager.findColumn(e.field);return i?{column:i,dir:e.dir}:null}).filter(Boolean);t.setSort(i)},100)),this.stateRestored=!0}})},checkQualityGateStatus(t){const e=[],i=[];t.qgate1Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate1StatusRank=0,t.qgate2Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate2StatusRank=0,t.abgabetermine.forEach(t=>{"qualgate1"==t.paabgabetyp_kurzbz&&e.push(t),"qualgate2"==t.paabgabetyp_kurzbz&&i.push(t)}),e.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate1Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate1StatusRank=5):(t.qgate1Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate1StatusRank=4)}else null==e.note&&t.qgate1StatusRank<=3?(t.qgate1Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate1StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate1StatusRank<=2?(t.qgate1Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate1StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate1StatusRank<=1&&(t.qgate1Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate1StatusRank=1)}),i.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate2Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate2StatusRank=5):(t.qgate2Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate2StatusRank=4)}else null==e.note&&t.qgate2StatusRank<=3?(t.qgate2Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate2StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate2StatusRank<=2?(t.qgate2Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate2StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate2StatusRank<=1&&(t.qgate2Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate2StatusRank=1)})},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(i=>{i.dateStyle=X(i,this.notenOptions);const a=luxon.DateTime.fromISO(i.datum).endOf("day");i.luxonDate=a,i.diffMs=a.toMillis()-e.toMillis(),i.diffMs<0?(!t.prevTermin||i.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=i):i.diffMs>0&&(!t.nextTermin||i.diffMs
    '+t+'

    '+i+" - "+this.formatDate(e.datum)+"

    "}return""},selectHandler(t,e){const i=e.getRow();return i.isSelected()?i.deselect():i.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const i=e.getTable().getRows().filter(t=>t.getData().selectable);return i.every(t=>t.isSelected())?i.forEach(t=>t.deselect()):i.forEach(t=>t.select()),t.stopPropagation(),!1},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},toggleShowAll(t){this.showAll=t,this.loading=!0,this.loadProjektarbeiten(t,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1})},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){this.saving=!0,this.$api.call(Z.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.serienTermin.upload_allowed,this.selectedData?.map(t=>t.projektarbeit_id),!1)).then(t=>{if("success"===t.meta.status&&t.data){this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert"));const t=this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft,e=this.$refs.abgabeTable?.tabulator.rowManager.scrollTop;this.loading=!0,this.loadProjektarbeiten(this.showAll,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1,Vue.nextTick(()=>{const i=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");i&&(i.scrollLeft=t,i.scrollTop=e)})})}else this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"))}).finally(()=>{this.saving=!1}),this.$refs.modalContainerAddSeries.hide()},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){this.loading=!0;const e=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);let i=!1;if(void 0!==e.note&&null!==e.note){this.notenOptionsNonFinal.find(t=>t.note)&&(i=!1),i=!0}e?.abgabetermine?.length&&this.$api.call(Z.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const i=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);i&&void 0!==t.signatur&&(i.signatur=t.signatur)})}),e.abgabetermine.forEach(t=>{const e=this.allowedNotenOptions.find(e=>e.note==t.note);e&&(t.note=e),t.file=[],!t.noteBackend&&e&&(t.noteBackend=e),t.allowedToSave=!i,t.allowedToDelete=t.allowedToSave&&!t.abgabedatum,t.bezeichnung=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz===t.paabgabetyp_kurzbz)}),e.student_uid=t.student_uid,e.student=`${e.vorname} ${e.nachname}`,this.selectedProjektarbeit=e,this.$refs.modalContainerAbgabeDetail.show(),this.loading=!1},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.uid+"@"+this.domain},buildPKZ:t=>`${t.uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.tableData=t[0]?.retval?.map(t=>(this.checkAbgabetermineProjektarbeit(t),t.selectable="Zweitbegutachter"!==t.betreuerart_kurzbz,{...t,details:{student_uid:t.uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),typ:t.projekttyp_kurzbz,titel:t.titel})),this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(this.tableData)},loadProjektarbeiten(t=!1,e){this.$api.call(Z.getMitarbeiterProjektarbeiten(t)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()})},loadAbgaben(t){return new Promise(e=>{this.$api.call(Z.getStudentProjektabgaben(t)).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const i=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-i.top-80,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.calcMaxTableHeight()}},watch:{"serienTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.serienTermin.kurzbz=t.bezeichnung),this.serienTermin.upload_allowed=t.upload_allowed_default}},computed:{emailItems(){const t=[];return this.BETREUER_SAMMELMAIL_BUTTON_STUDENT&&t.push({label:this.$p.t("abgabetool/c4sendEmailStudierendev2",[this.uniqueStudentEmailCount]),command:this.sammelMailStudent}),t},uniqueStudentEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.student_uid&&t.add(e.student_uid)}),t.size},getAllowedAbgabeTypeOptions(){return this.abgabeTypeOptions.filter(t=>this.abgabetypenBetreuer.includes(t.paabgabetyp_kurzbz))}},created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0}),this.$api.call(Z.getConfig()).then(t=>{this.turnitin_link=t.data?.turnitin_link,this.old_abgabe_beurteilung_link=t.data?.old_abgabe_beurteilung_link,this.abgabetypenBetreuer=t.data?.abgabetypenBetreuer,this.BETREUER_SAMMELMAIL_BUTTON_STUDENT=t.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT}).catch(t=>{this.loading=!1}),this.$api.call(Z.getNoten()).then(t=>{"success"==t.meta.status&&(this.notenOptions=t.data[0],this.allowedNotenOptions=this.notenOptions.filter(e=>t.data[1].includes(e.note)),this.notenOptionsNonFinal=this.notenOptions.filter(e=>t.data[2].includes(e.note)))}).catch(t=>{this.loading=!1}),this.$api.call(Z.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '};var mt={name:"BootstrapOffcanvas",data:()=>({offcanvas:null}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},keyboard:{type:Boolean,default:!0},scroll:{type:Boolean,default:!1},placement:{type:String,default:"start",validator:t=>["start","end","top","bottom"].includes(t)},noCloseBtn:Boolean,headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"p-4"},footerClass:{type:[String,Array,Object],default:""},dialogClass:[String,Array,Object]},emits:["hideBsOffcanvas","hiddenBsOffcanvas","hidePreventedBsOffcanvas","showBsOffcanvas","shownBsOffcanvas"],methods:{dispose(){return this.offcanvas?.dispose()},hide(){return this.offcanvas?.hide()},show(t){return this.offcanvas?.show(t)},toggle(){return this.offcanvas?.toggle()},popup(t,e,i,a){const n=this,r={};void 0!==t&&(r.default=()=>t),void 0!==i&&(r.title=()=>i),void 0!==a&&(r.footer=()=>a);let o=!1;return"undefined"!=typeof primevue&&(o=!0),new Promise((t,i)=>{const a=Vue.createApp({name:"OffcanvasTmpApp",setup:()=>()=>Vue.h(n,{class:"offcanvas-wrapper",ref:"offcanvas",...e},r),mounted(){this.$refs.offcanvas.show()},beforeUnmount(){this.$refs.offcanvas&&(!1!==this.$refs.offcanvas.result?t(this.$refs.offcanvas.result):i())},unmounted(){s.parentElement.removeChild(s)}}),s=document.createElement("div");o&&a.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return G}).then(t=>{a.use(t.default),a.mount(s),document.body.appendChild(s)})})}},mounted(){this.$refs.offcanvas&&(this.offcanvas=new bootstrap.Offcanvas(this.$refs.offcanvas,{backdrop:this.backdrop,keyboard:this.keyboard,scroll:this.scroll}))},template:'\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t\n\t\t
    \n\t'},vt={getAllStudiensemesterAndAktOrNext:()=>({method:"get",url:"/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext"}),getAll:(t=null,e=null)=>({method:"get",url:"api/frontend/v1/organisation/studiensemester/getAll",params:{order:t,start:e}})};const At={name:"AbgabetoolAssistenz",components:{AbgabeterminStatusLegende:{name:"AbgabeterminStatusLegende",template:'\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipVerspaetet\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipVerpasst\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipAbzugeben\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipStandardv2\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipAbgegeben\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipBeurteilungerforderlich\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipBestanden\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipNichtBestanden\')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t'},BsModal:J,BsOffcanvas:mt,CoreFilterCmpt:ut,AbgabeDetail:ht,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Inplace:primevue.inplace,Textarea:primevue.textarea,Timeline:primevue.timeline,TieredMenu:primevue.tieredmenu,VueDatePicker:n,FhcOverlay:W},provide(){return{abgabeTypeOptions:Vue.computed(()=>this.abgabeTypeOptions),allowedNotenOptions:Vue.computed(()=>this.allowedNotenOptions),notenOptionsNonFinal:Vue.computed(()=>this.notenOptionsNonFinal),turnitin_link:Vue.computed(()=>this.turnitin_link),old_abgabe_beurteilung_link:Vue.computed(()=>this.old_abgabe_beurteilung_link),abgabetypenBetreuer:Vue.computed(()=>this.abgabeTypeOptions)}},props:{stg_kz_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.uid}},data(){return{tableData:null,studiensemesterOptions:null,allSem:null,curSem:null,notenOptionFilter:null,inplaceToggle:!1,headerFiltersRestored:!1,filtersRestored:!1,colLayoutRestored:!1,sortRestored:!1,stateRestored:!1,timelineProjekt:null,selectedStudiengangOption:null,studiengaengeOptions:null,detailIsFullscreen:!1,allConfigPromise:null,phrasenPromise:null,phrasenResolved:!1,turnitin_link:null,old_abgabe_beurteilung_link:null,ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT:null,ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER:null,saving:!1,loading:!1,abgabeTypeOptions:null,notenOptions:null,allowedNotenFilterOptions:null,allowedNotenOptions:null,notenOptionsNonFinal:null,serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:"",fixtermin:!1,invertedFixtermin:!0,upload_allowed:!1}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitData",placeholder:Vue.computed(()=>this.$capitalize(this.$p.t("global/noDataAvailable"))),selectable:!0,selectableCheck:this.selectionCheck,rowHeight:40,renderVerticalBuffer:2e3,columns:[{formatter:function(t,e,i){if(!t.getRow().getData().selectable)return;let a=document.createElement("input");a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),t.getRow().getData().checkbox=a;let n=document.createElement("div");return n.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",n.appendChild(a),n},titleFormatter:function(t,e,i){let a=document.createElement("input");return a.type="checkbox",a.addEventListener("click",i=>{i.stopPropagation(),e&&e.handleClick&&e.handleClick(i,t)}),a},hozAlign:"center",headerSort:!1,formatterParams:{handleClick:this.selectHandler},titleFormatterParams:{handleClick:this.selectAllHandler},width:50,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4details"))),field:"details",headerFilter:!1,headerSort:!1,formatter:this.formAction,tooltip:!1,minWidth:150,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4personenkennzeichen"))),headerFilter:!0,field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4vorname"))),field:"student_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nachname"))),field:"student_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4studstatus"))),field:"studienstatus",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4orgform"))),field:"orgform",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4projekttyp"))),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4note"))),field:"note_bez",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"studiensemester_kurzbz",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4titel"))),field:"titel",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerv2"))),field:"erstbetreuer",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerTitelPre"))),field:"betreuer_titelpre",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerVorname"))),field:"betreuer_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerNachname"))),field:"betreuer_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerTitelPost"))),field:"betreuer_titelpost",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerv2"))),field:"zweitbetreuer",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerTitelPre"))),field:"zweitbetreuer_titelpre",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerVorname"))),field:"zweitbetreuer_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerNachname"))),field:"zweitbetreuer_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerTitelPost"))),field:"zweitbetreuer_titelpost",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4prevAbgabetermin"))),headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,field:"prevTermin",formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nextAbgabetermin"))),field:"nextTermin",headerFilter:gt,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate1Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate1Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate2Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate2Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1}],persistence:!1,persistenceID:"abgabetool_2026_02_26"},abgabeTableEventHandlers:[{event:"rowSelectionChanged",handler:async t=>{this.selectedData.filter(e=>!t.includes(e)).forEach(t=>{t.checkbox&&(t.checkbox.checked=!1)}),t.forEach(t=>{t.checkbox&&(t.checkbox.checked=!0)}),this.selectedData=t}}]}},methods:{handlePaUpdated(t){this.checkAbgabetermineProjektarbeit(t),this.$refs.abgabeTable.tabulator.redraw(!0)},getQGateStatusList(){return[this.$p.t("abgabetool/c4keinTerminVorhanden"),this.$p.t("abgabetool/c4positivBenotet"),this.$p.t("abgabetool/c4negativBenotet"),this.$p.t("abgabetool/c4notYetGraded"),this.$p.t("abgabetool/c4notSubmitted"),this.$p.t("abgabetool/c4notHappenedYet")]},sortFuncTerminCol:(t,e,i,a,n,r,o)=>null==t?1:null==e?-1:"prevTermin"==n._column.field?Math.abs(e.diffMs)-Math.abs(t.diffMs):"nextTermin"==n._column.field?Math.abs(t.diffMs)-Math.abs(e.diffMs):Math.abs(e.diffMs)-Math.abs(t.diffMs),headerFilterTerminCol(t,e){if(!e||!e.luxonDate||!e.luxonDate.isValid)return!1;const i=e.luxonDate,a=t=>{if(!t)return null;let e;return e=t instanceof Date?luxon.DateTime.fromJSDate(t):"string"==typeof t?luxon.DateTime.fromISO(t):luxon.DateTime.fromMillis(Number(t)),e.isValid?e:null},n=a(t[0]),r=a(t[1]);return n&&!r?i.hasSame(n,"day"):!(!n||!r)&&(i>=n.startOf("day")&&i<=r.endOf("day"))},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});const i=[...new Set(e)],a=this.$p.t("abgabetool/c4sammelmailStudentBetreff",[this.selectedStudiengangOption?.bezeichnung]);bt(i,t.originalEvent,a,this.$fhcAlert,this.$p)},sammelMailBetreuer(t){const e=[];this.selectedData.forEach(t=>{t.betreuer_mail&&e.push(t.betreuer_mail),t.zweitbetreuer_mail&&e.push(t.zweitbetreuer_mail)});const i=[...new Set(e)],a=this.$p.t("abgabetool/c4sammelmailBetreuerBetreff",[this.selectedStudiengangOption?.bezeichnung]);bt(i,t.originalEvent,a,this.$fhcAlert,this.$p)},selectHandler(t,e){const i=e.getRow();return i.isSelected()?i.deselect():i.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const i=e.getTable().getRows().filter(t=>t.getData().selectable);return i.every(t=>t.isSelected())?i.forEach(t=>t.deselect()):i.forEach(t=>t.select()),t.stopPropagation(),!1},checkQualityGateStatus(t){const e=[],i=[];t.qgate1Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate1StatusRank=0,t.qgate2Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate2StatusRank=0,t.abgabetermine.forEach(t=>{"qualgate1"==t.paabgabetyp_kurzbz&&e.push(t),"qualgate2"==t.paabgabetyp_kurzbz&&i.push(t)}),e.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate1Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate1StatusRank=5):(t.qgate1Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate1StatusRank=4)}else null==e.note&&t.qgate1StatusRank<=3?(t.qgate1Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate1StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate1StatusRank<=2?(t.qgate1Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate1StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate1StatusRank<=1&&(t.qgate1Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate1StatusRank=1)}),i.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate2Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate2StatusRank=5):(t.qgate2Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate2StatusRank=4)}else null==e.note&&t.qgate2StatusRank<=3?(t.qgate2Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate2StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate2StatusRank<=2?(t.qgate2Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate2StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate2StatusRank<=1&&(t.qgate2Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate2StatusRank=1)})},getItemBezeichnung:t=>t.bezeichnung?t?.bezeichnung?.bezeichnung??t?.bezeichnung:"",getItemNote(t){if(!t?.note)return"";if(t.note?.bezeichnung)return t.note.bezeichnung;const e=this.notenOptions.find(e=>e.note==t.note);return e?e.bezeichnung:t.note},handleChangeAbgabetypSerientermin(t){"qualgate1"===t.bezeichnung?.paabgabetyp_kurzbz||"qualgate2"===t.bezeichnung?.paabgabetyp_kurzbz?t.kurzbz=t.bezeichnung.bezeichnung:t.kurzbz=""},semesterChanged(t){if(this.$refs.abgabeTable.tabulator){const e=this.$refs.abgabeTable.tabulator,i=e.getFilters().filter(t=>"studiensemester_kurzbz"!=t.field),a=t.value.studiensemester_kurzbz==this.$p.t("abgabetool/c4all")?"":t.value.studiensemester_kurzbz,n={field:"studiensemester_kurzbz",type:t.value.studiensemester_kurzbz==this.$p.t("abgabetool/c4all")?"!=":"=",value:a};e.setFilter([...i,n])}},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(i=>{i.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===i.paabgabetyp_kurzbz),i.dateStyle=X(i,this.notenOptions);const a=luxon.DateTime.fromISO(i.datum).endOf("day");i.luxonDate=a,i.diffMs=a.toMillis()-e.toMillis(),i.diffMs<0?(!t.prevTermin||i.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=i):i.diffMs>0&&(!t.nextTermin||i.diffMs({field:t.field,visible:t.visible,width:t.width})),sort:t.getSorters().map(t=>({field:t.field,dir:t.dir})),filters:t.getFilters(),headerFilters:t.getHeaderFilters()};localStorage.setItem(this.abgabeTableOptions.persistenceID,JSON.stringify(e))},handleTableBuilt(){const t=this.$refs.abgabeTable.tabulator;this.tableBuiltResolve(),t.on("columnMoved",()=>{this.saveState(t)}),t.on("columnResized",()=>{this.saveState(t)}),t.on("columnVisibilityChanged",()=>{this.saveState(t)}),t.on("filterChanged",()=>{this.saveState(t)}),t.on("headerFilterChanged",()=>{this.saveState(t)}),t.on("dataSorted",()=>{this.saveState(t)}),t.on("columnSorted",()=>{this.saveState(t)}),t.on("sortersChanged",()=>{this.saveState(t)});const e=this.loadState();t.on("renderComplete",()=>{if(!this.stateRestored){if(e?.columns&&!this.colLayoutRestored){const i=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(i),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let i of e.headerFilters)t.setHeaderFilterValue(i.field,i.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const i=e.sort.map(e=>{const i=t.columnManager.findColumn(e.field);return i?{column:i,dir:e.dir}:null}).filter(Boolean);t.setSort(i)},100)),this.stateRestored=!0}})},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,getOptionLabelStg:t=>t.kurzbzlang+" "+t.bezeichnung,getOptionLabelStudiensemester:t=>t.studiensemester_kurzbz,getNotenFilterOptionLabel:t=>t.bezeichnung,formatDate(t){if(null===t)return"";const e=new Date(t),i=t=>String(t).padStart(2,"0"),a=i(e.getMonth()+1);return`${i(e.getDate())}.${a}.${e.getFullYear()}`},formAction(t){const e=document.createElement("div");e.className="d-flex gap-3",e.style.display="flex",e.style.alignItems="stretch",e.style.justifyContent="center",e.style.height="100%";const i=t.getValue(),a=(t,e,i)=>{const a=document.createElement("button");return a.className="btn btn-outline-secondary",a.style.display="flex",a.style.alignItems="center",a.style.justifyContent="center",a.style.height="100%",a.style.aspectRatio="1 / 1",a.style.padding="0","fa fa-timeline"==t&&(a.style.transform="rotate(90deg)"),a.innerHTML=``,a.title=this.$capitalize(this.$p.t(e)),a.addEventListener("click",t=>{t.stopPropagation(),t.stopImmediatePropagation(),i()}),a};return e.append(a("fa fa-folder-open","abgabetool/c4details",()=>this.setDetailComponent(i)),a("fa fa-timeline","abgabetool/c4termineTimeLine",()=>this.openTimeline(i))),e},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){const t=this.selectedData?.map(t=>t.projektarbeit_id),e=[...this.selectedData];this.saving=!0,this.serienTermin.fixtermin=!this.serienTermin.invertedFixtermin,this.$api.call(Z.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.serienTermin.upload_allowed,t,this.serienTermin.fixtermin)).then(e=>{"success"===e.meta.status&&e.data?this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert")):this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"));const i=e.data;t.forEach(t=>{const e=i.find(e=>e.projektarbeit_id==t),a=this.projektarbeiten.find(e=>e.projektarbeit_id==t);e.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==e.paabgabetyp_kurzbz),a.abgabetermine.push(e),a.abgabetermine.sort((t,e)=>new Date(t.datum)-new Date(e.datum))});const a=this.$refs.abgabeTable.tabulator,n=a.rowManager.scrollLeft,r=a.rowManager.scrollTop,o=this.mapProjekteToTableData(this.projektarbeiten);a.setData(o),a.redraw(!0),Vue.nextTick(()=>{const t=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");t&&(t.scrollLeft=n,t.scrollTop=r)})}).finally(()=>{this.saving=!1,this.selectedData=e}),this.$refs.modalContainerAddSeries.hide()},mapProjekteToTableData(t){return t.map(t=>{if(t.selectable=!0,t.prevTermin=null,t.nextTermin=null,this.checkAbgabetermineProjektarbeit(t),this.notenOptions&&t.note){const e=this.notenOptions.find(e=>e.note==t.note);t.note_bez=e.bezeichnung}return{...t,abgabetermine:t.abgabetermine,details:{student_uid:t.student_uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),erstbetreuer:this.buildErstbetreuer(t),zweitbetreuer:this.buildZweitbetreuer(t),typ:t.projekttyp_kurzbz,titel:t.titel}})},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){const e=this.projektarbeiten.find(e=>e.projektarbeit_id==t.projektarbeit_id);e?.abgabetermine?.length&&this.$api.call(Z.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const i=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);i&&void 0!==t.signatur&&(i.signatur=t.signatur)})});const i=null!==e.note;e.abgabetermine.forEach(t=>{"object"!=typeof t.note&&(t.note=this.allowedNotenOptions.find(e=>e.note==t.note)),!t.noteBackend&&t.note&&(t.noteBackend=t.note),t.file=[],t.allowedToSave=!i,t.allowedToDelete=!i&&!t.abgabedatum});const a=e.vorname??e.student_vorname,n=e.nachname??e.student_nachname;e.student=`${a} ${n}`,this.selectedProjektarbeit=e,this.$refs.modalContainerAbgabeDetail.show()},openTimeline(t){const e=this.projektarbeiten.find(e=>e.projektarbeit_id==t.projektarbeit_id);e?(e.abgabetermine.forEach(t=>{const e=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz==t.paabgabetyp_kurzbz);t.benotbar=e.benotbar}),this.timelineProjekt=e,this.$refs.drawer.show()):this.$fhcAlert.alertInfo("Keine projektarbeit gefunden")},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',mailFormatter:t=>'
    ',timelineFormatter:()=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'",abgabterminFormatter(t){const e=t.getValue();if(e){let t="";switch(e.dateStyle){case"verspaetet":t='';break;case"verpasst":t='';break;case"abzugeben":t='';break;case"standard":t='';break;case"abgegeben":t='';break;case"beurteilungerforderlich":t='';break;case"bestanden":t='';break;case"nichtbestanden":t=''}const i=e.bezeichnung?.bezeichnung??e.bezeichnung;return'
    '+t+'

    '+i+" - "+this.formatDate(e.datum)+"

    "}return""},tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.student_uid+"@"+this.domain},buildPKZ:t=>`${t.student_uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),buildErstbetreuer:t=>t.erstbetreuer_full_name?t.erstbetreuer_full_name:t.betreuer_vorname+" "+t.betreuer_nachname,buildZweitbetreuer:t=>t.zweitbetreuer_full_name??"",async setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.tableData=this.mapProjekteToTableData(this.projektarbeiten),await this.tableBuiltPromise,this.$refs.abgabeTable.tabulator.setData(this.tableData)},loadProjektarbeiten(t=!1,e){this.loading=!0,this.$api.call(Z.getProjektarbeitenForStudiengang(this.selectedStudiengangOption.studiengang_kz,this.notenOptionFilter?.benotet??0)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()}).finally(()=>{this.loading=!1})},loadAbgaben(t){return new Promise(e=>{this.$api.call(Z.getStudentProjektabgaben(t)).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const i=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-i.top-80,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,await this.allConfigPromise,this.calcMaxTableHeight()},getOptionDisabled:t=>!t.aktiv},computed:{emailItems(){const t=[];return this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT&&t.push({label:this.$p.t("abgabetool/c4sendEmailStudierendev2",[this.uniqueStudentEmailCount]),command:this.sammelMailStudent}),this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER&&t.push({label:this.$p.t("abgabetool/c4sendEmailBetreuerv3",[this.uniqueBetreuerEmailCount]),command:this.sammelMailBetreuer}),t},uniqueBetreuerEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.betreuer_mail&&t.add(e.betreuer_mail),e.zweitbetreuer_mail&&t.add(e.zweitbetreuer_mail)}),t.size},uniqueStudentEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.student_uid&&t.add(e.student_uid)}),t.size}},watch:{"serienTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.serienTermin.kurzbz=t.bezeichnung),this.serienTermin.upload_allowed=t.upload_allowed_default},selectedStudiengangOption(t,e){null!==this.notenOptionFilter&&null!==this.selectedStudiengangOption&&this.loadProjektarbeiten()},notenOptionFilter(t){null!==this.notenOptionFilter&&null!==this.selectedStudiengangOption&&this.loadProjektarbeiten()},selectedData(t){const e=this.$refs.abgabeTable?.tabulator;if(!e)return;const i=e.getRows();t.forEach(t=>{const e=i.find(e=>{if(e.getData().projektarbeit_id==t.projektarbeit_id)return e});e.select();const a=e.getElement().children[0]?.children[0]?.children[0];a&&(a.checked=!0)})}},created(){this.loading=!0,this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0});const t=[this.$api.call(Z.getConfig()),this.$api.call(Z.getStudiengaenge()),this.$api.call(vt.getAllStudiensemesterAndAktOrNext()),this.$api.call(Z.getNoten()),this.$api.call(Z.getPaAbgabetypen())];this.allConfigPromise=Promise.allSettled(t).then(t=>{if("fulfilled"===t[0].status){const e=t[0].value;this.turnitin_link=e.data?.turnitin_link,this.old_abgabe_beurteilung_link=e.data?.old_abgabe_beurteilung_link,this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT=e.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT,this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER=e.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER}if("fulfilled"===t[1].status){const e=t[1].value;this.studiengaengeOptions=e.data,this.studiengaengeOptions?.length&&(this.selectedStudiengangOption=this.stg_kz_prop?e.data.find(t=>t.studiengang_kz==this.stg_kz_prop):e.data[0])}if("fulfilled"===t[2].status){const e=t[2].value;this.allSem=e.data[0];const i={studiensemester_kurzbz:this.$p.t("abgabetool/c4all")};this.curSem=i,this.studiensemesterOptions=[i,...this.allSem]}if("fulfilled"===t[3].status){const e=t[3].value;"success"===e.meta?.status&&(this.notenOptions=e.data[0],this.allowedNotenOptions=this.notenOptions.filter(t=>e.data[1].includes(t.note)),this.notenOptionsNonFinal=this.notenOptions.filter(t=>e.data[2].includes(t.note))),this.allowedNotenFilterOptions=[{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/keineNoteEingetragen")),benotet:0},{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/c4benotet")),benotet:1},{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/showAll")),benotet:-1}],this.notenOptionFilter=this.allowedNotenFilterOptions[0]}if("fulfilled"===t[4].status){const e=t[4].value;this.abgabeTypeOptions=e.data}}).finally(()=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '},yt={name:"DeadlineOverview",components:{CoreFilterCmpt:ut},props:{person_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{fullName:null,deadlines:null,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,phrasenPromise:null,phrasenResolved:!1,deadlineTableOptions:{height:700,index:"projektarbeit_id",layout:"fitColumns",placeholder:Vue.computed(()=>this.$p.t("global/noDataAvailable")),columns:[{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zieldatumv2"))),field:"datum",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4fixterminv4"))),field:"fixterminstring",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4abgabetyp"))),field:"typ_bezeichnung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4abgabekurzbzv2"))),field:"kurzbz",formatter:this.centeredTextFormatter,widthGrow:3},{title:Vue.computed(()=>this.$capitalize(this.$p.t("person/studentIn"))),field:"student",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"semester",formatter:this.centeredTextFormatter,widthGrow:1}],persistence:!1},deadlineTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},loadDeadlines(){this.$api.call(Z.fetchDeadlines(this.person_uid_prop??null)).then(t=>{t?.data&&this.setupData(t.data)})},setupData(t){this.deadlines=t,this.deadlines.forEach(t=>{t.student=(t.stud_titelpre?t.stud_titelpre+" ":"")+t.stud_vorname+" "+t.stud_nachname+(t.stud_titelpost?" "+t.stud_titelpost:""),t.fixterminstring=t.fixtermin?this.$p.t("abgabetool/c4yes"):this.$p.t("abgabetool/c4no")}),this.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns),this.$refs.deadlineTable.tabulator.setData(this.deadlines)},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const i=e.getBoundingClientRect();this.deadlineTableOptions.height=window.visualViewport.height-i.top-30,this.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadDeadlines(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0})},mounted(){this.setupMounted()},template:'\n\t\t

    {{$p.t(\'abgabetool/deadlinesTitle\')}} {{ fullName ? (\'-\' + fullName) : \'\'}}

    \n\t\t
    \n\t\t\t\n\t\t \n '};const $t=Vue.createApp({name:"AbgabetoolApp",components:{AbgabetoolStudent:tt,AbgabetoolMitarbeiter:ft,AbgabetoolAssistenz:At,DeadlineOverview:yt},data:function(){return{comp:null,uid:null,student_uid:null,stg_kz:null}},methods:{},computed:{viewData(){return{uid:this.uid}},student_uid_computed(){return this.student_uid??this.uid},stg_kz_computed(){return this.stg_kz??null}},created(){},mounted(){const t=document.getElementById("abgabetoolroot"),e=t.getAttribute("route");this.comp=e;const i=t.getAttribute("uid");this.uid=i;const a=t.getAttribute("stg_kz_prop");this.stg_kz=a;const n=t.getAttribute("student_uid_prop");this.student_uid=n},template:'\n\t\t\n\t'});$t.config.globalProperties.$capitalize=function(t){return t?t[0].toUpperCase()+t.slice(1):""},$t.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),$t.directive("tooltip",primevue.tooltip),$t.use(U),$t.mount("#abgabetoolroot"); //# sourceMappingURL=Abgabetool.js.map diff --git a/public/dist/js/apps/Abgabetool/Abgabetool.js.map b/public/dist/js/apps/Abgabetool/Abgabetool.js.map index 79d25476f..7ce4db481 100644 --- a/public/dist/js/apps/Abgabetool/Abgabetool.js.map +++ b/public/dist/js/apps/Abgabetool/Abgabetool.js.map @@ -1 +1 @@ -{"version":3,"file":"Abgabetool.js","sources":["../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/components/Form/Upload/Dms.js","../../../../js/components/Form/Upload/Dms/Item.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/api/factory/abgabe.js","../../../../js/components/Overlay/FhcOverlay.js","../../../../js/components/Cis/Abgabetool/AbgabeStudentDetail.js","../../../../js/components/Cis/Abgabetool/getDateStyleClass.js","../../../../js/components/Cis/Abgabetool/AbgabetoolStudent.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js","../../../../js/tabulator/filters/Dates.js","../../../../js/helpers/EmailHelpers.js","../../../../js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js","../../../../js/components/Bootstrap/Offcanvas.js","../../../../js/api/factory/studiensemester.js","../../../../js/components/Cis/Abgabetool/StatusLegende.js","../../../../js/components/Cis/Abgabetool/AbgabetoolAssistenz.js","../../../../js/components/Cis/Abgabetool/DeadlineOverview.js","../../../../js/apps/Abgabetool/Abgabetool.js","../../../../js/helpers/StringHelpers.js"],"sourcesContent":["/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import DmsItem from './Dms/Item.js';\n\nexport default {\n\tcomponents: {\n\t\tDmsItem\n\t},\n\temits: [\n\t\t'update:modelValue'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [ FileList, Array ],\n\t\t\trequired: true\n\t\t},\n\t\tmultiple: Boolean,\n\t\tid: String,\n\t\tname: String,\n\t\tinputClass: [String, Array, Object],\n\t\tnoList: Boolean,\n\t\taccept: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmethods: {\n\t\tstringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n\t\taddFiles(event) {\n\t\t\tif (!this.multiple)\n\t\t\t\treturn this.$emit('update:modelValue', event.target.files);\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst doubles = [];\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tdt.items.add(file);\n\t\t\t\tdoubles.push(this.stringifyFile(file));\n\t\t\t}\n\t\t\tfor (var file of event.target.files) {\n\t\t\t\t// NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes\n\t\t\t\tif (doubles.indexOf(this.stringifyFile(file)) < 0)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t},\n\t\tremoveFile(id) {\n\t\t\tconst fileToRemove = Array.from(this.modelValue)[id];\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tif (file !== fileToRemove)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (!n)\n\t\t\t\treturn;\n\t\t\tif (n instanceof FileList) {\n\t\t\t\tif (!this.$refs.upload) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn this.$refs.upload.files = n;\n\t\t\t}\n\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst dms = [];\n\t\t\tfor (var file of n) {\n\t\t\t\tif (file instanceof File) {\n\t\t\t\t\tdt.items.add(file);\n\t\t\t\t} else {\n\t\t\t\t\tconst dmsFile = new File([JSON.stringify(file)], file.name, {\n\t\t\t\t\t\ttype: 'application/x.fhc-dms+json'\n\t\t\t\t\t});\n\t\t\t\t\tdt.items.add(dmsFile);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}","export default {\n\temits: [\n\t\t'delete'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [File, Object],\n\t\t\trequired: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreview: ''\n\t\t};\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (n.type == 'application/x.fhc-dms+json') {\n\t\t\t\tn.text().then(result => {\n\t\t\t\t\tconst obj = JSON.parse(result);\n\t\t\t\t\tthis.preview = obj.preview || '';\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • `\n}\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\",\n\t\t\"toggleFullscreen\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t\tthis.$emit('toggleFullscreen')\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","export default {\n\tgetConfig() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfig'\n\t\t};\n\t},\n\tgetConfigStudent() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfigStudent'\n\t\t};\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektarbeiten',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektabgaben',\n\t\t\tparams: { projektarbeit_id: detail.projektarbeit_id, student_uid: detail.student_uid }\n\t\t};\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetMitarbeiterProjektarbeiten(all) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten',\n\t\t\tparams: { showall: all }\n\t\t};\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\t\n\t\tlet dateString = termin.datum\n\t\tif(termin.datum instanceof Date) {\n\t\t\tconst year = termin.datum.getFullYear();\n\t\t\tconst month = String(termin.datum.getMonth() + 1).padStart(2, '0');\n\t\t\tconst day = String(termin.datum.getDate()).padStart(2, '0');\n\n\t\t\tdateString = `${year}-${month}-${day}`\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postProjektarbeitAbgabe',\n\t\t\tparams: { \n\t\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tdatum: dateString,\n\t\t\t\tnote: termin.note_pk,\n\t\t\t\tupload_allowed: !!termin.upload_allowed,\n\t\t\t\tbeurteilungsnotiz: termin.beurteilungsnotiz ?? '',\n\t\t\t\tfixtermin: termin.fixtermin,\n\t\t\t\tinsertvon: termin.insertvon,\n\t\t\t\tkurzbz: termin.kurzbz,\n\t\t\t\tprojektarbeit_id: termin.projektarbeit_id,\n\t\t\t\tbetreuer_person_id: termin.betreuer_person_id\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe',\n\t\t\tparams: { paabgabe_id }\n\t\t};\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postSerientermin',\n\t\t\tparams: { datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin }\n\t\t};\n\t},\n\tfetchDeadlines(person_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/fetchDeadlines',\n\t\t\tparams: { person_id }\n\t\t};\n\t},\n\tgetPaAbgabetypen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getPaAbgabetypen'\n\t\t};\n\t},\n\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\tgetNoten(){\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getNoten'\n\t\t};\n\t},\n\tgetProjektarbeitenForStudiengang(studiengang_kz, benotet = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang',\n\t\t\tparams: { studiengang_kz, benotet }\n\t\t};\n\t},\n\t// TODO: this could also very well be generic info api\n\tgetStudiengaenge() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudiengaenge'\n\t\t};\n\t},\n\tpostStudentProjektarbeitZusatzdaten(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetSignaturStatusForProjektarbeitAbgaben(paabgabe_ids, student_uid) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben',\n\t\t\tparams: {paabgabe_ids, student_uid},\n\n\t\t};\n\t}\n};","export const FhcOverlay = {\n\tname: 'FhcOverlay',\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\t\n\t},\n\ttemplate: `\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t`\n};\nexport default FhcOverlay;","import Upload from '../../../components/Form/Upload/Dms.js';\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\n\nexport const AbgabeStudentDetail = {\n\tname: \"AbgabeStudentDetail\",\n\tcomponents: {\n\t\tUpload,\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tInplace: primevue.inplace,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tinject: ['notenOptions', 'isMobile', 'isViewMode', 'moodle_link'],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tviewMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\t\n\t\t\tif(noteOpt?.bezeichnung) {\n\t\t\t\treturn noteOpt?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(noteOpt?.benotbar === true && !termin.note) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tasync validate(termin, endupload = false) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$capitalize(this.$p.t('global/warningChooseFile')));\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tif(endupload) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/confirmEnduploadSpeichern'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t},\n\t\tasync triggerEndupload() {\n\t\t\t\n\t\t\tif (!await this.validate(this.enduploadTermin, true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('paabgabetyp_kurzbz', this.enduploadTermin.paabgabetyp_kurzbz)\n\t\t\tformData.append('projektarbeit_id', this.enduploadTermin.projektarbeit_id);\n\t\t\tformData.append('paabgabe_id', this.enduploadTermin.paabgabe_id)\n\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tfor (let i = 0; i < this.enduploadTermin.file.length; i++) {\n\t\t\t\tformData.append('file', this.enduploadTermin.file[i]);\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitEndupload(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.handleUploadRes(res, this.enduploadTermin)\n\t\t\t\t}).finally(()=> {\n\t\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.hide()\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\tasync upload(termin) {\n\n\t\t\t// only do this on endupload\n\t\t\tif (! await this.validate(termin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'end') {\n\t\t\t\t// open endupload form modal for further inputs\n\t\t\t\tthis.enduploadTermin = termin\n\t\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.show()\n\t\t\t} else {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append('paabgabetyp_kurzbz', termin.paabgabetyp_kurzbz)\n\t\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id)\n\t\t\t\tformData.append('paabgabe_id', termin.paabgabe_id)\n\t\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < termin.file.length; i++) {\n\t\t\t\t\tformData.append('file', termin.file[i]);\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZwischenabgabe(formData))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.handleUploadRes(res, termin)\n\t\t\t\t\t}).finally(()=> {\n\t\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\thandleUploadRes(res, termin) {\n\t\t\tif(res.meta.status == \"success\") {\n\t\t\t\tthis.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t('abgabetool/c4fileUploadSuccessv3')))\n\n\t\t\t\t// update 'abgabedatum' for successful upload -> shows the pdf icon and date once set\n\t\t\t\ttermin.abgabedatum = new Date().toISOString().split('T')[0];\n\t\t\t\tif(res?.data?.signatur !== undefined) {\n\t\t\t\t\ttermin.signatur = res.data.signatur\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.$fhcAlert.alertError(this.$capitalize(this.$p.t('abgabetool/c4fileUploadErrorv3')))\n\t\t\t}\n\t\t\t\n\t\t\tif(res.meta.signaturInfo) {\n\t\t\t\tthis.$fhcAlert.alertInfo(res.meta.signaturInfo)\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t},\n\t\tgetOptionLabel(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetTerminNoteBezeichnung(termin) {\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\treturn noteOpt ? noteOpt.bezeichnung : ''\n\t\t},\n\t},\n\twatch: {\n\t\tprojektarbeit(newVal) {\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetMoodleLink() {\n\t\t\treturn this.moodle_link + this.projektarbeit.studiengang_kz\t\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4eidesstattlicheErklaerung'))\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedToSendEndupload() {\n\t\t\treturn this.eidAkzeptiert && this.allowedToSaveZusatzdaten\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerspaetet')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerpasst')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbzugeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipStandardv2')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgegeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipFixtermin')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToUpload() {\n\t\t\tif(this.isViewMode) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedInViewMode')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedRegular')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\t\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeStudentenbereich') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t('person/student') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4titel') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4betreuerv2') ) }}: {{projektarbeit ? $p.t('abgabetool/c4betrart' + projektarbeit.betreuerart_kurzbz) + ' ' + projektarbeit.betreuer : ''}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t('abgabetool/c4checkoutStgMoodleInfos') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n `,\n};\n\nexport default AbgabeStudentDetail;\n","\nconst zone = 'Europe/Vienna';\nconst today = luxon.DateTime.now().setZone(zone);\n\nexport function getDateStyleClass(termin, notenOptions) {\n\tconst datum = luxon.DateTime.fromISO(termin.datum, { zone }).endOf('day');\n\tconst abgabedatum = termin.abgabedatum ? luxon.DateTime.fromISO(termin.abgabedatum, { zone }) : null;\n\ttermin.diffindays = datum.diff(today, 'days').days;\n\tconst isLate = abgabedatum && abgabedatum > datum;\n\n\t// GRADE STATUS\n\tif (termin.note) {\n\t\tconst opt = typeof termin.note === 'object' ? termin.note : notenOptions.find(nopt => nopt.note == termin.note)\n\t\tif (opt?.positiv === true) return 'bestanden';\n\t\telse if (opt?.positiv === false) return 'nichtbestanden';\n\t}\n\t\n\t// ACTION REQUIRED FOR GRADE\n\tif (termin.bezeichnung?.benotbar && datum <= today) {\n\t\treturn 'beurteilungerforderlich';\n\t}\n\n\t// SUBMISSION STATUS\n\tif (termin.upload_allowed) {\n\t\tif (termin.abgabedatum) {\n\t\t\treturn isLate ? 'verspaetet' : 'abgegeben';\n\t\t}\n\n\t\t// no submission yet\n\t\tif (datum < today) return 'verpasst';\n\t\tif (termin.diffindays <= 12) return 'abzugeben';\n\t\treturn 'standard';\n\t}\n\n\t// GENERIC STATUS\n\treturn datum < today ? 'verpasst' : 'standard';\n}","import AbgabeDetail from \"./AbgabeStudentDetail.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport BsModal from \"../../Bootstrap/Modal.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\n\nexport const AbgabetoolStudent = {\n\tname: \"AbgabetoolStudent\",\n\tcomponents: {\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tBsModal,\n\t\tAbgabeDetail,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tnotenOptions: Vue.computed(() => this.notenOptions),\n\t\t\tisViewMode: Vue.computed(() => this.isViewMode),\n\t\t\tmoodle_link: Vue.computed(() => this.moodle_link)\n\t\t}\n\t},\n\tprops: {\n\t\tstudent_uid_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tactiveTabIndex: [0],\n\t\t\tabgabeTypeOptions: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tloading: false,\n\t\t\tnotenOptions: null,\n\t\t\tdetail: null,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\tmoodle_link: null\n\t\t};\n\t},\n\tmethods: {\n\t\tcheckQualityGatesStrict(termine) {\n\t\t\tlet qgate1Passed = false\n\t\t\tlet qgate2Passed = false\n\t\t\t\n\t\t\ttermine.forEach(t => {\n\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\tif(t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\tqgate1Passed = true\n\t\t\t\t\t} else if(t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\tqgate2Passed = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn qgate1Passed && qgate2Passed\n\t\t},\n\t\tcheckQualityGatesOptional(termine) {\n\t\t\tconst qgate1found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate1')\n\t\t\tconst qgate2found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate2')\n\t\t\t\n\t\t\tlet qgate1positiv = true\n\t\t\tif(qgate1found) {\n\t\t\t\tqgate1positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\t\tqgate1positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlet qgate2positiv = true\n\t\t\tif(qgate2found) {\n\t\t\t\tqgate2positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\t\tqgate2positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn qgate1positiv && qgate2positiv\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading = true\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\t\n\t\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\t\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\tif(termin.paabgabetyp_kurzbz == 'end') {\n\t\t\t\t\t\t// old assumed production logic when qgates are required\n\t\t\t\t\t\t// termin.allowedToUpload = !this.isPastDate(termin.datum) && this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst inTime = termin.fixtermin ? !this.isPastDate(termin.datum) : true\n\t\t\t\t\t\ttermin.allowedToUpload = inTime && this.checkQualityGatesOptional(pa.abgabetermine)\n\n\n\t\t\t\t\t\t// development purposes\n\t\t\t\t\t\t// termin.allowedToUpload = this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t// termin.allowedToUpload = true\n\n\t\t\t\t\t} else if(termin.fixtermin) {\n\t\t\t\t\t\ttermin.allowedToUpload = !this.isPastDate(termin.datum)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// this could confuse people since we should dont show people this flag\n\t\t\t\t\t\ttermin.allowedToUpload = termin.upload_allowed \n\t\t\t\t\t}\n\n\t\t\t\t\t// blocks client upload button if projektarbeitet is already beurteilt und thus further abgaben on any termin should be blocked\n\t\t\t\t\tif(paIsBenotet) termin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = this.student_uid\n\t\t\t\t\n\t\t\t\tthis.selectedProjektarbeit = pa\n\n\t\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\t\t\n\t\t\t}).finally(()=>{this.loading=false})\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t}\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\t// should always be \"projekt.mitarbeiter_uid +'@'+ this.domain\", built in backend\n\t\t\treturn 'mailto:' + projekt.email\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\treturn (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tasync setupData(data){\n\t\t\t// this.projektarbeiten = data[0]\n\t\t\tconst projektarbeiten = data[0] ?? null\n\t\t\tif(!projektarbeiten) return\n\t\t\tthis.projektarbeiten = projektarbeiten.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: this.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t\tbetreuer_person_id: projekt.bperson_id,\n\t\t\t\t\t\tbetreuerart_kurzbz: projekt.betreuerart_kurzbz,\n\t\t\t\t\t\tmode\n\t\t\t\t\t},\n\t\t\t\t\tbeurteilung1: projekt.downloadLink1 ?? null,\n\t\t\t\t\tbeurteilung2: projekt.downloadLink2 ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: projekt.kurzbzlang,\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\tbetreuer: this.buildBetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttypbezeichnung,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t},\n\t\tloadProjektarbeiten() {\n\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektarbeiten(this.student_uid))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\t\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.loadProjektarbeiten()\n\t\t},\n\t\tgetAccTabHeaderForProjektarbeit(projektarbeit) {\n\t\t\tlet title = ''\n\t\t\t\n\t\t\ttitle += projektarbeit.titel ?? this.$p.t('abgabetool/keinTitel')\n\t\t\t\n\t\t\treturn title\n\t\t},\n\t\tgetMailLink(projektarbeit) {\n\t\t\tif(projektarbeit.email) {\n\t\t\t\treturn 'mailto:'+projektarbeit.email\n\t\t\t} else return ''\n\t\t},\n\t\tgetNoteBezeichnung(projektarbeit) {\n\t\t\tif(projektarbeit.note && this.notenOptions) {\n\t\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == projektarbeit.note)\n\t\t\t\treturn noteOpt?.bezeichnung\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\thandleDownloadBeurteilung1(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung1)\n\t\t},\n\t\thandleDownloadBeurteilung2(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung2)\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\t\tisViewMode() {\n\t\t\treturn this.student_uid !== this.viewData.uid\n\t\t},\n\t\tstudent_uid() {\n\t\t\treturn this.student_uid_prop || this.viewData?.uid || null\n\t\t}\n\t},\n\tasync created() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\tthis.loading = true\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tawait this.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t}).finally(() => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfigStudent()).then(res => {\n\t\t\tthis.moodle_link = res.data?.moodle_link\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\n `,\n};\n\nexport default AbgabetoolStudent;\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","import BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\n\nexport const AbgabeMitarbeiterDetail = {\n\tname: \"AbgabeMitarbeiterDetail\",\n\tcomponents: {\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tSpeedDial: primevue.speeddial,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tVueDatePicker\n\t},\n\temits: ['paUpdated'],\n\tinject: [\n\t\t'abgabeTypeOptions',\n\t\t'abgabetypenBetreuer',\n\t\t'allowedNotenOptions',\n\t\t'notenOptionsNonFinal',\n\t\t'turnitin_link',\n\t\t'old_abgabe_beurteilung_link'\n\t],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tisFullscreen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tassistenzMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowAutomagicModalPhrase: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tspeedDialItems: [{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4newAbgabetermin')),\n\t\t\t\ticon: \"fa fa-plus\",\n\t\t\t\tcommand: this.openCreateNewAbgabeModal,\n\t\t\t\tdisabled: Vue.computed(() => !this.getAllowedToCreateNewTermin)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4benoten')),\n\t\t\t\ticon: \"fa fa-user-check\",\n\t\t\t\tcommand: this.openBenotung,\n\t\t\t\tdisabled: Vue.computed(()=> this.assistenzMode == true)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4plagiatcheck_link')),\n\t\t\t\ticon: \"fa fa-clipboard-check\",\n\t\t\t\tcommand: this.openPlagiatcheck\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4student_perspective')),\n\t\t\t\ticon: \"fa fa-eye\",\n\t\t\t\tcommand: this.openStudentPage\n\t\t\t}],\n\t\t\tnewTermin: null,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tif(termin.noteBackend?.bezeichnung) {\n\t\t\t\treturn termin.noteBackend?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(termin.bezeichnung?.benotbar === true && !termin.noteBackend) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tgetPlaceholderTermin(termin) {\n\t\t\treturn termin?.bezeichnung ? this.$p.t('abgabetool/c4paatyp' + termin.paabgabetyp_kurzbz) : this.$p.t('abgabetool/abgabetypPlaceholder')\n\t\t},\n\t\tsaveTermin(termin) {\n\t\t\tconst paabgabe_id = termin.paabgabe_id\n\t\t\ttermin.note_pk = termin.note?.note ?? null\n\t\t\ttermin.betreuer_person_id = this.projektarbeit.betreuer_person_id\n\t\t\t\n\t\t\t// phrasentext 'no late submission allowed' to 'late submission allowed' + boolean UI invert\n\t\t\ttermin.fixtermin = !termin.invertedFixtermin\n\t\t\treturn this.$api.call(ApiAbgabe.postProjektarbeitAbgabe(termin)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\n\t\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == res.data[0].note)\n\t\t\t\t\tconst newTerminRes = {\n\t\t\t\t\t\t'allowedToSave': true,\n\t\t\t\t\t\t'allowedToDelete': true,\n\t\t\t\t\t\t...res.data[0]\n\t\t\t\t\t}\n\t\t\t\t\tif(newTerminRes.note) {\n\t\t\t\t\t\tnewTerminRes.note = noteOpt\n\t\t\t\t\t\tnewTerminRes.noteBackend = noteOpt // certain UI elements should only reflect persisted state\n\t\t\t\t\t}\n\t\t\t\t\tnewTerminRes.invertedFixtermin = !newTerminRes.fixtermin\n\t\t\t\t\tconst existingTerminRes = res.data[1]\n\t\t\t\t\t\n\t\t\t\t\tconst abgabeOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == newTerminRes.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tnewTerminRes.bezeichnung = {\n\t\t\t\t\t\tbezeichnung: termin.bezeichnung?.bezeichnung,\n\t\t\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung?.paabgabetyp_kurzbz,\n\t\t\t\t\t\tbenotbar: abgabeOpt.benotbar\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// only insert new abgabe if we actually created a new one, not when saving/editing existing\n\t\t\t\t\tif(!existingTerminRes){\n\t\t\t\t\t\tnewTerminRes.dateStyle = getDateStyleClass(newTerminRes, this.notenOptions)\n\t\t\t\t\t\tthis.projektarbeit.abgabetermine.push(newTerminRes)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst noteOptExisting = this.allowedNotenOptions.find(opt => opt.note == existingTerminRes.note)\n\t\t\t\t\t\texistingTerminRes.note = noteOptExisting\n\n\t\t\t\t\t\ttermin.paabgabetyp_kurzbz = newTerminRes.paabgabetyp_kurzbz\n\t\t\t\t\t\ttermin.noteBackend = noteOpt // do NOT take noteOptExisting -> should reflect the \"yes the qgate grade is confirmed in backend ux behaviour\"\n\t\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.projektarbeit.abgabetermine.sort((a, b) =>new Date(a.datum) - new Date(b.datum))\n\t\t\t\t\t\n\t\t\t\t\tconst index = this.projektarbeit.abgabetermine.findIndex(t => termin.paabgabe_id == t.paabgabe_id)\n\t\t\t\t\t\n\t\t\t\t\t// negative abgabe -> automagically open new termin modal\n\t\t\t\t\t// really bad feature imo that will be annoying to deal with\n\t\t\t\t\t\n\t\t\t\t\t// termin is completely new and has negative note\n\t\t\t\t\tconst savedNewWithNegative = !existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null\n\n\t\t\t\t\t// termin existed previously + oldTermin had different note/positive note or no note at all\n\t\t\t\t\tconst savedExistingNoteAsNegativeAndWasNotNegativeBefore = existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null && (existingTerminRes.note?.positiv || existingTerminRes.note === undefined)\n\n\t\t\t\t\tconst openModalDueToNegativeBeurteilung = savedNewWithNegative || savedExistingNoteAsNegativeAndWasNotNegativeBefore\n\t\t\t\t\tif(openModalDueToNegativeBeurteilung) {\n\t\t\t\t\t\tthis.newTermin = {\n\t\t\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t\t\t'kurzbz': '', // todo kurzbz textfield value vorschlag für qualgates\n\t\t\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t\t\t'upload_allowed': false,\n\t\t\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === newTerminRes.paabgabetyp_kurzbz),\n\t\t\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = true\n\n\t\t\t\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = false\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\topenZusatzdatenModal() {\n\t\t\tthis.$refs.modalContainerZusatzdaten.show()\n\t\t},\n\t\tasync saveZusatzdaten(){\n\t\t\tif (!await this.validateZusatzdaten())\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst pa = this.projektarbeit\n\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id);\n\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZusatzdaten(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res.meta.status == 'success') {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\tif(!data?.retval?.[0]) return\n\t\t\t\t\t\tconst paRes = data.retval[0]\n\t\t\t\t\t\tpa.seitenanzahl = paRes.seitenanzahl ?? 1\n\t\t\t\t\t\tpa.kontrollschlagwoerter = paRes.kontrollschlagwoerter ?? ''\n\t\t\t\t\t\tpa.schlagwoerter = paRes.schlagwoerter ?? ''\n\t\t\t\t\t\tpa.sprache = paRes.sprache ?? ''\n\t\t\t\t\t\tpa.schlagwoerter_en = paRes.schlagwoerter_en ?? ''\n\t\t\t\t\t\tpa.abstract = paRes.abstract ?? ''\n\t\t\t\t\t\tpa.abstract_en = paRes.abstract_en ?? ''\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}).finally(()=> {\n\t\t\t\tthis.loading = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerZusatzdaten.hide()\n\t\t},\n\t\tasync validateZusatzdaten() {\n\t\t\t// just ask once\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/confirmZusatzdatenSpeichern'),\n\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleDeleteTermin(termin){\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/c4confirm_delete'),\n\t\t\t\tacceptLabel: 'Löschen',\n\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\trejectLabel: 'Zurück',\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\tthis.deleteTermin(termin)\n\t\t\t}\n\t\t},\n\t\tdeleteTermin(termin) {\n\t\t\tthis.$api.call(ApiAbgabe.deleteProjektarbeitAbgabe(termin.paabgabe_id)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')]))\n\t\t\t\t\t// this.$p.t('global/tooltipLektorDeleteKontrolle', [this.$entryParams.permissions.kontrolleDeleteMaxReach ])\n\t\t\t\t\tconst deletedTerminIndex = this.projektarbeit.abgabetermine.findIndex(t => t.paabgabe_id === termin.paabgabe_id)\n\t\t\t\t\tthis.projektarbeit.abgabetermine.splice(deletedTerminIndex, 1)\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabelSprache(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option) {\n\t\t\treturn this.$p.t('abgabetool/c4paatyp' + option.paabgabetyp_kurzbz)\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t\tgetNotenOptionLabel(option) {\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\topenStudentPage() {\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenPlagiatcheck() {\n\t\t\tconst link = this.turnitin_link\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tasync openBenotung() {\n\t\t\t// old link check ?\n\t\t\t\n\t\t\tif(this.getSemesterBenotbar && this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkNew) {\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkNew\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else if(this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkOld) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4aeltereParbeitBenotenv2'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkOld\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else {\n\t\t\t\t// show info text that no endupload with abgabe has been found\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4keinEnduploadErfolgt'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\t// unsafe for datepickers, dont use there\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\t\t\t\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\topenCreateNewAbgabeModal() {\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') {\n\t\t\t\t// maybe alert that this is not allowed or smth\n\n\t\t\t\tthis.$fhcAlert.alertWarning('Terminanlage disabled')\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.newTermin) {\n\t\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\t\tthis.newTermin = {\n\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t'bezeichnung': typ,\n\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t},\n\t\tvalidateTermin(termin) {\n\t\t\t// compare new termin to existing ones to block illegal termin constellations, if they exist\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleSaveNewAbgabe(termin) {\n\t\t\t\n\t\t\tif(!this.validateTermin(termin)) {\n\t\t\t\tthis.$fhcAlert.alertWarning('invalid termin')\n\t\t\t\t\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tawait this.saveTermin(termin)\n\t\t\t\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.hide()\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': false,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen'),\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\thandleChangeAbgabetyp(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetAllowedToCreateNewTermin() {\n\t\t\tif(this.assistenzMode) return true\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\tif(this.projektarbeit?.note !== undefined && this.projektarbeit.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) return true\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\t// normally should be allowed if no rules apply\n\t\t\treturn true\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\tif(this.assistenzMode) {\n\t\t\t\treturn this.abgabeTypeOptions\n\t\t\t} else {\n\t\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t\t}\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t},\n\t\tgetSemesterBenotbar(){\n\t\t\treturn this.projektarbeit?.isCurrent ?? false\n\t\t},\n\t\tendUploadVorhanden(){\n\t\t\treturn this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null)\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.bezeichnung?.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe?.bezeichnung?.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetSpeedDialStyle() {\n\t\t\treturn 'position: static !important;'\n\t\t},\n\t\tgetSpeedDialWrapperStyle() {\n\t\t\t// non fullscreen -> wrapper is positioned on right bottom corner of modal, wherever that is\n\t\t\treturn 'position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;'\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerspaetet'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerpasst'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbzugeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipStandardv2'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbgegeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipFixtermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToSave() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToEditAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToDelete() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToDeleteAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetProjektarbeitTitel() {\n\t\t\tif(this.projektarbeit?.titel) return this.$capitalize(this.$p.t('abgabetool/c4titel')) + ': ' + this.projektarbeit.titel\n\t\t\t\n\t\t\treturn ''\n\t\t},\n\t\tgetProjektarbeitStudent(){\n\t\t\tif(this.projektarbeit?.student) return this.$capitalize(this.$p.t('person/student')) + ': ' + this.projektarbeit.student\n\n\t\t\treturn ''\n\t\t}\n\t},\n\twatch: {\n\t\t'newTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.newTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\t\t\t\n\t\t\tthis.newTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\t'projektarbeit'(newVal) {\n\t\t\t// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text\n\t\t\t\n\t\t\t// reset newTermin object\n\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': newVal.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': typ,\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t\tnewVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)\n\t\t\t\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t},\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeMitarbeiterbereich') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n`,\n};\n\nexport default AbgabeMitarbeiterDetail;\n","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","export async function splitMailsHelper(mails, event, subject, alertPluginRef, phrasenPluginRef) {\n\tlet splititem = \",\";\n\tlet maillist = mails.join(splititem);\n\tlet mailto = \"\";\n\t// take subject line length + '?subject=' length into account\n\tconst subjectlength = subject && typeof subject === 'string' ? subject.length + 9 : 0 \n\tif (maillist.length > 2024)\n\t{\n\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'zuvieleEMails') }) === false)\n\t\t\treturn;\n\t}\n\n\tlet firstrun = true;\n\tlet useBcc = event?.ctrlKey || event?.metaKey;\n\twhile (maillist.length > 0)\n\t{\n\t\tif (maillist.length + subjectlength > 2024)\n\t\t{\n\t\t\tlet splitposition = maillist.lastIndexOf(splititem, 1900);\n\t\t\tmailto = maillist.substring(0, splitposition);\n\t\t\tmaillist = maillist.substring(splitposition + 1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmailto = maillist;\n\t\t\tmaillist = \"\";\n\t\t}\n\n\t\tlet mailLink = useBcc ? `mailto:?bcc=${mailto}` : `mailto:${mailto}`;\n\t\tif(subject && typeof subject === 'string') mailLink += `?subject=${subject}`\n\t\tif (firstrun)\n\t\t{\n\t\t\twindow.location.href = mailLink;\n\t\t\tfirstrun = false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'weitereEMail')}) === true)\n\t\t\t{\n\t\t\t\twindow.location.href = mailLink;\n\t\t\t}\n\t\t}\n\n\t}\n}","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\nimport {splitMailsHelper} from \"../../../helpers/EmailHelpers.js\";\n\nexport const AbgabetoolMitarbeiter = {\n\tname: \"AbgabetoolMitarbeiter\",\n\tcomponents: {\n\t\tBsModal,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabetypenBetreuer),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link)\n\t\t}\n\t},\n\tprops: {\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tabgabetypenBetreuer: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tBETREUER_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitDataStretch',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return \n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.detailFormatter, headerFilter: false, headerSort: false, widthGrow: 1, tooltip: false, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4betreuerartv2'))), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))), field: 'prevTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: 'abgabeTableBetreuer2026-02-26'\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"mail\") {\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => {\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tsammelMailStudent(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = \"\"; // empty subject line \n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst rowDate = rowVal.luxonDate;\n\t\t\t\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected) {\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\ttoggleShowAll(showall) {\n\t\t\tthis.showAll = showall\n\t\t\tthis.loading = true\n\t\t\tthis.loadProjektarbeiten(showall, () => {\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tthis.saving = true\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tthis.selectedData?.map(projekt => projekt.projektarbeit_id),\n\t\t\t\tfalse\n\t\t\t)).then(res => {\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\n\t\t\t\t\tconst oldScrollLeft = this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft\n\t\t\t\t\tconst oldScrollTop = this.$refs.abgabeTable?.tabulator.rowManager.scrollTop\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\tthis.loadProjektarbeiten(this.showAll, () => {\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\t\t\tthis.loading = false\n\n\t\t\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\t\t\tif(table) {\n\t\t\t\t\t\t\t\ttable.scrollLeft = oldScrollLeft;\n\t\t\t\t\t\t\t\ttable.scrollTop = oldScrollTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\t\t\t\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\t\t\t\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading=true\n\n\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tlet paIsBenotet = false\n\t\t\tif(pa.note !== undefined && pa.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) paIsBenotet = false\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\tpaIsBenotet = true\n\t\t\t}\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\tif(noteOpt) termin.note = noteOpt\n\t\t\t\ttermin.file = []\n\t\t\t\t\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && noteOpt) {\n\t\t\t\t\ttermin.noteBackend = noteOpt\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// update 08-01-2026: everybody is allowed to do everything in client, critical checks happen at backend level\n\t\t\t\t// termin.allowedToSave = true\n\t\t\t\t\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\t\t\t\t\n\t\t\t\t// lektoren are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = termin.allowedToSave && !termin.abgabedatum\n\t\t\t\t\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\n\t\t\t})\n\t\t\t\n\t\t\tpa.student_uid = details.student_uid\n\t\t\tpa.student = `${pa.vorname} ${pa.nachname}`\n\t\t\t\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\n\t\t\n\t\t\tthis.loading = false\n\t\t\t\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\t\t\t\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\t\n\t\t},\n\t\tsetupData(data){\n\t\t\t\n\t\t\t\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = data[0]?.retval?.map(projekt => {\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\t\t\t\tprojekt.selectable = projekt.betreuerart_kurzbz !== 'Zweitbegutachter'\n\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.$api.call(ApiAbgabe.getMitarbeiterProjektarbeiten(all))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tif(callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\n\t\t\tif(this.BETREUER_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfig()).then(res => {\n\t\t\tthis.turnitin_link = res.data?.turnitin_link\n\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link\n\t\t\tthis.abgabetypenBetreuer = res.data?.abgabetypenBetreuer\n\t\t\tthis.BETREUER_SAMMELMAIL_BUTTON_STUDENT = res.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch noten options\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tthis.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t\t\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolMitarbeiter;\n","export default {\n\tname: 'BootstrapOffcanvas',\n\tdata: () => ({\n\t\toffcanvas: null\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean, String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tscroll: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'start', // start | end | top | bottom\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['start', 'end', 'top', 'bottom'].includes(value);\n\t\t\t}\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\theaderClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: 'p-4'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tdialogClass: [String, Array, Object]\n\t},\n\temits: [\n\t\t\"hideBsOffcanvas\",\n\t\t\"hiddenBsOffcanvas\",\n\t\t\"hidePreventedBsOffcanvas\",\n\t\t\"showBsOffcanvas\",\n\t\t\"shownBsOffcanvas\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.offcanvas?.dispose();\n\t\t},\n\t\thide() {\n\t\t\treturn this.offcanvas?.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.offcanvas?.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.offcanvas?.toggle();\n\t\t},\n\t\tpopup(body, options, title, footer) {\n\t\t\tconst BsOffcanvas = this,\n\t\t\t\tslots = {};\n\n\t\t\tif (body !== undefined)\n\t\t\t\tslots.default = () => body;\n\t\t\tif (title !== undefined)\n\t\t\t\tslots.title = () => title;\n\t\t\tif (footer !== undefined)\n\t\t\t\tslots.footer = () => footer;\n\n\t\t\tlet includedPrimevue = false;\n\t\t\tif (typeof primevue !== 'undefined')\n\t\t\t\tincludedPrimevue = true;\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst instance = Vue.createApp({\n\t\t\t\t\tname: 'OffcanvasTmpApp',\n\t\t\t\t\tsetup() {\n\t\t\t\t\t\treturn () =>\n\t\t\t\t\t\t\tVue.h(BsOffcanvas, {\n\t\t\t\t\t\t\t\tclass: 'offcanvas-wrapper',\n\t\t\t\t\t\t\t\tref: 'offcanvas',\n\t\t\t\t\t\t\t\t...options\n\t\t\t\t\t\t\t}, slots);\n\t\t\t\t\t},\n\t\t\t\t\tmounted() {\n\t\t\t\t\t\tthis.$refs.offcanvas.show();\n\t\t\t\t\t},\n\t\t\t\t\tbeforeUnmount() {\n\t\t\t\t\t\tif (this.$refs.offcanvas)\n\t\t\t\t\t\t\tthis.$refs.offcanvas.result !== false ? resolve(this.$refs.offcanvas.result) : reject();\n\t\t\t\t\t},\n\t\t\t\t\tunmounted() {\n\t\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst wrapper = document.createElement('div');\n\n\t\t\t\tif (includedPrimevue) {\n\t\t\t\t\tinstance.use(primevue.config.default, { zIndex: { overlay: 9999 } });\n\t\t\t\t}\n\n\t\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\t\tinstance.mount(wrapper);\n\t\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.offcanvas) {\n\t\t\tthis.offcanvas = new bootstrap.Offcanvas(this.$refs.offcanvas, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tkeyboard: this.keyboard,\n\t\t\t\tscroll: this.scroll\n\t\t\t});\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAllStudiensemesterAndAktOrNext() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext',\n\t\t};\n\t},\n\tgetAll(order = null, start = null)\n\t{\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: 'api/frontend/v1/organisation/studiensemester/getAll',\n\t\t\tparams: { order, start }\n\t\t};\n\t}\n};","export const AbgabeterminStatusLegende = {\n\tname: 'AbgabeterminStatusLegende',\n\ttemplate: `\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerspaetet')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerpasst')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbzugeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipStandardv2')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbgegeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBeurteilungerforderlich')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBestanden')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipNichtBestanden')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t`\n};\nexport default AbgabeterminStatusLegende;","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport BsOffcanvas from '../../Bootstrap/Offcanvas.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport ApiStudiensemester from '../../../api/factory/studiensemester.js';\nimport AbgabeterminStatusLegende from \"./StatusLegende.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { splitMailsHelper } from \"../../../helpers/EmailHelpers.js\"\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport const AbgabetoolAssistenz = {\n\tname: \"AbgabetoolAssistenz\",\n\tcomponents: {\n\t\tAbgabeterminStatusLegende,\n\t\tBsModal,\n\t\tBsOffcanvas,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tInplace: primevue.inplace,\n\t\tTextarea: primevue.textarea,\n\t\tTimeline: primevue.timeline,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabeTypeOptions)\n\t\t}\n\t},\n\tprops: {\n\t\tstg_kz_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tstudiensemesterOptions: null,\n\t\t\tallSem: null,\n\t\t\tcurSem: null,\n\t\t\tnotenOptionFilter: null,\n\t\t\tinplaceToggle: false,\n\t\t\theaderFiltersRestored: false,\n\t\t\tfiltersRestored: false,\n\t\t\tcolLayoutRestored: false,\n\t\t\tsortRestored: false,\n\t\t\tstateRestored: false,\n\t\t\ttimelineProjekt: null,\n\t\t\tselectedStudiengangOption: null,\n\t\t\tstudiengaengeOptions: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tallConfigPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_BETREUER: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenFilterOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tfixtermin: false,\n\t\t\t\tinvertedFixtermin: true,\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitData',\n\t\t\t\tplaceholder: Vue.computed(() => this.$capitalize(this.$p.t('global/noDataAvailable'))),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\trenderVerticalBuffer: 2000,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t// {\n\t\t\t\t\t// \tfield: 'rowSelection',\n\t\t\t\t\t// \tformatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatterParams: {\n\t\t\t\t\t// \t\trowRange: \"active\" // Only toggle the values of the active filtered rows\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \thozAlign:\"center\",\n\t\t\t\t\t// \theaderSort: false,\n\t\t\t\t\t// \tfrozen: true,\n\t\t\t\t\t// \twidth: 40\n\t\t\t\t\t// },\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', headerFilter: false, headerSort: false, formatter: this.formAction, tooltip:false, minWidth: 150, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'student_vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'student_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4studstatus'))), field: 'studienstatus', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4orgform'))), field: 'orgform', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4note'))), field: 'note_bez', headerFilter: true,\n\t\t\t\t\t\t formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerv2'))), field: 'erstbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPre'))), field: 'betreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerVorname'))), field: 'betreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerNachname'))), field: 'betreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPost'))), field: 'betreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerv2'))), field: 'zweitbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPre'))), field: 'zweitbetreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerVorname'))), field: 'zweitbetreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerNachname'))), field: 'zweitbetreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPost'))), field: 'zweitbetreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))),\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tfield: 'prevTermin', formatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: \"abgabetool_2026_02_26\"\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => \n\t\t\t\t{\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\t\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\t\t\t\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\t\t\t\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs) \n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst rowDate = rowVal.luxonDate;\n\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tsammelMailStudent(param) {\n\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailStudentBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tsammelMailBetreuer(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) recipientList.push(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) recipientList.push(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\t// actually not necessary for email clients but looks better for assistenz if we avoid duplicates here\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailBetreuerBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()){\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected){\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\t\t\t\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\t\t\t\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\t\t\t\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\t\t\t\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tgetItemBezeichnung(item){\n\t\t\tif(!item.bezeichnung) return ''\n\t\t\t\n\t\t\treturn item?.bezeichnung?.bezeichnung ?? item?.bezeichnung\n\t\t},\n\t\tgetItemNote(item) {\n\t\t\t// note can be just a number if it is coming from backend\n\t\t\t// if note was just set it is a note option\n\t\t\tif(!item?.note) return ''\n\t\t\tif(item.note?.bezeichnung) return item.note.bezeichnung\n\t\t\t\n\t\t\tconst notenOption = this.notenOptions.find(note => note.note == item.note)\n\t\t\tif(!notenOption) return item.note\n\t\t\t\n\t\t\treturn notenOption.bezeichnung\n\t\t},\n\t\thandleChangeAbgabetypSerientermin(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t},\n\t\tsemesterChanged(e) {\n\t\t\tif(this.$refs.abgabeTable.tabulator) {\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\t\t// TODO: maybe check if existing synergy really works with many filters\n\t\t\t\tconst existing = table.getFilters().filter(f => f.field != 'studiensemester_kurzbz');\n\n\t\t\t\tconst compVal = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '' : e.value.studiensemester_kurzbz\n\t\t\t\tconst compType = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '!=' : '='\n\t\t\t\tconst newFilter = { field: \"studiensemester_kurzbz\", type: compType, value: compVal };\n\n\t\t\t\t// merge and reapply\n\t\t\t\ttable.setFilter([...existing, newFilter]);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\t\t\t\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\t\t\t\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStg(option){\n\t\t\treturn option.kurzbzlang + ' ' + option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStudiensemester(option){\n\t\t\treturn option.studiensemester_kurzbz\n\t\t},\n\t\tgetNotenFilterOptionLabel(option) {\n\t\t\treturn option.bezeichnung\t\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tif(dateParam === null) return ''\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tformAction(cell) {\n\t\t\tconst actionButtons = document.createElement('div');\n\t\t\tactionButtons.className = \"d-flex gap-3\"; // you can keep Bootstrap gap if loaded\n\t\t\tactionButtons.style.display = \"flex\";\n\t\t\tactionButtons.style.alignItems = \"stretch\"; // buttons stretch to full height\n\t\t\tactionButtons.style.justifyContent = \"center\";\n\t\t\tactionButtons.style.height = \"100%\"; // full grid cell height\n\n\t\t\tconst val = cell.getValue();\n\n\t\t\tconst createButton = (iconClass, titleKey, clickHandler) => {\n\t\t\t\tconst btn = document.createElement('button');\n\t\t\t\tbtn.className = 'btn btn-outline-secondary';\n\t\t\t\tbtn.style.display = \"flex\";\n\t\t\t\tbtn.style.alignItems = \"center\"; // center icon vertically\n\t\t\t\tbtn.style.justifyContent = \"center\"; // center icon horizontally\n\t\t\t\tbtn.style.height = \"100%\"; // fill parent container height\n\t\t\t\tbtn.style.aspectRatio = \"1 / 1\"; // keep square shape (optional)\n\t\t\t\tbtn.style.padding = \"0\"; // remove extra padding for compactness\n\t\t\t\tif(iconClass == 'fa fa-timeline') btn.style.transform = \"rotate(90deg)\";\n\t\t\t\tbtn.innerHTML = ``;\n\t\t\t\tbtn.title = this.$capitalize(this.$p.t(titleKey));\n\t\t\t\tbtn.addEventListener('click', (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tclickHandler();\n\t\t\t\t});\n\t\t\t\treturn btn;\n\t\t\t};\n\n\t\t\tactionButtons.append(\n\t\t\t\tcreateButton('fa fa-folder-open', 'abgabetool/c4details', () => this.setDetailComponent(val)),\n\t\t\t\tcreateButton('fa fa-timeline', 'abgabetool/c4termineTimeLine', () => this.openTimeline(val))\n\t\t\t);\n\n\t\t\treturn actionButtons;\n\t\t},\n\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tconst pids = this.selectedData?.map(projekt => projekt.projektarbeit_id)\n\t\t\t\n\t\t\tconst preserveSelected = [...this.selectedData]\n\t\t\t\n\t\t\tthis.saving = true\n\t\t\tthis.serienTermin.fixtermin = !this.serienTermin.invertedFixtermin\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tpids,\n\t\t\t\tthis.serienTermin.fixtermin\n\t\t\t)).then(res => {\n\t\t\t\t\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// put new abgaben into projektarbeiten\n\t\t\t\tconst newAbgaben = res.data\n\t\t\t\tpids.forEach(pid => {\n\t\t\t\t\tconst abgabe = newAbgaben.find(abgabe => abgabe.projektarbeit_id == pid)\n\t\t\t\t\t\n\t\t\t\t\tconst pa = this.projektarbeiten.find(pa => pa.projektarbeit_id == pid)\n\t\t\t\t\n\t\t\t\t\tabgabe.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == abgabe.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tpa.abgabetermine.push(abgabe)\n\t\t\t\t\tpa.abgabetermine.sort((a, b) => new Date(a.datum) - new Date(b.datum))\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\t// reset selection to empty\n\t\t\t\t// this.$refs.abgabeTable.tabulator.deselectRow()\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator;\n\t\t\t\tconst scrollX = table.rowManager.scrollLeft;\n\t\t\t\tconst scrollY = table.rowManager.scrollTop;\n\t\t\t\t\n\t\t\t\tconst mappedData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\t\ttable.setData(mappedData)\n\t\t\t\ttable.redraw(true)\n\n\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\tif(table) {\n\t\t\t\t\t\ttable.scrollLeft = scrollX;\n\t\t\t\t\t\ttable.scrollTop = scrollY;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t\tthis.selectedData = preserveSelected\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tmapProjekteToTableData(projekte) {\n\t\t\t// const now = luxon.DateTime.now();\n\t\t\treturn projekte.map(projekt => {\n\t\t\t\t\n\t\t\t\t// in assistenz context every projektarbeit should be allowed to be selected i guess\n\t\t\t\tprojekt.selectable = true;\n\t\t\t\t\n\t\t\t\tprojekt.prevTermin = null;\n\t\t\t\tprojekt.nextTermin = null;\n\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\n\t\t\t\tif(this.notenOptions && projekt.note) {\n\t\t\t\t\tconst opt = this.notenOptions.find(n => n.note == projekt.note)\n\t\t\t\t\n\t\t\t\t\t// TODO: mehrsprachig englisch\n\t\t\t\t\tprojekt.note_bez = opt.bezeichnung\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tabgabetermine: projekt.abgabetermine,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\terstbetreuer: this.buildErstbetreuer(projekt),\n\t\t\t\t\tzweitbetreuer: this.buildZweitbetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tconst pa = this.projektarbeiten.find(projektarbeit => projektarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tif(typeof termin.note !== 'object') {\n\t\t\t\t\ttermin.note = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\t}\n\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && termin.note) {\n\t\t\t\t\ttermin.noteBackend = termin.note\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttermin.file = []\n\n\t\t\t\t// assistenz should be able to edit every abgabe\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\n\t\t\t\t// assistenz are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = paIsBenotet ? false : !termin.abgabedatum\n\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tconst vorname = pa.vorname ?? pa.student_vorname\n\t\t\tconst nachname = pa.nachname ?? pa.student_nachname\n\t\t\tpa.student = `${vorname} ${nachname}`\n\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t},\n\t\topenTimeline(val) {\n\t\t\tconst projekt = this.projektarbeiten.find(p => p.projektarbeit_id == val.projektarbeit_id)\n\t\t\tif(!projekt) {\n\n\t\t\t\tthis.$fhcAlert.alertInfo('Keine projektarbeit gefunden')\n\t\t\t\t\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t// show note only on termine with abgabetypen which are benotbar\n\t\t\t\tconst terminTypOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == termin.paabgabetyp_kurzbz)\n\t\t\t\ttermin.benotbar = terminTypOpt.benotbar \n\t\t\t})\n\t\t\tthis.timelineProjekt = projekt\n\t\t\tthis.$refs.drawer.show()\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\ttimelineFormatter() {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\t\t\t\t\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' + \n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\treturn 'mailto:' + projekt.student_uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.student_uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\n\t\t},\n\t\tbuildErstbetreuer(projekt) {\n\t\t\tif(projekt.erstbetreuer_full_name) return projekt.erstbetreuer_full_name\n\t\t\treturn projekt.betreuer_vorname + ' ' + projekt.betreuer_nachname\n\t\t},\n\t\tbuildZweitbetreuer(projekt) {\n\t\t\treturn projekt.zweitbetreuer_full_name ?? ''\n\t\t},\n\t\tasync setupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.getProjektarbeitenForStudiengang(\n\t\t\t\tthis.selectedStudiengangOption.studiengang_kz,\n\t\t\t\tthis.notenOptionFilter?.benotet ?? 0\n\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback()\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.loading=false\n\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tawait this.allConfigPromise\n\t\t\t\n\t\t\t// called through notenOptionFilter/selectedStudiengangOption watcher on startup\n\t\t\t// this.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER) {\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailBetreuerv3', [this.uniqueBetreuerEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailBetreuer\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueBetreuerEmailCount() {\n\t\t\tconst emails = new Set();\n\t\t\t\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) emails.add(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) emails.add(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\tselectedStudiengangOption(newVal, oldVal) {\n\t\t\t// implicitely avoids juggling around promises for created api calls,\n\t\t\t// since we need note & stg flags for loadProjektarbeiten\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tnotenOptionFilter(newVal) {\n\t\t\t// that single where clause is worth a decent load time so rather not filter tabulator but just \n\t\t\t// adapt the qry\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tselectedData(newVal) {\n\t\t\tconst table = this.$refs.abgabeTable?.tabulator\n\t\t\tif(!table) return\n\n\t\t\tconst allRows = table.getRows();\n\n\t\t\tnewVal.forEach(selected => {\n\t\t\t\tconst row = allRows.find(r => {\n\t\t\t\t\tconst data = r.getData()\n\t\t\t\t\tif (data.projektarbeit_id == selected.projektarbeit_id) return r\n\t\t\t\t}) \t\n\t\t\t\t\n\t\t\t\trow.select()\n\t\t\t\tconst cb = row.getElement().children[0]?.children[0]?.children[0]\n\t\t\t\tif(cb) cb.checked = true\n\t\t\t})\n\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.loading = true\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tconst requests = [\n\t\t\tthis.$api.call(ApiAbgabe.getConfig()),\n\t\t\tthis.$api.call(ApiAbgabe.getStudiengaenge()),\n\t\t\tthis.$api.call(ApiStudiensemester.getAllStudiensemesterAndAktOrNext()),\n\t\t\tthis.$api.call(ApiAbgabe.getNoten()),\n\t\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen())\n\t\t];\n\n\t\tthis.allConfigPromise = Promise.allSettled(requests)\n\t\t\t.then((results) => {\n\t\t\t\t// results is an array of { status: 'fulfilled'|'rejected', value?: any, reason?: any }\n\n\t\t\t\t// 1. Config\n\t\t\t\tif (results[0].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[0].value;\n\t\t\t\t\tthis.turnitin_link = res.data?.turnitin_link;\n\t\t\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER;\n\t\t\t\t}\n\n\t\t\t\t// 2. Studiengänge\n\t\t\t\tif (results[1].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[1].value;\n\t\t\t\t\tthis.studiengaengeOptions = res.data;\n\t\t\t\t\tif (this.studiengaengeOptions?.length) {\n\t\t\t\t\t\tthis.selectedStudiengangOption = this.stg_kz_prop\n\t\t\t\t\t\t\t? res.data.find(stgOpt => stgOpt.studiengang_kz == this.stg_kz_prop)\n\t\t\t\t\t\t\t: res.data[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 3. Studiensemester\n\t\t\t\tif (results[2].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[2].value;\n\t\t\t\t\tthis.allSem = res.data[0];\n\t\t\t\t\tconst all = { studiensemester_kurzbz: this.$p.t('abgabetool/c4all') };\n\t\t\t\t\tthis.curSem = all;\n\t\t\t\t\tthis.studiensemesterOptions = [all, ...this.allSem];\n\t\t\t\t}\n\n\t\t\t\t// 4. Noten\n\t\t\t\tif (results[3].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[3].value;\n\t\t\t\t\tif (res.meta?.status === 'success') {\n\t\t\t\t\t\tthis.notenOptions = res.data[0];\n\t\t\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.allowedNotenFilterOptions = [\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/keineNoteEingetragen')), benotet: 0 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/c4benotet')), benotet: 1 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/showAll')), benotet: -1 }\n\t\t\t\t\t];\n\t\t\t\t\tthis.notenOptionFilter = this.allowedNotenFilterOptions[0];\n\t\t\t\t}\n\n\t\t\t\t// 5. Abgabetypen\n\t\t\t\tif (results[4].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[4].value;\n\t\t\t\t\tthis.abgabeTypeOptions = res.data;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.loading = false;\n\t\t\t});\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolAssistenz;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\n\nexport const DeadlineOverview = {\n\tname: \"DeadlineOverview\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t},\n\tprops: {\n\t\tperson_uid_prop: {\n\t\t\tdefault: null\t\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfullName: null, // TODO: fetch this somewhere\n\t\t\tdeadlines: null,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tdeadlineTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zieldatumv2'))), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4fixterminv4'))), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabetyp'))), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabekurzbzv2'))), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('person/studentIn'))), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'semester', formatter: this.centeredTextFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tdeadlineTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"cellClick\",\n\t\t\t\t\thandler: async (e, cell) => {\n\n\t\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tloadDeadlines() {\n\t\t\tthis.$api.call(ApiAbgabe.fetchDeadlines(this.person_uid_prop ?? null))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tsetupData(data) {\n\t\t\tthis.deadlines = data\n\t\t\t\n\t\t\tthis.deadlines.forEach(dl => {\n\t\t\t\tdl.student = (dl.stud_titelpre ? (dl.stud_titelpre + ' ') :'') + dl.stud_vorname + ' ' + dl.stud_nachname + (dl.stud_titelpost ? (' ' + dl.stud_titelpost) :'')\n\t\t\t\tdl.fixterminstring = dl.fixtermin ? this.$p.t('abgabetool/c4yes') : this.$p.t('abgabetool/c4no')\n\t\t\t})\n\n\t\t\tthis.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns)\n\t\t\tthis.$refs.deadlineTable.tabulator.setData(this.deadlines);\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.deadlineTableOptions.height = window.visualViewport.height - rect.top - 30\n\t\t\tthis.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadDeadlines()\n\t\t\tthis.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t

    {{$p.t('abgabetool/deadlinesTitle')}} {{ fullName ? ('-' + fullName) : ''}}

    \n\t\t
    \n\t\t\t\n\t\t \n `,\n};\n\nexport default DeadlineOverview;\n","import PluginsPhrasen from '../../plugins/Phrasen.js';\nimport AbgabetoolStudent from \"../../components/Cis/Abgabetool/AbgabetoolStudent.js\";\nimport AbgabetoolMitarbeiter from \"../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js\";\nimport AbgabetoolAssistenz from \"../../components/Cis/Abgabetool/AbgabetoolAssistenz.js\";\nimport DeadlineOverview from \"../../components/Cis/Abgabetool/DeadlineOverview.js\";\nimport {capitalize} from \"../../helpers/StringHelpers.js\";\n\nconst app = Vue.createApp({\n\tname: 'AbgabetoolApp',\n\tcomponents: {\n\t\tAbgabetoolStudent,\n\t\tAbgabetoolMitarbeiter,\n\t\tAbgabetoolAssistenz,\n\t\tDeadlineOverview\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcomp: null,\n\t\t\tuid: null,\n\t\t\tstudent_uid: null,\n\t\t\tstg_kz: null\n\t\t};\n\t},\n\tmethods: {\n\t\t\n\t},\n\tcomputed: {\n\t\tviewData() {\n\t\t\treturn { uid: this.uid}\n\t\t},\n\t\tstudent_uid_computed() {\n\t\t\treturn this.student_uid ?? this.uid\n\t\t},\n\t\tstg_kz_computed() {\n\t\t\treturn this.stg_kz ?? null\n\t\t}\n\t},\n\tcreated() {\n\t},\n\tmounted() {\n\t\t\n\t\tconst root = document.getElementById('abgabetoolroot')\n\t\tconst route = root.getAttribute(\"route\");\n\t\tthis.comp = route\n\n\t\tconst uid = root.getAttribute(\"uid\");\n\t\tthis.uid = uid\n\n\t\tconst stg_kz = root.getAttribute(\"stg_kz_prop\");\n\t\tthis.stg_kz = stg_kz\n\n\t\tconst student_uid = root.getAttribute(\"student_uid_prop\");\n\t\tthis.student_uid = student_uid\n\t\t\n\t},\n\ttemplate: `\n\t\t\n\t`\n});\napp.config.globalProperties.$capitalize = capitalize;\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.directive('tooltip', primevue.tooltip);\napp.use(PluginsPhrasen);\napp.mount('#abgabetoolroot');\n","export function capitalize(string) {\n\tif (!string) return '';\n\treturn string[0].toUpperCase() + string.slice(1);\n}"],"names":["search","searchsettings","config","this","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","loadCategory","category","get","setLanguage","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","url","undefined","create","stdsem","grund","studiensemester","errorHandling","cancel","Array","isArray","Promise","allSettled","map","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","params","then","res","data","getHistory","getPrestudents","query","signal","timeout","approve","a","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","fotoSperre","value","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","id","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","set","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","filter","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","e","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","response","checkDoubles","form","confirmErrorHandler","error","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","update","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","type","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","event","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","title","tag","ampeln","open","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","options","globalProperties","factory","console","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","result","meta","fhcApiAxios","baseURL","interceptors","request","use","method","FormData","Object","values","every","item","FileList","i","File","newData","entries","reduce","nd","key","file","append","length","jsondata","forEach","JSON","stringify","errors","err","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","$p","t","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","bind","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","document","createElement","helperApp","Vue","createApp","name","components","PvToast","PvConfirm","methods","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","detail","openMessagecard","bootstrap","Collapse","getOrCreateInstance","target","getAttribute","toggle","unmounted","parentElement","removeChild","computed","showmaillink","template","PvConfig","PvConfirmationService","helperAppInstance","mount","body","appendChild","FhcAlert","FhcPhrasen","alertSuccess","$refs","toast","add","summary","life","alertInfo","alertWarning","alert","confirmDelete","resolve","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","retval","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","el","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","input","querySelector","CustomEvent","arr","PluginsApi","$api","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","handler","async","_format_toast","_default","push","field","msgs","sort","b","indexOf","n_errors","n","get_config","clean_return_value","String","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","includes","newTypeHasHandler","errorConfig","remaining","call","configoverwrite","index","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","obj","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","Upload","DmsItem","emits","props","required","preview","watch","parse","multiple","Boolean","inputClass","noList","default","disabled","stringifyFile","lastModified","lastModifiedDate","addFiles","$emit","files","dt","DataTransfer","doubles","items","removeFile","fileToRemove","from","upload","dmsFile","BsModal","modal","fullscreen","backdrop","validator","focus","keyboard","noCloseBtn","dialogClass","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","hide","show","relatedTarget","toggleFullscreen","mounted","Modal","popup","footer","slots","includedPrimevue","primevue","instance","setup","h","unmount","beforeUnmount","wrapper","zIndex","overlay","Phrasen","ApiAbgabe","getConfig","getConfigStudent","getStudentProjektarbeiten","getStudentProjektabgaben","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getMitarbeiterProjektarbeiten","showall","postProjektarbeitAbgabe","termin","dateString","Date","getFullYear","getMonth","padStart","getDate","paabgabe_id","paabgabetyp_kurzbz","bezeichnung","note_pk","upload_allowed","beurteilungsnotiz","fixtermin","insertvon","kurzbz","betreuer_person_id","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","getPaAbgabetypen","getProjektarbeitenForStudiengang","benotet","getStudiengaenge","postStudentProjektarbeitZusatzdaten","getSignaturStatusForProjektarbeitAbgaben","paabgabe_ids","FhcOverlay","active","AbgabeStudentDetail","InputNumber","inputnumber","Checkbox","checkbox","Dropdown","dropdown","Textarea","textarea","Accordion","accordion","AccordionTab","accordiontab","Message","Inplace","inplace","VueDatePicker","inject","projektarbeit","viewMode","loading","eidAkzeptiert","enduploadTermin","allActiveLanguages","abstract","abstract_en","schlagwoerter","schlagwoerter_en","kontrollschlagwoerter","seitenanzahl","getNoteBezeichnung","noteOpt","notenOptions","opt","positiv","$capitalize","benotbar","validate","endupload","triggerEndupload","bperson_id","handleUploadRes","finally","modalContainerEnduploadZusatzdaten","downloadAbgabe","window","formatDate","dateParam","padZero","num","month","abgabedatum","toISOString","signatur","signaturInfo","getOptionLabel","option","getTerminNoteBezeichnung","newVal","getMoodleLink","moodle_link","getMessagePtStyle","style","margin","padding","getEid","allowedToSaveZusatzdaten","getAllowedToSendEndupload","qualityGateTerminAvailable","qgatefound","abgabetermine","abgabe","getTooltipVerspaetet","getTooltipVerpasst","getTooltipAbzugeben","getTooltipStandard","getTooltipAbgegeben","getTooltipFixtermin","getTooltipAbgabeDetected","getTooltipNotAllowedToUpload","isViewMode","getTooltipBeurteilungerforderlich","getTooltipBestanden","getTooltipNichtBestanden","created","zone","today","luxon","DateTime","now","setZone","getDateStyleClass","fromISO","endOf","diffindays","diff","days","isLate","nopt","AbgabetoolStudent","AbgabeDetail","student_uid_prop","viewData","activeTabIndex","abgabeTypeOptions","phrasenPromise","phrasenResolved","projektarbeiten","selectedProjektarbeit","checkQualityGatesStrict","termine","qgate1Passed","qgate2Passed","noteOption","checkQualityGatesOptional","qgate1found","qgate2found","qgate1positiv","qgate2positiv","isPastDate","deadline","setDetailComponent","loadAbgaben","pa","projekarbeit","paIsBenotet","allowedToUpload","inTime","dateStyle","betreuer","buildBetreuer","modalContainerAbgabeDetail","centeredTextFormatter","cell","getValue","detailFormatter","mode","mailFormatter","beurteilungFormatter","buildMailToLink","email","btitelpre","bvorname","bnachname","btitelpost","setupData","betreuerart_kurzbz","beurteilung1","downloadLink1","beurteilung2","downloadLink2","sem","stg","kurzbzlang","mail","projekttypbezeichnung","titel","loadProjektarbeiten","setupMounted","getAccTabHeaderForProjektarbeit","getMailLink","handleDownloadBeurteilung1","handleDownloadBeurteilung2","allowedNotenOptions","catch","CoreFetchCmpt","refresh","apiFunction","Function","apiFunctionParameters","newValue","oldValue","fetchData","errorMessage","apiFunctionResult","successHandler","errorHandler","finallyHandler","setError","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","columns","fields","switchFilter","applyFilterConfig","currentFields","types","c","evt","currentTarget","filteredFields","condition","addField","removeField","splice","FilterColumns","selected","names","selectedFields","DEFAULT_ICONS","jsonLines","xlsx","pdf","json","csv","DEFAULT_LABELS","TableDownload","tabulator","iconClass","currentConfig","prototype","toString","newConfig","k","v","stringToFileFormatter","icon","label","formatter","validateFileFormatter","lcInput","XLSX","jspdf","jsPDF","autoTable","download","elementDataMap","WeakMap","collapseAutoClose","binding","contains","collapse","getInstance","addEventListener","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","column","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","ApiFilter","_uuid","CoreFilterCmpt","directives","onNwNewEntry","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","headerFilter","notSelectedFields","x","filteredData","filteredColumns","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","dataTree","on","toDelete","childIdx","child","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","dataFetchedCallback","handlerSaveCustomFilter","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","AbgabeMitarbeiterDetail","SpeedDial","speeddial","isFullscreen","assistenzMode","showAutomagicModalPhrase","speedDialItems","command","openCreateNewAbgabeModal","getAllowedToCreateNewTermin","openBenotung","openPlagiatcheck","openStudentPage","newTermin","noteBackend","getPlaceholderTermin","saveTermin","invertedFixtermin","newTerminRes","allowedToSave","allowedToDelete","existingTerminRes","abgabeOpt","noteOptExisting","findIndex","savedNewWithNegative","savedExistingNoteAsNegativeAndWasNotNegativeBefore","modalContainerCreateNewAbgabe","openZusatzdatenModal","modalContainerZusatzdaten","saveZusatzdaten","validateZusatzdaten","paRes","handleDeleteTermin","deleteTermin","deletedTerminIndex","openBeurteilungLink","getOptionLabelSprache","getOptionLabelAbgabetyp","getOptionDisabled","aktiv","getNotenOptionLabel","turnitin_link","getSemesterBenotbar","beurteilungLinkNew","beurteilungLinkOld","upload_allowed_default","validateTermin","handleSaveNewAbgabe","handleChangeAbgabetyp","notenOptionsNonFinal","getAllowedAbgabeTypeOptions","abgabetypenBetreuer","getEnduploadErlaubt","isCurrent","endUploadVorhanden","getSpeedDialStyle","getSpeedDialWrapperStyle","getTooltipNotAllowedToSave","getTooltipNotAllowedToDelete","getProjektarbeitTitel","getProjektarbeitStudent","student","dateFilter","onRendered","div","initialValue","start","end","PrimevueCalendar","calendar","splitMailsHelper","mails","subject","alertPluginRef","phrasenPluginRef","maillist","mailto","subjectlength","firstrun","useBcc","ctrlKey","metaKey","splitposition","lastIndexOf","mailLink","href","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","AbgabetoolMitarbeiter","TieredMenu","tieredmenu","old_abgabe_beurteilung_link","tableData","detailIsFullscreen","BETREUER_SAMMELMAIL_BUTTON_STUDENT","saving","serienTermin","showAll","tabulatorUuid","domain","detailOffset","tableBuiltResolve","tableBuiltPromise","abgabeTableOptions","selectableCheck","selectionCheck","rowHeight","formatterParams","getRow","stopPropagation","handleClick","cssText","titleFormatter","hozAlign","headerSort","selectHandler","titleFormatterParams","selectAllHandler","width","cssClass","widthGrow","pkzTextFormatter","maxWidth","headerFilterFunc","headerFilterTerminCol","sorter","sortFuncTerminCol","abgabterminFormatter","headerFilterParams","valuesLookup","getQGateStatusList","persistenceID","abgabeTableEventHandlers","getColumn","undoSelection","sd","fsd","checked","d","handlePaUpdated","checkAbgabetermineProjektarbeit","abgabeTable","redraw","sammelMailStudent","param","recipientList","Set","originalEvent","aRow","bRow","dir","_column","Math","abs","diffMs","filterVal","rowVal","luxonDate","isValid","toLuxon","fromJSDate","fromMillis","Number","hasSame","startOf","loadState","localStorage","getItem","saveState","stateRestored","state","getColumnLayout","getSorters","s","getFilters","headerFilters","setItem","handleTableBuilt","saved","colLayoutRestored","setColumnLayout","filtersRestored","setFilter","headerFiltersRestored","hf","sortRestored","setTimeout","sortList","columnManager","findColumn","setSort","checkQualityGateStatus","qgate1Termine","qgate2Termine","qgate1Status","qgate1StatusRank","qgate2Status","qgate2StatusRank","qgate","toMillis","prevTermin","nextTermin","isSelected","deselect","select","getTable","getRows","r","handleToggleFullscreenDetail","showDeadlines","toggleShowAll","openAddSeriesModal","modalContainerAddSeries","addSeries","oldScrollLeft","scrollLeft","oldScrollTop","scrollTop","nextTick","createInfoString","str","paabgabe","vorname","nachname","tableResolve","buildPKZ","matrikelnr","buildStg","pkz","beurteilung","beurteilungLink","projekttyp_kurzbz","callback","handleUuidDefined","calcMaxTableHeight","tableID","tableDataSet","getElementById","rect","getBoundingClientRect","visualViewport","top","setHeight","emailItems","uniqueStudentEmailCount","emails","BsOffcanvas","offcanvas","scroll","placement","Offcanvas","ApiStudiensemester","getAllStudiensemesterAndAktOrNext","order","AbgabetoolAssistenz","AbgabeterminStatusLegende","Timeline","timeline","stg_kz_prop","studiensemesterOptions","allSem","curSem","notenOptionFilter","inplaceToggle","timelineProjekt","selectedStudiengangOption","studiengaengeOptions","allConfigPromise","ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT","ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER","allowedNotenFilterOptions","renderVerticalBuffer","formAction","minWidth","uniqueRecipients","sammelMailBetreuer","betreuer_mail","zweitbetreuer_mail","getItemBezeichnung","getItemNote","notenOption","handleChangeAbgabetypSerientermin","semesterChanged","existing","f","compVal","newFilter","getOptionLabelStg","getOptionLabelStudiensemester","getNotenFilterOptionLabel","actionButtons","className","display","alignItems","justifyContent","createButton","titleKey","clickHandler","btn","aspectRatio","transform","innerHTML","stopImmediatePropagation","openTimeline","pids","preserveSelected","newAbgaben","pid","scrollX","scrollY","mappedData","mapProjekteToTableData","projekte","note_bez","erstbetreuer","buildErstbetreuer","zweitbetreuer","buildZweitbetreuer","student_vorname","student_nachname","p","terminTypOpt","drawer","timelineFormatter","erstbetreuer_full_name","betreuer_vorname","betreuer_nachname","zweitbetreuer_full_name","uniqueBetreuerEmailCount","oldVal","allRows","cb","getElement","requests","results","stgOpt","DeadlineOverview","person_uid_prop","fullName","deadlines","deadlineTableOptions","deadlineTableEventHandlers","pdfExportLink","loadDeadlines","dl","stud_titelpre","stud_vorname","stud_nachname","stud_titelpost","fixterminstring","deadlineTable","comp","student_uid_computed","stg_kz_computed","route","string","directive"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Abgabetool.js","sources":["../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/components/Form/Upload/Dms.js","../../../../js/components/Form/Upload/Dms/Item.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/api/factory/abgabe.js","../../../../js/components/Overlay/FhcOverlay.js","../../../../js/components/Cis/Abgabetool/AbgabeStudentDetail.js","../../../../js/components/Cis/Abgabetool/getDateStyleClass.js","../../../../js/components/Cis/Abgabetool/AbgabetoolStudent.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js","../../../../js/tabulator/filters/Dates.js","../../../../js/helpers/EmailHelpers.js","../../../../js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js","../../../../js/components/Bootstrap/Offcanvas.js","../../../../js/api/factory/studiensemester.js","../../../../js/components/Cis/Abgabetool/StatusLegende.js","../../../../js/components/Cis/Abgabetool/AbgabetoolAssistenz.js","../../../../js/components/Cis/Abgabetool/DeadlineOverview.js","../../../../js/apps/Abgabetool/Abgabetool.js","../../../../js/helpers/StringHelpers.js"],"sourcesContent":["/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import DmsItem from './Dms/Item.js';\n\nexport default {\n\tcomponents: {\n\t\tDmsItem\n\t},\n\temits: [\n\t\t'update:modelValue'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [ FileList, Array ],\n\t\t\trequired: true\n\t\t},\n\t\tmultiple: Boolean,\n\t\tid: String,\n\t\tname: String,\n\t\tinputClass: [String, Array, Object],\n\t\tnoList: Boolean,\n\t\taccept: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmethods: {\n\t\tstringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n\t\taddFiles(event) {\n\t\t\tif (!this.multiple)\n\t\t\t\treturn this.$emit('update:modelValue', event.target.files);\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst doubles = [];\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tdt.items.add(file);\n\t\t\t\tdoubles.push(this.stringifyFile(file));\n\t\t\t}\n\t\t\tfor (var file of event.target.files) {\n\t\t\t\t// NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes\n\t\t\t\tif (doubles.indexOf(this.stringifyFile(file)) < 0)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t},\n\t\tremoveFile(id) {\n\t\t\tconst fileToRemove = Array.from(this.modelValue)[id];\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tif (file !== fileToRemove)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (!n)\n\t\t\t\treturn;\n\t\t\tif (n instanceof FileList) {\n\t\t\t\tif (!this.$refs.upload) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn this.$refs.upload.files = n;\n\t\t\t}\n\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst dms = [];\n\t\t\tfor (var file of n) {\n\t\t\t\tif (file instanceof File) {\n\t\t\t\t\tdt.items.add(file);\n\t\t\t\t} else {\n\t\t\t\t\tconst dmsFile = new File([JSON.stringify(file)], file.name, {\n\t\t\t\t\t\ttype: 'application/x.fhc-dms+json'\n\t\t\t\t\t});\n\t\t\t\t\tdt.items.add(dmsFile);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}","export default {\n\temits: [\n\t\t'delete'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [File, Object],\n\t\t\trequired: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreview: ''\n\t\t};\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (n.type == 'application/x.fhc-dms+json') {\n\t\t\t\tn.text().then(result => {\n\t\t\t\t\tconst obj = JSON.parse(result);\n\t\t\t\t\tthis.preview = obj.preview || '';\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • `\n}\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\",\n\t\t\"toggleFullscreen\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t\tthis.$emit('toggleFullscreen')\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","export default {\n\tgetConfig() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfig'\n\t\t};\n\t},\n\tgetConfigStudent() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfigStudent'\n\t\t};\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektarbeiten',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektabgaben',\n\t\t\tparams: { projektarbeit_id: detail.projektarbeit_id, student_uid: detail.student_uid }\n\t\t};\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetMitarbeiterProjektarbeiten(all) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten',\n\t\t\tparams: { showall: all }\n\t\t};\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\t\n\t\tlet dateString = termin.datum\n\t\tif(termin.datum instanceof Date) {\n\t\t\tconst year = termin.datum.getFullYear();\n\t\t\tconst month = String(termin.datum.getMonth() + 1).padStart(2, '0');\n\t\t\tconst day = String(termin.datum.getDate()).padStart(2, '0');\n\n\t\t\tdateString = `${year}-${month}-${day}`\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postProjektarbeitAbgabe',\n\t\t\tparams: { \n\t\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tdatum: dateString,\n\t\t\t\tnote: termin.note_pk,\n\t\t\t\tupload_allowed: !!termin.upload_allowed,\n\t\t\t\tbeurteilungsnotiz: termin.beurteilungsnotiz ?? '',\n\t\t\t\tfixtermin: termin.fixtermin,\n\t\t\t\tinsertvon: termin.insertvon,\n\t\t\t\tkurzbz: termin.kurzbz,\n\t\t\t\tprojektarbeit_id: termin.projektarbeit_id,\n\t\t\t\tbetreuer_person_id: termin.betreuer_person_id\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe',\n\t\t\tparams: { paabgabe_id }\n\t\t};\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postSerientermin',\n\t\t\tparams: { datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin }\n\t\t};\n\t},\n\tfetchDeadlines(person_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/fetchDeadlines',\n\t\t\tparams: { person_id }\n\t\t};\n\t},\n\tgetPaAbgabetypen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getPaAbgabetypen'\n\t\t};\n\t},\n\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\tgetNoten(){\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getNoten'\n\t\t};\n\t},\n\tgetProjektarbeitenForStudiengang(studiengang_kz, benotet = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang',\n\t\t\tparams: { studiengang_kz, benotet }\n\t\t};\n\t},\n\t// TODO: this could also very well be generic info api\n\tgetStudiengaenge() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudiengaenge'\n\t\t};\n\t},\n\tpostStudentProjektarbeitZusatzdaten(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetSignaturStatusForProjektarbeitAbgaben(paabgabe_ids, student_uid) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben',\n\t\t\tparams: {paabgabe_ids, student_uid},\n\n\t\t};\n\t}\n};","export const FhcOverlay = {\n\tname: 'FhcOverlay',\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\t\n\t},\n\ttemplate: `\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t`\n};\nexport default FhcOverlay;","import Upload from '../../../components/Form/Upload/Dms.js';\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\n\nexport const AbgabeStudentDetail = {\n\tname: \"AbgabeStudentDetail\",\n\tcomponents: {\n\t\tUpload,\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tInplace: primevue.inplace,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tinject: ['notenOptions', 'isMobile', 'isViewMode', 'moodle_link'],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tviewMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\t\n\t\t\tif(noteOpt?.bezeichnung) {\n\t\t\t\treturn noteOpt?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(noteOpt?.benotbar === true && !termin.note) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tasync validate(termin, endupload = false) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$capitalize(this.$p.t('global/warningChooseFile')));\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tif(endupload) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/confirmEnduploadSpeichern'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t},\n\t\tasync triggerEndupload() {\n\t\t\t\n\t\t\tif (!await this.validate(this.enduploadTermin, true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('paabgabetyp_kurzbz', this.enduploadTermin.paabgabetyp_kurzbz)\n\t\t\tformData.append('projektarbeit_id', this.enduploadTermin.projektarbeit_id);\n\t\t\tformData.append('paabgabe_id', this.enduploadTermin.paabgabe_id)\n\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tfor (let i = 0; i < this.enduploadTermin.file.length; i++) {\n\t\t\t\tformData.append('file', this.enduploadTermin.file[i]);\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitEndupload(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.handleUploadRes(res, this.enduploadTermin)\n\t\t\t\t}).finally(()=> {\n\t\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.hide()\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\tasync upload(termin) {\n\n\t\t\t// only do this on endupload\n\t\t\tif (! await this.validate(termin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'end') {\n\t\t\t\t// open endupload form modal for further inputs\n\t\t\t\tthis.enduploadTermin = termin\n\t\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.show()\n\t\t\t} else {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append('paabgabetyp_kurzbz', termin.paabgabetyp_kurzbz)\n\t\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id)\n\t\t\t\tformData.append('paabgabe_id', termin.paabgabe_id)\n\t\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < termin.file.length; i++) {\n\t\t\t\t\tformData.append('file', termin.file[i]);\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZwischenabgabe(formData))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.handleUploadRes(res, termin)\n\t\t\t\t\t}).finally(()=> {\n\t\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\thandleUploadRes(res, termin) {\n\t\t\tif(res.meta.status == \"success\") {\n\t\t\t\tthis.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t('abgabetool/c4fileUploadSuccessv3')))\n\n\t\t\t\t// update 'abgabedatum' for successful upload -> shows the pdf icon and date once set\n\t\t\t\ttermin.abgabedatum = new Date().toISOString().split('T')[0];\n\t\t\t\tif(res?.data?.signatur !== undefined) {\n\t\t\t\t\ttermin.signatur = res.data.signatur\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.$fhcAlert.alertError(this.$capitalize(this.$p.t('abgabetool/c4fileUploadErrorv3')))\n\t\t\t}\n\t\t\t\n\t\t\tif(res.meta.signaturInfo) {\n\t\t\t\tthis.$fhcAlert.alertInfo(res.meta.signaturInfo)\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t},\n\t\tgetOptionLabel(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetTerminNoteBezeichnung(termin) {\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\treturn noteOpt ? noteOpt.bezeichnung : ''\n\t\t},\n\t},\n\twatch: {\n\t\tprojektarbeit(newVal) {\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetMoodleLink() {\n\t\t\treturn this.moodle_link + this.projektarbeit.studiengang_kz\t\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4eidesstattlicheErklaerung'))\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedToSendEndupload() {\n\t\t\treturn this.eidAkzeptiert && this.allowedToSaveZusatzdaten\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerspaetet')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerpasst')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbzugeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipStandardv2')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgegeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipFixtermin')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToUpload() {\n\t\t\tif(this.isViewMode) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedInViewMode')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedRegular')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\t\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeStudentenbereich') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t('person/student') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4titel') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4betreuerv2') ) }}: {{projektarbeit ? $p.t('abgabetool/c4betrart' + projektarbeit.betreuerart_kurzbz) + ' ' + projektarbeit.betreuer : ''}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t('abgabetool/c4checkoutStgMoodleInfos') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n `,\n};\n\nexport default AbgabeStudentDetail;\n","\nconst zone = 'Europe/Vienna';\nconst today = luxon.DateTime.now().setZone(zone);\n\nexport function getDateStyleClass(termin, notenOptions) {\n\tconst datum = luxon.DateTime.fromISO(termin.datum, { zone }).endOf('day');\n\tconst abgabedatum = termin.abgabedatum ? luxon.DateTime.fromISO(termin.abgabedatum, { zone }) : null;\n\ttermin.diffindays = datum.diff(today, 'days').days;\n\tconst isLate = abgabedatum && abgabedatum > datum;\n\n\t// GRADE STATUS\n\tif (termin.note) {\n\t\tconst opt = typeof termin.note === 'object' ? termin.note : notenOptions.find(nopt => nopt.note == termin.note)\n\t\tif (opt?.positiv === true) return 'bestanden';\n\t\telse if (opt?.positiv === false) return 'nichtbestanden';\n\t}\n\t\n\t// ACTION REQUIRED FOR GRADE\n\tif (termin.bezeichnung?.benotbar && datum <= today) {\n\t\treturn 'beurteilungerforderlich';\n\t}\n\n\t// SUBMISSION STATUS\n\tif (termin.upload_allowed) {\n\t\tif (termin.abgabedatum) {\n\t\t\treturn isLate ? 'verspaetet' : 'abgegeben';\n\t\t}\n\n\t\t// no submission yet\n\t\tif (datum < today) return 'verpasst';\n\t\tif (termin.diffindays <= 12) return 'abzugeben';\n\t\treturn 'standard';\n\t}\n\n\t// GENERIC STATUS\n\treturn datum < today ? 'verpasst' : 'standard';\n}","import AbgabeDetail from \"./AbgabeStudentDetail.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport BsModal from \"../../Bootstrap/Modal.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\n\nexport const AbgabetoolStudent = {\n\tname: \"AbgabetoolStudent\",\n\tcomponents: {\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tBsModal,\n\t\tAbgabeDetail,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tnotenOptions: Vue.computed(() => this.notenOptions),\n\t\t\tisViewMode: Vue.computed(() => this.isViewMode),\n\t\t\tmoodle_link: Vue.computed(() => this.moodle_link)\n\t\t}\n\t},\n\tprops: {\n\t\tstudent_uid_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tactiveTabIndex: [0],\n\t\t\tabgabeTypeOptions: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tloading: false,\n\t\t\tnotenOptions: null,\n\t\t\tdetail: null,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\tmoodle_link: null\n\t\t};\n\t},\n\tmethods: {\n\t\tcheckQualityGatesStrict(termine) {\n\t\t\tlet qgate1Passed = false\n\t\t\tlet qgate2Passed = false\n\t\t\t\n\t\t\ttermine.forEach(t => {\n\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\tif(t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\tqgate1Passed = true\n\t\t\t\t\t} else if(t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\tqgate2Passed = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn qgate1Passed && qgate2Passed\n\t\t},\n\t\tcheckQualityGatesOptional(termine) {\n\t\t\tconst qgate1found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate1')\n\t\t\tconst qgate2found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate2')\n\t\t\t\n\t\t\tlet qgate1positiv = true\n\t\t\tif(qgate1found) {\n\t\t\t\tqgate1positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\t\tqgate1positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlet qgate2positiv = true\n\t\t\tif(qgate2found) {\n\t\t\t\tqgate2positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\t\tqgate2positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn qgate1positiv && qgate2positiv\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading = true\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\t\n\t\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\t\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\tif(termin.paabgabetyp_kurzbz == 'end') {\n\t\t\t\t\t\t// old assumed production logic when qgates are required\n\t\t\t\t\t\t// termin.allowedToUpload = !this.isPastDate(termin.datum) && this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst inTime = termin.fixtermin ? !this.isPastDate(termin.datum) : true\n\t\t\t\t\t\ttermin.allowedToUpload = inTime && this.checkQualityGatesOptional(pa.abgabetermine)\n\n\n\t\t\t\t\t\t// development purposes\n\t\t\t\t\t\t// termin.allowedToUpload = this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t// termin.allowedToUpload = true\n\n\t\t\t\t\t} else if(termin.fixtermin) {\n\t\t\t\t\t\ttermin.allowedToUpload = !this.isPastDate(termin.datum)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// this could confuse people since we should dont show people this flag\n\t\t\t\t\t\ttermin.allowedToUpload = termin.upload_allowed \n\t\t\t\t\t}\n\n\t\t\t\t\t// blocks client upload button if projektarbeitet is already beurteilt und thus further abgaben on any termin should be blocked\n\t\t\t\t\tif(paIsBenotet) termin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = this.student_uid\n\t\t\t\t\n\t\t\t\tthis.selectedProjektarbeit = pa\n\n\t\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\t\t\n\t\t\t}).finally(()=>{this.loading=false})\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t}\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\t// should always be \"projekt.mitarbeiter_uid +'@'+ this.domain\", built in backend\n\t\t\treturn 'mailto:' + projekt.email\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\treturn (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tasync setupData(data){\n\t\t\t// this.projektarbeiten = data[0]\n\t\t\tconst projektarbeiten = data[0] ?? null\n\t\t\tif(!projektarbeiten) return\n\t\t\tthis.projektarbeiten = projektarbeiten.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: this.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t\tbetreuer_person_id: projekt.bperson_id,\n\t\t\t\t\t\tbetreuerart_kurzbz: projekt.betreuerart_kurzbz,\n\t\t\t\t\t\tmode\n\t\t\t\t\t},\n\t\t\t\t\tbeurteilung1: projekt.downloadLink1 ?? null,\n\t\t\t\t\tbeurteilung2: projekt.downloadLink2 ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: projekt.kurzbzlang,\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\tbetreuer: this.buildBetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttypbezeichnung,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t},\n\t\tloadProjektarbeiten() {\n\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektarbeiten(this.student_uid))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\t\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.loadProjektarbeiten()\n\t\t},\n\t\tgetAccTabHeaderForProjektarbeit(projektarbeit) {\n\t\t\tlet title = ''\n\t\t\t\n\t\t\ttitle += projektarbeit.titel ?? this.$p.t('abgabetool/keinTitel')\n\t\t\t\n\t\t\treturn title\n\t\t},\n\t\tgetMailLink(projektarbeit) {\n\t\t\tif(projektarbeit.email) {\n\t\t\t\treturn 'mailto:'+projektarbeit.email\n\t\t\t} else return ''\n\t\t},\n\t\tgetNoteBezeichnung(projektarbeit) {\n\t\t\tif(projektarbeit.note && this.notenOptions) {\n\t\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == projektarbeit.note)\n\t\t\t\treturn noteOpt?.bezeichnung\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\thandleDownloadBeurteilung1(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung1)\n\t\t},\n\t\thandleDownloadBeurteilung2(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung2)\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\t\tisViewMode() {\n\t\t\treturn this.student_uid !== this.viewData.uid\n\t\t},\n\t\tstudent_uid() {\n\t\t\treturn this.student_uid_prop || this.viewData?.uid || null\n\t\t}\n\t},\n\tasync created() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\tthis.loading = true\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tawait this.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t}).finally(() => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfigStudent()).then(res => {\n\t\t\tthis.moodle_link = res.data?.moodle_link\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\n `,\n};\n\nexport default AbgabetoolStudent;\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || tabulatorOptions.selectableRows || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.tabulatorOptions.selectableRows || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","import BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\n\nexport const AbgabeMitarbeiterDetail = {\n\tname: \"AbgabeMitarbeiterDetail\",\n\tcomponents: {\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tSpeedDial: primevue.speeddial,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tVueDatePicker\n\t},\n\temits: ['paUpdated'],\n\tinject: [\n\t\t'abgabeTypeOptions',\n\t\t'abgabetypenBetreuer',\n\t\t'allowedNotenOptions',\n\t\t'notenOptionsNonFinal',\n\t\t'turnitin_link',\n\t\t'old_abgabe_beurteilung_link'\n\t],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tisFullscreen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tassistenzMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowAutomagicModalPhrase: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tspeedDialItems: [{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4newAbgabetermin')),\n\t\t\t\ticon: \"fa fa-plus\",\n\t\t\t\tcommand: this.openCreateNewAbgabeModal,\n\t\t\t\tdisabled: Vue.computed(() => !this.getAllowedToCreateNewTermin)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4benoten')),\n\t\t\t\ticon: \"fa fa-user-check\",\n\t\t\t\tcommand: this.openBenotung,\n\t\t\t\tdisabled: Vue.computed(()=> this.assistenzMode == true)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4plagiatcheck_link')),\n\t\t\t\ticon: \"fa fa-clipboard-check\",\n\t\t\t\tcommand: this.openPlagiatcheck\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4student_perspective')),\n\t\t\t\ticon: \"fa fa-eye\",\n\t\t\t\tcommand: this.openStudentPage\n\t\t\t}],\n\t\t\tnewTermin: null,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tif(termin.noteBackend?.bezeichnung) {\n\t\t\t\treturn termin.noteBackend?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(termin.bezeichnung?.benotbar === true && !termin.noteBackend) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tgetPlaceholderTermin(termin) {\n\t\t\treturn termin?.bezeichnung ? this.$p.t('abgabetool/c4paatyp' + termin.paabgabetyp_kurzbz) : this.$p.t('abgabetool/abgabetypPlaceholder')\n\t\t},\n\t\tsaveTermin(termin) {\n\t\t\tconst paabgabe_id = termin.paabgabe_id\n\t\t\ttermin.note_pk = termin.note?.note ?? null\n\t\t\ttermin.betreuer_person_id = this.projektarbeit.betreuer_person_id\n\t\t\t\n\t\t\t// phrasentext 'no late submission allowed' to 'late submission allowed' + boolean UI invert\n\t\t\ttermin.fixtermin = !termin.invertedFixtermin\n\t\t\treturn this.$api.call(ApiAbgabe.postProjektarbeitAbgabe(termin)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\n\t\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == res.data[0].note)\n\t\t\t\t\tconst newTerminRes = {\n\t\t\t\t\t\t'allowedToSave': true,\n\t\t\t\t\t\t'allowedToDelete': true,\n\t\t\t\t\t\t...res.data[0]\n\t\t\t\t\t}\n\t\t\t\t\tif(newTerminRes.note) {\n\t\t\t\t\t\tnewTerminRes.note = noteOpt\n\t\t\t\t\t\tnewTerminRes.noteBackend = noteOpt // certain UI elements should only reflect persisted state\n\t\t\t\t\t}\n\t\t\t\t\tnewTerminRes.invertedFixtermin = !newTerminRes.fixtermin\n\t\t\t\t\tconst existingTerminRes = res.data[1]\n\t\t\t\t\t\n\t\t\t\t\tconst abgabeOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == newTerminRes.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tnewTerminRes.bezeichnung = {\n\t\t\t\t\t\tbezeichnung: termin.bezeichnung?.bezeichnung,\n\t\t\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung?.paabgabetyp_kurzbz,\n\t\t\t\t\t\tbenotbar: abgabeOpt.benotbar\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// only insert new abgabe if we actually created a new one, not when saving/editing existing\n\t\t\t\t\tif(!existingTerminRes){\n\t\t\t\t\t\tnewTerminRes.dateStyle = getDateStyleClass(newTerminRes, this.notenOptions)\n\t\t\t\t\t\tthis.projektarbeit.abgabetermine.push(newTerminRes)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst noteOptExisting = this.allowedNotenOptions.find(opt => opt.note == existingTerminRes.note)\n\t\t\t\t\t\texistingTerminRes.note = noteOptExisting\n\n\t\t\t\t\t\ttermin.paabgabetyp_kurzbz = newTerminRes.paabgabetyp_kurzbz\n\t\t\t\t\t\ttermin.noteBackend = noteOpt // do NOT take noteOptExisting -> should reflect the \"yes the qgate grade is confirmed in backend ux behaviour\"\n\t\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.projektarbeit.abgabetermine.sort((a, b) =>new Date(a.datum) - new Date(b.datum))\n\t\t\t\t\t\n\t\t\t\t\tconst index = this.projektarbeit.abgabetermine.findIndex(t => termin.paabgabe_id == t.paabgabe_id)\n\t\t\t\t\t\n\t\t\t\t\t// negative abgabe -> automagically open new termin modal\n\t\t\t\t\t// really bad feature imo that will be annoying to deal with\n\t\t\t\t\t\n\t\t\t\t\t// termin is completely new and has negative note\n\t\t\t\t\tconst savedNewWithNegative = !existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null\n\n\t\t\t\t\t// termin existed previously + oldTermin had different note/positive note or no note at all\n\t\t\t\t\tconst savedExistingNoteAsNegativeAndWasNotNegativeBefore = existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null && (existingTerminRes.note?.positiv || existingTerminRes.note === undefined)\n\n\t\t\t\t\tconst openModalDueToNegativeBeurteilung = savedNewWithNegative || savedExistingNoteAsNegativeAndWasNotNegativeBefore\n\t\t\t\t\tif(openModalDueToNegativeBeurteilung) {\n\t\t\t\t\t\tthis.newTermin = {\n\t\t\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t\t\t'kurzbz': '', // todo kurzbz textfield value vorschlag für qualgates\n\t\t\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t\t\t'upload_allowed': false,\n\t\t\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === newTerminRes.paabgabetyp_kurzbz),\n\t\t\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = true\n\n\t\t\t\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = false\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\topenZusatzdatenModal() {\n\t\t\tthis.$refs.modalContainerZusatzdaten.show()\n\t\t},\n\t\tasync saveZusatzdaten(){\n\t\t\tif (!await this.validateZusatzdaten())\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst pa = this.projektarbeit\n\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id);\n\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZusatzdaten(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res.meta.status == 'success') {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\tif(!data?.retval?.[0]) return\n\t\t\t\t\t\tconst paRes = data.retval[0]\n\t\t\t\t\t\tpa.seitenanzahl = paRes.seitenanzahl ?? 1\n\t\t\t\t\t\tpa.kontrollschlagwoerter = paRes.kontrollschlagwoerter ?? ''\n\t\t\t\t\t\tpa.schlagwoerter = paRes.schlagwoerter ?? ''\n\t\t\t\t\t\tpa.sprache = paRes.sprache ?? ''\n\t\t\t\t\t\tpa.schlagwoerter_en = paRes.schlagwoerter_en ?? ''\n\t\t\t\t\t\tpa.abstract = paRes.abstract ?? ''\n\t\t\t\t\t\tpa.abstract_en = paRes.abstract_en ?? ''\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}).finally(()=> {\n\t\t\t\tthis.loading = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerZusatzdaten.hide()\n\t\t},\n\t\tasync validateZusatzdaten() {\n\t\t\t// just ask once\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/confirmZusatzdatenSpeichern'),\n\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleDeleteTermin(termin){\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/c4confirm_delete'),\n\t\t\t\tacceptLabel: 'Löschen',\n\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\trejectLabel: 'Zurück',\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\tthis.deleteTermin(termin)\n\t\t\t}\n\t\t},\n\t\tdeleteTermin(termin) {\n\t\t\tthis.$api.call(ApiAbgabe.deleteProjektarbeitAbgabe(termin.paabgabe_id)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')]))\n\t\t\t\t\t// this.$p.t('global/tooltipLektorDeleteKontrolle', [this.$entryParams.permissions.kontrolleDeleteMaxReach ])\n\t\t\t\t\tconst deletedTerminIndex = this.projektarbeit.abgabetermine.findIndex(t => t.paabgabe_id === termin.paabgabe_id)\n\t\t\t\t\tthis.projektarbeit.abgabetermine.splice(deletedTerminIndex, 1)\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabelSprache(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option) {\n\t\t\treturn this.$p.t('abgabetool/c4paatyp' + option.paabgabetyp_kurzbz)\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t\tgetNotenOptionLabel(option) {\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\topenStudentPage() {\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenPlagiatcheck() {\n\t\t\tconst link = this.turnitin_link\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tasync openBenotung() {\n\t\t\t// old link check ?\n\t\t\t\n\t\t\tif(this.getSemesterBenotbar && this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkNew) {\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkNew\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else if(this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkOld) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4aeltereParbeitBenotenv2'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkOld\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else {\n\t\t\t\t// show info text that no endupload with abgabe has been found\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4keinEnduploadErfolgt'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\t// unsafe for datepickers, dont use there\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\t\t\t\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\topenCreateNewAbgabeModal() {\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') {\n\t\t\t\t// maybe alert that this is not allowed or smth\n\n\t\t\t\tthis.$fhcAlert.alertWarning('Terminanlage disabled')\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.newTermin) {\n\t\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\t\tthis.newTermin = {\n\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t'bezeichnung': typ,\n\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t},\n\t\tvalidateTermin(termin) {\n\t\t\t// compare new termin to existing ones to block illegal termin constellations, if they exist\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleSaveNewAbgabe(termin) {\n\t\t\t\n\t\t\tif(!this.validateTermin(termin)) {\n\t\t\t\tthis.$fhcAlert.alertWarning('invalid termin')\n\t\t\t\t\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tawait this.saveTermin(termin)\n\t\t\t\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.hide()\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': false,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen'),\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\thandleChangeAbgabetyp(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetAllowedToCreateNewTermin() {\n\t\t\tif(this.assistenzMode) return true\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\tif(this.projektarbeit?.note !== undefined && this.projektarbeit.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) return true\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\t// normally should be allowed if no rules apply\n\t\t\treturn true\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\tif(this.assistenzMode) {\n\t\t\t\treturn this.abgabeTypeOptions\n\t\t\t} else {\n\t\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t\t}\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t},\n\t\tgetSemesterBenotbar(){\n\t\t\treturn this.projektarbeit?.isCurrent ?? false\n\t\t},\n\t\tendUploadVorhanden(){\n\t\t\treturn this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null)\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.bezeichnung?.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe?.bezeichnung?.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetSpeedDialStyle() {\n\t\t\treturn 'position: static !important;'\n\t\t},\n\t\tgetSpeedDialWrapperStyle() {\n\t\t\t// non fullscreen -> wrapper is positioned on right bottom corner of modal, wherever that is\n\t\t\treturn 'position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;'\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerspaetet'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerpasst'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbzugeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipStandardv2'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbgegeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipFixtermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToSave() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToEditAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToDelete() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToDeleteAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetProjektarbeitTitel() {\n\t\t\tif(this.projektarbeit?.titel) return this.$capitalize(this.$p.t('abgabetool/c4titel')) + ': ' + this.projektarbeit.titel\n\t\t\t\n\t\t\treturn ''\n\t\t},\n\t\tgetProjektarbeitStudent(){\n\t\t\tif(this.projektarbeit?.student) return this.$capitalize(this.$p.t('person/student')) + ': ' + this.projektarbeit.student\n\n\t\t\treturn ''\n\t\t}\n\t},\n\twatch: {\n\t\t'newTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.newTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\t\t\t\n\t\t\tthis.newTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\t'projektarbeit'(newVal) {\n\t\t\t// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text\n\t\t\t\n\t\t\t// reset newTermin object\n\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': newVal.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': typ,\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t\tnewVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)\n\t\t\t\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t},\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeMitarbeiterbereich') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n`,\n};\n\nexport default AbgabeMitarbeiterDetail;\n","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","export async function splitMailsHelper(mails, event, subject, alertPluginRef, phrasenPluginRef) {\n\tlet splititem = \",\";\n\tlet maillist = mails.join(splititem);\n\tlet mailto = \"\";\n\t// take subject line length + '?subject=' length into account\n\tconst subjectlength = subject && typeof subject === 'string' ? subject.length + 9 : 0 \n\tif (maillist.length > 2024)\n\t{\n\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'zuvieleEMails') }) === false)\n\t\t\treturn;\n\t}\n\n\tlet firstrun = true;\n\tlet useBcc = event?.ctrlKey || event?.metaKey;\n\twhile (maillist.length > 0)\n\t{\n\t\tif (maillist.length + subjectlength > 2024)\n\t\t{\n\t\t\tlet splitposition = maillist.lastIndexOf(splititem, 1900);\n\t\t\tmailto = maillist.substring(0, splitposition);\n\t\t\tmaillist = maillist.substring(splitposition + 1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmailto = maillist;\n\t\t\tmaillist = \"\";\n\t\t}\n\n\t\tlet mailLink = useBcc ? `mailto:?bcc=${mailto}` : `mailto:${mailto}`;\n\t\tif(subject && typeof subject === 'string') mailLink += `?subject=${subject}`\n\t\tif (firstrun)\n\t\t{\n\t\t\twindow.location.href = mailLink;\n\t\t\tfirstrun = false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'weitereEMail')}) === true)\n\t\t\t{\n\t\t\t\twindow.location.href = mailLink;\n\t\t\t}\n\t\t}\n\n\t}\n}","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\nimport {splitMailsHelper} from \"../../../helpers/EmailHelpers.js\";\n\nexport const AbgabetoolMitarbeiter = {\n\tname: \"AbgabetoolMitarbeiter\",\n\tcomponents: {\n\t\tBsModal,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabetypenBetreuer),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link)\n\t\t}\n\t},\n\tprops: {\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tabgabetypenBetreuer: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tBETREUER_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitDataStretch',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return \n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.detailFormatter, headerFilter: false, headerSort: false, widthGrow: 1, tooltip: false, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4betreuerartv2'))), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))), field: 'prevTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: 'abgabeTableBetreuer2026-02-26'\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"mail\") {\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => {\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tsammelMailStudent(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = \"\"; // empty subject line \n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst rowDate = rowVal.luxonDate;\n\t\t\t\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected) {\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\ttoggleShowAll(showall) {\n\t\t\tthis.showAll = showall\n\t\t\tthis.loading = true\n\t\t\tthis.loadProjektarbeiten(showall, () => {\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tthis.saving = true\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tthis.selectedData?.map(projekt => projekt.projektarbeit_id),\n\t\t\t\tfalse\n\t\t\t)).then(res => {\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\n\t\t\t\t\tconst oldScrollLeft = this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft\n\t\t\t\t\tconst oldScrollTop = this.$refs.abgabeTable?.tabulator.rowManager.scrollTop\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\tthis.loadProjektarbeiten(this.showAll, () => {\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\t\t\tthis.loading = false\n\n\t\t\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\t\t\tif(table) {\n\t\t\t\t\t\t\t\ttable.scrollLeft = oldScrollLeft;\n\t\t\t\t\t\t\t\ttable.scrollTop = oldScrollTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\t\t\t\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\t\t\t\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading=true\n\n\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tlet paIsBenotet = false\n\t\t\tif(pa.note !== undefined && pa.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) paIsBenotet = false\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\tpaIsBenotet = true\n\t\t\t}\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\tif(noteOpt) termin.note = noteOpt\n\t\t\t\ttermin.file = []\n\t\t\t\t\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && noteOpt) {\n\t\t\t\t\ttermin.noteBackend = noteOpt\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// update 08-01-2026: everybody is allowed to do everything in client, critical checks happen at backend level\n\t\t\t\t// termin.allowedToSave = true\n\t\t\t\t\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\t\t\t\t\n\t\t\t\t// lektoren are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = termin.allowedToSave && !termin.abgabedatum\n\t\t\t\t\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\n\t\t\t})\n\t\t\t\n\t\t\tpa.student_uid = details.student_uid\n\t\t\tpa.student = `${pa.vorname} ${pa.nachname}`\n\t\t\t\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\n\t\t\n\t\t\tthis.loading = false\n\t\t\t\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\t\t\t\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\t\n\t\t},\n\t\tsetupData(data){\n\t\t\t\n\t\t\t\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = data[0]?.retval?.map(projekt => {\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\t\t\t\tprojekt.selectable = projekt.betreuerart_kurzbz !== 'Zweitbegutachter'\n\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.$api.call(ApiAbgabe.getMitarbeiterProjektarbeiten(all))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tif(callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\n\t\t\tif(this.BETREUER_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfig()).then(res => {\n\t\t\tthis.turnitin_link = res.data?.turnitin_link\n\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link\n\t\t\tthis.abgabetypenBetreuer = res.data?.abgabetypenBetreuer\n\t\t\tthis.BETREUER_SAMMELMAIL_BUTTON_STUDENT = res.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch noten options\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tthis.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t\t\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolMitarbeiter;\n","export default {\n\tname: 'BootstrapOffcanvas',\n\tdata: () => ({\n\t\toffcanvas: null\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean, String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tscroll: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'start', // start | end | top | bottom\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['start', 'end', 'top', 'bottom'].includes(value);\n\t\t\t}\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\theaderClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: 'p-4'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tdialogClass: [String, Array, Object]\n\t},\n\temits: [\n\t\t\"hideBsOffcanvas\",\n\t\t\"hiddenBsOffcanvas\",\n\t\t\"hidePreventedBsOffcanvas\",\n\t\t\"showBsOffcanvas\",\n\t\t\"shownBsOffcanvas\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.offcanvas?.dispose();\n\t\t},\n\t\thide() {\n\t\t\treturn this.offcanvas?.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.offcanvas?.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.offcanvas?.toggle();\n\t\t},\n\t\tpopup(body, options, title, footer) {\n\t\t\tconst BsOffcanvas = this,\n\t\t\t\tslots = {};\n\n\t\t\tif (body !== undefined)\n\t\t\t\tslots.default = () => body;\n\t\t\tif (title !== undefined)\n\t\t\t\tslots.title = () => title;\n\t\t\tif (footer !== undefined)\n\t\t\t\tslots.footer = () => footer;\n\n\t\t\tlet includedPrimevue = false;\n\t\t\tif (typeof primevue !== 'undefined')\n\t\t\t\tincludedPrimevue = true;\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst instance = Vue.createApp({\n\t\t\t\t\tname: 'OffcanvasTmpApp',\n\t\t\t\t\tsetup() {\n\t\t\t\t\t\treturn () =>\n\t\t\t\t\t\t\tVue.h(BsOffcanvas, {\n\t\t\t\t\t\t\t\tclass: 'offcanvas-wrapper',\n\t\t\t\t\t\t\t\tref: 'offcanvas',\n\t\t\t\t\t\t\t\t...options\n\t\t\t\t\t\t\t}, slots);\n\t\t\t\t\t},\n\t\t\t\t\tmounted() {\n\t\t\t\t\t\tthis.$refs.offcanvas.show();\n\t\t\t\t\t},\n\t\t\t\t\tbeforeUnmount() {\n\t\t\t\t\t\tif (this.$refs.offcanvas)\n\t\t\t\t\t\t\tthis.$refs.offcanvas.result !== false ? resolve(this.$refs.offcanvas.result) : reject();\n\t\t\t\t\t},\n\t\t\t\t\tunmounted() {\n\t\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst wrapper = document.createElement('div');\n\n\t\t\t\tif (includedPrimevue) {\n\t\t\t\t\tinstance.use(primevue.config.default, { zIndex: { overlay: 9999 } });\n\t\t\t\t}\n\n\t\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\t\tinstance.mount(wrapper);\n\t\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.offcanvas) {\n\t\t\tthis.offcanvas = new bootstrap.Offcanvas(this.$refs.offcanvas, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tkeyboard: this.keyboard,\n\t\t\t\tscroll: this.scroll\n\t\t\t});\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAllStudiensemesterAndAktOrNext() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext',\n\t\t};\n\t},\n\tgetAll(order = null, start = null)\n\t{\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: 'api/frontend/v1/organisation/studiensemester/getAll',\n\t\t\tparams: { order, start }\n\t\t};\n\t}\n};","export const AbgabeterminStatusLegende = {\n\tname: 'AbgabeterminStatusLegende',\n\ttemplate: `\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerspaetet')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerpasst')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbzugeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipStandardv2')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbgegeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBeurteilungerforderlich')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBestanden')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipNichtBestanden')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t`\n};\nexport default AbgabeterminStatusLegende;","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport BsOffcanvas from '../../Bootstrap/Offcanvas.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport ApiStudiensemester from '../../../api/factory/studiensemester.js';\nimport AbgabeterminStatusLegende from \"./StatusLegende.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { splitMailsHelper } from \"../../../helpers/EmailHelpers.js\"\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport const AbgabetoolAssistenz = {\n\tname: \"AbgabetoolAssistenz\",\n\tcomponents: {\n\t\tAbgabeterminStatusLegende,\n\t\tBsModal,\n\t\tBsOffcanvas,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tInplace: primevue.inplace,\n\t\tTextarea: primevue.textarea,\n\t\tTimeline: primevue.timeline,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabeTypeOptions)\n\t\t}\n\t},\n\tprops: {\n\t\tstg_kz_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tstudiensemesterOptions: null,\n\t\t\tallSem: null,\n\t\t\tcurSem: null,\n\t\t\tnotenOptionFilter: null,\n\t\t\tinplaceToggle: false,\n\t\t\theaderFiltersRestored: false,\n\t\t\tfiltersRestored: false,\n\t\t\tcolLayoutRestored: false,\n\t\t\tsortRestored: false,\n\t\t\tstateRestored: false,\n\t\t\ttimelineProjekt: null,\n\t\t\tselectedStudiengangOption: null,\n\t\t\tstudiengaengeOptions: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tallConfigPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_BETREUER: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenFilterOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tfixtermin: false,\n\t\t\t\tinvertedFixtermin: true,\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitData',\n\t\t\t\tplaceholder: Vue.computed(() => this.$capitalize(this.$p.t('global/noDataAvailable'))),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\trenderVerticalBuffer: 2000,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t// {\n\t\t\t\t\t// \tfield: 'rowSelection',\n\t\t\t\t\t// \tformatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatterParams: {\n\t\t\t\t\t// \t\trowRange: \"active\" // Only toggle the values of the active filtered rows\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \thozAlign:\"center\",\n\t\t\t\t\t// \theaderSort: false,\n\t\t\t\t\t// \tfrozen: true,\n\t\t\t\t\t// \twidth: 40\n\t\t\t\t\t// },\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', headerFilter: false, headerSort: false, formatter: this.formAction, tooltip:false, minWidth: 150, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'student_vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'student_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4studstatus'))), field: 'studienstatus', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4orgform'))), field: 'orgform', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4note'))), field: 'note_bez', headerFilter: true,\n\t\t\t\t\t\t formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerv2'))), field: 'erstbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPre'))), field: 'betreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerVorname'))), field: 'betreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerNachname'))), field: 'betreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPost'))), field: 'betreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerv2'))), field: 'zweitbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPre'))), field: 'zweitbetreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerVorname'))), field: 'zweitbetreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerNachname'))), field: 'zweitbetreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPost'))), field: 'zweitbetreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))),\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tfield: 'prevTermin', formatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: \"abgabetool_2026_02_26\"\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => \n\t\t\t\t{\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\t\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\t\t\t\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\t\t\t\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs) \n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst rowDate = rowVal.luxonDate;\n\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tsammelMailStudent(param) {\n\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailStudentBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tsammelMailBetreuer(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) recipientList.push(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) recipientList.push(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\t// actually not necessary for email clients but looks better for assistenz if we avoid duplicates here\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailBetreuerBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()){\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected){\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\t\t\t\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\t\t\t\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\t\t\t\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\t\t\t\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tgetItemBezeichnung(item){\n\t\t\tif(!item.bezeichnung) return ''\n\t\t\t\n\t\t\treturn item?.bezeichnung?.bezeichnung ?? item?.bezeichnung\n\t\t},\n\t\tgetItemNote(item) {\n\t\t\t// note can be just a number if it is coming from backend\n\t\t\t// if note was just set it is a note option\n\t\t\tif(!item?.note) return ''\n\t\t\tif(item.note?.bezeichnung) return item.note.bezeichnung\n\t\t\t\n\t\t\tconst notenOption = this.notenOptions.find(note => note.note == item.note)\n\t\t\tif(!notenOption) return item.note\n\t\t\t\n\t\t\treturn notenOption.bezeichnung\n\t\t},\n\t\thandleChangeAbgabetypSerientermin(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t},\n\t\tsemesterChanged(e) {\n\t\t\tif(this.$refs.abgabeTable.tabulator) {\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\t\t// TODO: maybe check if existing synergy really works with many filters\n\t\t\t\tconst existing = table.getFilters().filter(f => f.field != 'studiensemester_kurzbz');\n\n\t\t\t\tconst compVal = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '' : e.value.studiensemester_kurzbz\n\t\t\t\tconst compType = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '!=' : '='\n\t\t\t\tconst newFilter = { field: \"studiensemester_kurzbz\", type: compType, value: compVal };\n\n\t\t\t\t// merge and reapply\n\t\t\t\ttable.setFilter([...existing, newFilter]);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\t\t\t\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\t\t\t\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStg(option){\n\t\t\treturn option.kurzbzlang + ' ' + option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStudiensemester(option){\n\t\t\treturn option.studiensemester_kurzbz\n\t\t},\n\t\tgetNotenFilterOptionLabel(option) {\n\t\t\treturn option.bezeichnung\t\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tif(dateParam === null) return ''\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tformAction(cell) {\n\t\t\tconst actionButtons = document.createElement('div');\n\t\t\tactionButtons.className = \"d-flex gap-3\"; // you can keep Bootstrap gap if loaded\n\t\t\tactionButtons.style.display = \"flex\";\n\t\t\tactionButtons.style.alignItems = \"stretch\"; // buttons stretch to full height\n\t\t\tactionButtons.style.justifyContent = \"center\";\n\t\t\tactionButtons.style.height = \"100%\"; // full grid cell height\n\n\t\t\tconst val = cell.getValue();\n\n\t\t\tconst createButton = (iconClass, titleKey, clickHandler) => {\n\t\t\t\tconst btn = document.createElement('button');\n\t\t\t\tbtn.className = 'btn btn-outline-secondary';\n\t\t\t\tbtn.style.display = \"flex\";\n\t\t\t\tbtn.style.alignItems = \"center\"; // center icon vertically\n\t\t\t\tbtn.style.justifyContent = \"center\"; // center icon horizontally\n\t\t\t\tbtn.style.height = \"100%\"; // fill parent container height\n\t\t\t\tbtn.style.aspectRatio = \"1 / 1\"; // keep square shape (optional)\n\t\t\t\tbtn.style.padding = \"0\"; // remove extra padding for compactness\n\t\t\t\tif(iconClass == 'fa fa-timeline') btn.style.transform = \"rotate(90deg)\";\n\t\t\t\tbtn.innerHTML = ``;\n\t\t\t\tbtn.title = this.$capitalize(this.$p.t(titleKey));\n\t\t\t\tbtn.addEventListener('click', (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tclickHandler();\n\t\t\t\t});\n\t\t\t\treturn btn;\n\t\t\t};\n\n\t\t\tactionButtons.append(\n\t\t\t\tcreateButton('fa fa-folder-open', 'abgabetool/c4details', () => this.setDetailComponent(val)),\n\t\t\t\tcreateButton('fa fa-timeline', 'abgabetool/c4termineTimeLine', () => this.openTimeline(val))\n\t\t\t);\n\n\t\t\treturn actionButtons;\n\t\t},\n\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tconst pids = this.selectedData?.map(projekt => projekt.projektarbeit_id)\n\t\t\t\n\t\t\tconst preserveSelected = [...this.selectedData]\n\t\t\t\n\t\t\tthis.saving = true\n\t\t\tthis.serienTermin.fixtermin = !this.serienTermin.invertedFixtermin\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tpids,\n\t\t\t\tthis.serienTermin.fixtermin\n\t\t\t)).then(res => {\n\t\t\t\t\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// put new abgaben into projektarbeiten\n\t\t\t\tconst newAbgaben = res.data\n\t\t\t\tpids.forEach(pid => {\n\t\t\t\t\tconst abgabe = newAbgaben.find(abgabe => abgabe.projektarbeit_id == pid)\n\t\t\t\t\t\n\t\t\t\t\tconst pa = this.projektarbeiten.find(pa => pa.projektarbeit_id == pid)\n\t\t\t\t\n\t\t\t\t\tabgabe.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == abgabe.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tpa.abgabetermine.push(abgabe)\n\t\t\t\t\tpa.abgabetermine.sort((a, b) => new Date(a.datum) - new Date(b.datum))\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\t// reset selection to empty\n\t\t\t\t// this.$refs.abgabeTable.tabulator.deselectRow()\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator;\n\t\t\t\tconst scrollX = table.rowManager.scrollLeft;\n\t\t\t\tconst scrollY = table.rowManager.scrollTop;\n\t\t\t\t\n\t\t\t\tconst mappedData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\t\ttable.setData(mappedData)\n\t\t\t\ttable.redraw(true)\n\n\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\tif(table) {\n\t\t\t\t\t\ttable.scrollLeft = scrollX;\n\t\t\t\t\t\ttable.scrollTop = scrollY;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t\tthis.selectedData = preserveSelected\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tmapProjekteToTableData(projekte) {\n\t\t\t// const now = luxon.DateTime.now();\n\t\t\treturn projekte.map(projekt => {\n\t\t\t\t\n\t\t\t\t// in assistenz context every projektarbeit should be allowed to be selected i guess\n\t\t\t\tprojekt.selectable = true;\n\t\t\t\t\n\t\t\t\tprojekt.prevTermin = null;\n\t\t\t\tprojekt.nextTermin = null;\n\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\n\t\t\t\tif(this.notenOptions && projekt.note) {\n\t\t\t\t\tconst opt = this.notenOptions.find(n => n.note == projekt.note)\n\t\t\t\t\n\t\t\t\t\t// TODO: mehrsprachig englisch\n\t\t\t\t\tprojekt.note_bez = opt.bezeichnung\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tabgabetermine: projekt.abgabetermine,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\terstbetreuer: this.buildErstbetreuer(projekt),\n\t\t\t\t\tzweitbetreuer: this.buildZweitbetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tconst pa = this.projektarbeiten.find(projektarbeit => projektarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tif(typeof termin.note !== 'object') {\n\t\t\t\t\ttermin.note = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\t}\n\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && termin.note) {\n\t\t\t\t\ttermin.noteBackend = termin.note\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttermin.file = []\n\n\t\t\t\t// assistenz should be able to edit every abgabe\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\n\t\t\t\t// assistenz are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = paIsBenotet ? false : !termin.abgabedatum\n\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tconst vorname = pa.vorname ?? pa.student_vorname\n\t\t\tconst nachname = pa.nachname ?? pa.student_nachname\n\t\t\tpa.student = `${vorname} ${nachname}`\n\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t},\n\t\topenTimeline(val) {\n\t\t\tconst projekt = this.projektarbeiten.find(p => p.projektarbeit_id == val.projektarbeit_id)\n\t\t\tif(!projekt) {\n\n\t\t\t\tthis.$fhcAlert.alertInfo('Keine projektarbeit gefunden')\n\t\t\t\t\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t// show note only on termine with abgabetypen which are benotbar\n\t\t\t\tconst terminTypOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == termin.paabgabetyp_kurzbz)\n\t\t\t\ttermin.benotbar = terminTypOpt.benotbar \n\t\t\t})\n\t\t\tthis.timelineProjekt = projekt\n\t\t\tthis.$refs.drawer.show()\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\ttimelineFormatter() {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\t\t\t\t\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' + \n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\treturn 'mailto:' + projekt.student_uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.student_uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\n\t\t},\n\t\tbuildErstbetreuer(projekt) {\n\t\t\tif(projekt.erstbetreuer_full_name) return projekt.erstbetreuer_full_name\n\t\t\treturn projekt.betreuer_vorname + ' ' + projekt.betreuer_nachname\n\t\t},\n\t\tbuildZweitbetreuer(projekt) {\n\t\t\treturn projekt.zweitbetreuer_full_name ?? ''\n\t\t},\n\t\tasync setupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.getProjektarbeitenForStudiengang(\n\t\t\t\tthis.selectedStudiengangOption.studiengang_kz,\n\t\t\t\tthis.notenOptionFilter?.benotet ?? 0\n\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback()\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.loading=false\n\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tawait this.allConfigPromise\n\t\t\t\n\t\t\t// called through notenOptionFilter/selectedStudiengangOption watcher on startup\n\t\t\t// this.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER) {\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailBetreuerv3', [this.uniqueBetreuerEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailBetreuer\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueBetreuerEmailCount() {\n\t\t\tconst emails = new Set();\n\t\t\t\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) emails.add(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) emails.add(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\tselectedStudiengangOption(newVal, oldVal) {\n\t\t\t// implicitely avoids juggling around promises for created api calls,\n\t\t\t// since we need note & stg flags for loadProjektarbeiten\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tnotenOptionFilter(newVal) {\n\t\t\t// that single where clause is worth a decent load time so rather not filter tabulator but just \n\t\t\t// adapt the qry\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tselectedData(newVal) {\n\t\t\tconst table = this.$refs.abgabeTable?.tabulator\n\t\t\tif(!table) return\n\n\t\t\tconst allRows = table.getRows();\n\n\t\t\tnewVal.forEach(selected => {\n\t\t\t\tconst row = allRows.find(r => {\n\t\t\t\t\tconst data = r.getData()\n\t\t\t\t\tif (data.projektarbeit_id == selected.projektarbeit_id) return r\n\t\t\t\t}) \t\n\t\t\t\t\n\t\t\t\trow.select()\n\t\t\t\tconst cb = row.getElement().children[0]?.children[0]?.children[0]\n\t\t\t\tif(cb) cb.checked = true\n\t\t\t})\n\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.loading = true\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tconst requests = [\n\t\t\tthis.$api.call(ApiAbgabe.getConfig()),\n\t\t\tthis.$api.call(ApiAbgabe.getStudiengaenge()),\n\t\t\tthis.$api.call(ApiStudiensemester.getAllStudiensemesterAndAktOrNext()),\n\t\t\tthis.$api.call(ApiAbgabe.getNoten()),\n\t\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen())\n\t\t];\n\n\t\tthis.allConfigPromise = Promise.allSettled(requests)\n\t\t\t.then((results) => {\n\t\t\t\t// results is an array of { status: 'fulfilled'|'rejected', value?: any, reason?: any }\n\n\t\t\t\t// 1. Config\n\t\t\t\tif (results[0].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[0].value;\n\t\t\t\t\tthis.turnitin_link = res.data?.turnitin_link;\n\t\t\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER;\n\t\t\t\t}\n\n\t\t\t\t// 2. Studiengänge\n\t\t\t\tif (results[1].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[1].value;\n\t\t\t\t\tthis.studiengaengeOptions = res.data;\n\t\t\t\t\tif (this.studiengaengeOptions?.length) {\n\t\t\t\t\t\tthis.selectedStudiengangOption = this.stg_kz_prop\n\t\t\t\t\t\t\t? res.data.find(stgOpt => stgOpt.studiengang_kz == this.stg_kz_prop)\n\t\t\t\t\t\t\t: res.data[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 3. Studiensemester\n\t\t\t\tif (results[2].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[2].value;\n\t\t\t\t\tthis.allSem = res.data[0];\n\t\t\t\t\tconst all = { studiensemester_kurzbz: this.$p.t('abgabetool/c4all') };\n\t\t\t\t\tthis.curSem = all;\n\t\t\t\t\tthis.studiensemesterOptions = [all, ...this.allSem];\n\t\t\t\t}\n\n\t\t\t\t// 4. Noten\n\t\t\t\tif (results[3].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[3].value;\n\t\t\t\t\tif (res.meta?.status === 'success') {\n\t\t\t\t\t\tthis.notenOptions = res.data[0];\n\t\t\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.allowedNotenFilterOptions = [\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/keineNoteEingetragen')), benotet: 0 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/c4benotet')), benotet: 1 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/showAll')), benotet: -1 }\n\t\t\t\t\t];\n\t\t\t\t\tthis.notenOptionFilter = this.allowedNotenFilterOptions[0];\n\t\t\t\t}\n\n\t\t\t\t// 5. Abgabetypen\n\t\t\t\tif (results[4].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[4].value;\n\t\t\t\t\tthis.abgabeTypeOptions = res.data;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.loading = false;\n\t\t\t});\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolAssistenz;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\n\nexport const DeadlineOverview = {\n\tname: \"DeadlineOverview\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t},\n\tprops: {\n\t\tperson_uid_prop: {\n\t\t\tdefault: null\t\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfullName: null, // TODO: fetch this somewhere\n\t\t\tdeadlines: null,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tdeadlineTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zieldatumv2'))), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4fixterminv4'))), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabetyp'))), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabekurzbzv2'))), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('person/studentIn'))), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'semester', formatter: this.centeredTextFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tdeadlineTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"cellClick\",\n\t\t\t\t\thandler: async (e, cell) => {\n\n\t\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tloadDeadlines() {\n\t\t\tthis.$api.call(ApiAbgabe.fetchDeadlines(this.person_uid_prop ?? null))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tsetupData(data) {\n\t\t\tthis.deadlines = data\n\t\t\t\n\t\t\tthis.deadlines.forEach(dl => {\n\t\t\t\tdl.student = (dl.stud_titelpre ? (dl.stud_titelpre + ' ') :'') + dl.stud_vorname + ' ' + dl.stud_nachname + (dl.stud_titelpost ? (' ' + dl.stud_titelpost) :'')\n\t\t\t\tdl.fixterminstring = dl.fixtermin ? this.$p.t('abgabetool/c4yes') : this.$p.t('abgabetool/c4no')\n\t\t\t})\n\n\t\t\tthis.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns)\n\t\t\tthis.$refs.deadlineTable.tabulator.setData(this.deadlines);\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.deadlineTableOptions.height = window.visualViewport.height - rect.top - 30\n\t\t\tthis.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadDeadlines()\n\t\t\tthis.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t

    {{$p.t('abgabetool/deadlinesTitle')}} {{ fullName ? ('-' + fullName) : ''}}

    \n\t\t
    \n\t\t\t\n\t\t \n `,\n};\n\nexport default DeadlineOverview;\n","import PluginsPhrasen from '../../plugins/Phrasen.js';\nimport AbgabetoolStudent from \"../../components/Cis/Abgabetool/AbgabetoolStudent.js\";\nimport AbgabetoolMitarbeiter from \"../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js\";\nimport AbgabetoolAssistenz from \"../../components/Cis/Abgabetool/AbgabetoolAssistenz.js\";\nimport DeadlineOverview from \"../../components/Cis/Abgabetool/DeadlineOverview.js\";\nimport {capitalize} from \"../../helpers/StringHelpers.js\";\n\nconst app = Vue.createApp({\n\tname: 'AbgabetoolApp',\n\tcomponents: {\n\t\tAbgabetoolStudent,\n\t\tAbgabetoolMitarbeiter,\n\t\tAbgabetoolAssistenz,\n\t\tDeadlineOverview\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcomp: null,\n\t\t\tuid: null,\n\t\t\tstudent_uid: null,\n\t\t\tstg_kz: null\n\t\t};\n\t},\n\tmethods: {\n\t\t\n\t},\n\tcomputed: {\n\t\tviewData() {\n\t\t\treturn { uid: this.uid}\n\t\t},\n\t\tstudent_uid_computed() {\n\t\t\treturn this.student_uid ?? this.uid\n\t\t},\n\t\tstg_kz_computed() {\n\t\t\treturn this.stg_kz ?? null\n\t\t}\n\t},\n\tcreated() {\n\t},\n\tmounted() {\n\t\t\n\t\tconst root = document.getElementById('abgabetoolroot')\n\t\tconst route = root.getAttribute(\"route\");\n\t\tthis.comp = route\n\n\t\tconst uid = root.getAttribute(\"uid\");\n\t\tthis.uid = uid\n\n\t\tconst stg_kz = root.getAttribute(\"stg_kz_prop\");\n\t\tthis.stg_kz = stg_kz\n\n\t\tconst student_uid = root.getAttribute(\"student_uid_prop\");\n\t\tthis.student_uid = student_uid\n\t\t\n\t},\n\ttemplate: `\n\t\t\n\t`\n});\napp.config.globalProperties.$capitalize = capitalize;\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.directive('tooltip', primevue.tooltip);\napp.use(PluginsPhrasen);\napp.mount('#abgabetoolroot');\n","export function capitalize(string) {\n\tif (!string) return '';\n\treturn string[0].toUpperCase() + string.slice(1);\n}"],"names":["search","searchsettings","config","this","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","loadCategory","category","get","setLanguage","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","url","undefined","create","stdsem","grund","studiensemester","errorHandling","cancel","Array","isArray","Promise","allSettled","map","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","params","then","res","data","getHistory","getPrestudents","query","signal","timeout","approve","a","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","fotoSperre","value","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","id","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","set","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","filter","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","e","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","response","checkDoubles","form","confirmErrorHandler","error","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","update","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","type","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","event","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","title","tag","ampeln","open","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","options","globalProperties","factory","console","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","result","meta","fhcApiAxios","baseURL","interceptors","request","use","method","FormData","Object","values","every","item","FileList","i","File","newData","entries","reduce","nd","key","file","append","length","jsondata","forEach","JSON","stringify","errors","err","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","$p","t","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","bind","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","document","createElement","helperApp","Vue","createApp","name","components","PvToast","PvConfirm","methods","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","detail","openMessagecard","bootstrap","Collapse","getOrCreateInstance","target","getAttribute","toggle","unmounted","parentElement","removeChild","computed","showmaillink","template","PvConfig","PvConfirmationService","helperAppInstance","mount","body","appendChild","FhcAlert","FhcPhrasen","alertSuccess","$refs","toast","add","summary","life","alertInfo","alertWarning","alert","confirmDelete","resolve","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","retval","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","el","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","input","querySelector","CustomEvent","arr","PluginsApi","$api","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","handler","async","_format_toast","_default","push","field","msgs","sort","b","indexOf","n_errors","n","get_config","clean_return_value","String","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","includes","newTypeHasHandler","errorConfig","remaining","call","configoverwrite","index","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","obj","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","Upload","DmsItem","emits","props","required","preview","watch","parse","multiple","Boolean","inputClass","noList","default","disabled","stringifyFile","lastModified","lastModifiedDate","addFiles","$emit","files","dt","DataTransfer","doubles","items","removeFile","fileToRemove","from","upload","dmsFile","BsModal","modal","fullscreen","backdrop","validator","focus","keyboard","noCloseBtn","dialogClass","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","hide","show","relatedTarget","toggleFullscreen","mounted","Modal","popup","footer","slots","includedPrimevue","primevue","instance","setup","h","unmount","beforeUnmount","wrapper","zIndex","overlay","Phrasen","ApiAbgabe","getConfig","getConfigStudent","getStudentProjektarbeiten","getStudentProjektabgaben","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getMitarbeiterProjektarbeiten","showall","postProjektarbeitAbgabe","termin","dateString","Date","getFullYear","getMonth","padStart","getDate","paabgabe_id","paabgabetyp_kurzbz","bezeichnung","note_pk","upload_allowed","beurteilungsnotiz","fixtermin","insertvon","kurzbz","betreuer_person_id","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","getPaAbgabetypen","getProjektarbeitenForStudiengang","benotet","getStudiengaenge","postStudentProjektarbeitZusatzdaten","getSignaturStatusForProjektarbeitAbgaben","paabgabe_ids","FhcOverlay","active","AbgabeStudentDetail","InputNumber","inputnumber","Checkbox","checkbox","Dropdown","dropdown","Textarea","textarea","Accordion","accordion","AccordionTab","accordiontab","Message","Inplace","inplace","VueDatePicker","inject","projektarbeit","viewMode","loading","eidAkzeptiert","enduploadTermin","allActiveLanguages","abstract","abstract_en","schlagwoerter","schlagwoerter_en","kontrollschlagwoerter","seitenanzahl","getNoteBezeichnung","noteOpt","notenOptions","opt","positiv","$capitalize","benotbar","validate","endupload","triggerEndupload","bperson_id","handleUploadRes","finally","modalContainerEnduploadZusatzdaten","downloadAbgabe","window","formatDate","dateParam","padZero","num","month","abgabedatum","toISOString","signatur","signaturInfo","getOptionLabel","option","getTerminNoteBezeichnung","newVal","getMoodleLink","moodle_link","getMessagePtStyle","style","margin","padding","getEid","allowedToSaveZusatzdaten","getAllowedToSendEndupload","qualityGateTerminAvailable","qgatefound","abgabetermine","abgabe","getTooltipVerspaetet","getTooltipVerpasst","getTooltipAbzugeben","getTooltipStandard","getTooltipAbgegeben","getTooltipFixtermin","getTooltipAbgabeDetected","getTooltipNotAllowedToUpload","isViewMode","getTooltipBeurteilungerforderlich","getTooltipBestanden","getTooltipNichtBestanden","created","zone","today","luxon","DateTime","now","setZone","getDateStyleClass","fromISO","endOf","diffindays","diff","days","isLate","nopt","AbgabetoolStudent","AbgabeDetail","student_uid_prop","viewData","activeTabIndex","abgabeTypeOptions","phrasenPromise","phrasenResolved","projektarbeiten","selectedProjektarbeit","checkQualityGatesStrict","termine","qgate1Passed","qgate2Passed","noteOption","checkQualityGatesOptional","qgate1found","qgate2found","qgate1positiv","qgate2positiv","isPastDate","deadline","setDetailComponent","loadAbgaben","pa","projekarbeit","paIsBenotet","allowedToUpload","inTime","dateStyle","betreuer","buildBetreuer","modalContainerAbgabeDetail","centeredTextFormatter","cell","getValue","detailFormatter","mode","mailFormatter","beurteilungFormatter","buildMailToLink","email","btitelpre","bvorname","bnachname","btitelpost","setupData","betreuerart_kurzbz","beurteilung1","downloadLink1","beurteilung2","downloadLink2","sem","stg","kurzbzlang","mail","projekttypbezeichnung","titel","loadProjektarbeiten","setupMounted","getAccTabHeaderForProjektarbeit","getMailLink","handleDownloadBeurteilung1","handleDownloadBeurteilung2","allowedNotenOptions","catch","CoreFetchCmpt","refresh","apiFunction","Function","apiFunctionParameters","newValue","oldValue","fetchData","errorMessage","apiFunctionResult","successHandler","errorHandler","finallyHandler","setError","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","columns","fields","switchFilter","applyFilterConfig","currentFields","types","c","evt","currentTarget","filteredFields","condition","addField","removeField","splice","FilterColumns","selected","names","selectedFields","DEFAULT_ICONS","jsonLines","xlsx","pdf","json","csv","DEFAULT_LABELS","TableDownload","tabulator","iconClass","currentConfig","prototype","toString","newConfig","k","v","stringToFileFormatter","icon","label","formatter","validateFileFormatter","lcInput","XLSX","jspdf","jsPDF","autoTable","download","elementDataMap","WeakMap","collapseAutoClose","binding","contains","collapse","getInstance","addEventListener","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","column","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","ApiFilter","_uuid","CoreFilterCmpt","directives","onNwNewEntry","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","headerFilter","notSelectedFields","x","filteredData","filteredColumns","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","selectableRows","dataTree","on","toDelete","childIdx","child","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","dataFetchedCallback","handlerSaveCustomFilter","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","AbgabeMitarbeiterDetail","SpeedDial","speeddial","isFullscreen","assistenzMode","showAutomagicModalPhrase","speedDialItems","command","openCreateNewAbgabeModal","getAllowedToCreateNewTermin","openBenotung","openPlagiatcheck","openStudentPage","newTermin","noteBackend","getPlaceholderTermin","saveTermin","invertedFixtermin","newTerminRes","allowedToSave","allowedToDelete","existingTerminRes","abgabeOpt","noteOptExisting","findIndex","savedNewWithNegative","savedExistingNoteAsNegativeAndWasNotNegativeBefore","modalContainerCreateNewAbgabe","openZusatzdatenModal","modalContainerZusatzdaten","saveZusatzdaten","validateZusatzdaten","paRes","handleDeleteTermin","deleteTermin","deletedTerminIndex","openBeurteilungLink","getOptionLabelSprache","getOptionLabelAbgabetyp","getOptionDisabled","aktiv","getNotenOptionLabel","turnitin_link","getSemesterBenotbar","beurteilungLinkNew","beurteilungLinkOld","upload_allowed_default","validateTermin","handleSaveNewAbgabe","handleChangeAbgabetyp","notenOptionsNonFinal","getAllowedAbgabeTypeOptions","abgabetypenBetreuer","getEnduploadErlaubt","isCurrent","endUploadVorhanden","getSpeedDialStyle","getSpeedDialWrapperStyle","getTooltipNotAllowedToSave","getTooltipNotAllowedToDelete","getProjektarbeitTitel","getProjektarbeitStudent","student","dateFilter","onRendered","div","initialValue","start","end","PrimevueCalendar","calendar","splitMailsHelper","mails","subject","alertPluginRef","phrasenPluginRef","maillist","mailto","subjectlength","firstrun","useBcc","ctrlKey","metaKey","splitposition","lastIndexOf","mailLink","href","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","AbgabetoolMitarbeiter","TieredMenu","tieredmenu","old_abgabe_beurteilung_link","tableData","detailIsFullscreen","BETREUER_SAMMELMAIL_BUTTON_STUDENT","saving","serienTermin","showAll","tabulatorUuid","domain","detailOffset","tableBuiltResolve","tableBuiltPromise","abgabeTableOptions","selectableCheck","selectionCheck","rowHeight","formatterParams","getRow","stopPropagation","handleClick","cssText","titleFormatter","hozAlign","headerSort","selectHandler","titleFormatterParams","selectAllHandler","width","cssClass","widthGrow","pkzTextFormatter","maxWidth","headerFilterFunc","headerFilterTerminCol","sorter","sortFuncTerminCol","abgabterminFormatter","headerFilterParams","valuesLookup","getQGateStatusList","persistenceID","abgabeTableEventHandlers","getColumn","undoSelection","sd","fsd","checked","d","handlePaUpdated","checkAbgabetermineProjektarbeit","abgabeTable","redraw","sammelMailStudent","param","recipientList","Set","originalEvent","aRow","bRow","dir","_column","Math","abs","diffMs","filterVal","rowVal","luxonDate","isValid","toLuxon","fromJSDate","fromMillis","Number","hasSame","startOf","loadState","localStorage","getItem","saveState","stateRestored","state","getColumnLayout","getSorters","s","getFilters","headerFilters","setItem","handleTableBuilt","saved","colLayoutRestored","setColumnLayout","filtersRestored","setFilter","headerFiltersRestored","hf","sortRestored","setTimeout","sortList","columnManager","findColumn","setSort","checkQualityGateStatus","qgate1Termine","qgate2Termine","qgate1Status","qgate1StatusRank","qgate2Status","qgate2StatusRank","qgate","toMillis","prevTermin","nextTermin","isSelected","deselect","select","getTable","getRows","r","handleToggleFullscreenDetail","showDeadlines","toggleShowAll","openAddSeriesModal","modalContainerAddSeries","addSeries","oldScrollLeft","scrollLeft","oldScrollTop","scrollTop","nextTick","createInfoString","str","paabgabe","vorname","nachname","tableResolve","buildPKZ","matrikelnr","buildStg","pkz","beurteilung","beurteilungLink","projekttyp_kurzbz","callback","handleUuidDefined","calcMaxTableHeight","tableID","tableDataSet","getElementById","rect","getBoundingClientRect","visualViewport","top","setHeight","emailItems","uniqueStudentEmailCount","emails","BsOffcanvas","offcanvas","scroll","placement","Offcanvas","ApiStudiensemester","getAllStudiensemesterAndAktOrNext","order","AbgabetoolAssistenz","AbgabeterminStatusLegende","Timeline","timeline","stg_kz_prop","studiensemesterOptions","allSem","curSem","notenOptionFilter","inplaceToggle","timelineProjekt","selectedStudiengangOption","studiengaengeOptions","allConfigPromise","ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT","ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER","allowedNotenFilterOptions","renderVerticalBuffer","formAction","minWidth","uniqueRecipients","sammelMailBetreuer","betreuer_mail","zweitbetreuer_mail","getItemBezeichnung","getItemNote","notenOption","handleChangeAbgabetypSerientermin","semesterChanged","existing","f","compVal","newFilter","getOptionLabelStg","getOptionLabelStudiensemester","getNotenFilterOptionLabel","actionButtons","className","display","alignItems","justifyContent","createButton","titleKey","clickHandler","btn","aspectRatio","transform","innerHTML","stopImmediatePropagation","openTimeline","pids","preserveSelected","newAbgaben","pid","scrollX","scrollY","mappedData","mapProjekteToTableData","projekte","note_bez","erstbetreuer","buildErstbetreuer","zweitbetreuer","buildZweitbetreuer","student_vorname","student_nachname","p","terminTypOpt","drawer","timelineFormatter","erstbetreuer_full_name","betreuer_vorname","betreuer_nachname","zweitbetreuer_full_name","uniqueBetreuerEmailCount","oldVal","allRows","cb","getElement","requests","results","stgOpt","DeadlineOverview","person_uid_prop","fullName","deadlines","deadlineTableOptions","deadlineTableEventHandlers","pdfExportLink","loadDeadlines","dl","stud_titelpre","stud_vorname","stud_nachname","stud_titelpost","fixterminstring","deadlineTable","comp","student_uid_computed","stg_kz_computed","route","string","directive"],"mappings":"4eAiBA,IAAAA,EAAe,CACdA,MAAAA,CAAOC,EAAgBC,GAEtB,OAAOC,KAAKC,QAAQC,KADR,oCACkBJ,EAAgBC,EAC/C,EACAI,cAAAA,CAAeL,EAAgBC,GAE9B,OAAOC,KAAKC,QAAQC,KADR,4CACkBJ,EAAgBC,EAC/C,EACAK,WAAAA,CAAYN,GAEX,OAAOE,KAAKC,QAAQC,KADR,yCACkBJ,EAC/B,GCZDO,EAAe,CACdC,YAAAA,CAAaC,GACZ,OAAOP,KAAKC,QAAQO,IAAI,uCAAyCD,EAClE,EACAE,WAAAA,CAAYC,EAAWC,GACtB,MAAMC,EAAU,CAACF,aAAYC,YAC7B,OAAOX,KAAKC,QAAQC,KAAK,uCAAwCU,EAClE,EACAC,WAAAA,GACC,OAAOb,KAAKC,QAAQO,IAAI,uCAAwC,CAAA,EACjE,EACAM,oBAAAA,GACC,OAAOd,KAAKC,QAAQO,IAAI,2CAA4C,CAAA,EACrE,GCbDO,EAAe,CACdC,SAAAA,CAAUC,GACT,OAAOjB,KAAKC,QAAQO,IACnB,qCACA,CAAES,mBAEJ,EACAC,QAAS,SAASD,GACjB,OAAOjB,KAAKC,QAAQO,IACnB,mCACA,CAAES,mBAEJ,GCZDE,EAAe,CACdC,gBAAAA,CAAiBC,GAChB,OAAOrB,KAAKC,QAAQC,KACnB,2CACA,CACCoB,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBC,iBAAkBH,EAASG,kBAG9B,EACAC,kBAAAA,CAAmBJ,GAClB,OAAOrB,KAAKC,QAAQC,KACnB,6CACA,CACCoB,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,UAGtB,EACAC,iBAAAA,CAAkBN,GACjB,OAAOrB,KAAKC,QAAQC,KACnB,4CACA,CACCoB,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBK,aAAcP,EAASO,cAG1B,EACAC,cAAAA,CAAeR,GACd,OAAOrB,KAAKC,QAAQC,KACnB,yCACA,CACCoB,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,aAGzB,EACAC,iBAAAA,CAAkBV,GACjB,OAAOrB,KAAKC,QAAQC,KACnB,4CACA,CACCoB,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,aAGzB,EACAE,aAAAA,CAAcX,GACb,OAAOrB,KAAKC,QAAQO,IACnB,oCACA,CACCc,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,UAGtB,EACAO,SAAAA,CAAUZ,GACT,OAAOrB,KAAKC,QAAQO,IACnB,oCACA,CACCc,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,YAGxB,GCrEDW,EAAe,CACdC,UAAW,CACVC,UAAAA,CAAWC,EAAWC,GACrB,MAAMC,EAAM,+CACMC,IAAdH,EAA0B,uBAAyBA,EAAY,0BAA4BC,GAC/F,OAAOtC,KAAKC,QAAQO,IAAI+B,EACzB,EACAE,MAAAA,CAAOC,EAAQJ,EAAeK,GAC7B,OAAO3C,KAAKC,QAAQC,KAAK,qDAAsD,CAC9E0C,gBAAiBF,EACjBJ,gBACAK,SACE,CACFE,cAAe,UAEjB,EACAC,MAAAA,CAAOT,GACN,OAAKU,MAAMC,QAAQX,GAKZY,QAAQC,WAAWb,EAAUc,IAAIC,GAAUpD,KAAKC,QAAQC,KAC9D,qDACA,CAAEmC,UAAWe,EAAOC,uBACpB,CAAEC,YAAa,IAAMF,EAAOC,0BAPrBrD,KAAKC,QAAQC,KACnB,qDACA,CAAEmC,aAOL,GAEDkB,cAAe,CACdnB,UAAAA,CAAWC,EAAWC,GACrB,MAAMC,EAAM,mDACMC,IAAdH,EAA0B,uBAAyBA,EAAY,0BAA4BC,GAC/F,OAAOtC,KAAKC,QAAQO,IAAI+B,EACzB,EACAE,MAAAA,CAAOG,EAAiBN,EAAeK,EAAOa,EAAsBC,GACnE,OAAOzD,KAAKC,QAAQC,KAAK,yDAA0D,CAClF0C,kBACAN,gBACAK,QACAa,uBACAC,cACE,CACFZ,cAAe,UAEjB,EACAC,MAAAA,CAAOT,GACN,OAAOrC,KAAKC,QAAQC,KAAK,yDAA0D,CAClFmC,aACE,CACFQ,cAAe,UAEjB,GAEDa,aAAc,CACbtB,UAAAA,CAAWE,GACV,MAAMC,EAAM,mEAAqED,EACjF,OAAOtC,KAAKC,QAAQO,IAAI+B,EACzB,EACAoB,MAAAA,CAAOtB,GACN,MAAME,EAAM,mDAAqDF,EACjE,OAAOrC,KAAKC,QAAQO,IAAI+B,EACzB,EACAE,MAAAA,CAAOH,EAAeM,GACrB,OAAO5C,KAAKC,QAAQC,KAAK,wDAAyD,CACjFoC,gBACAM,mBACE,CACFC,cAAe,UAEjB,EACAC,MAAAA,CAAOR,EAAeM,GACrB,OAAO5C,KAAKC,QAAQC,KAAK,wDAAyD,CACjFoC,gBACAM,mBACE,CACFC,cAAe,UAEjB,EACAe,OAAAA,CAAQC,EAAcC,GACrB,OAAO9D,KAAKC,QAAQC,KAAK,mDAAoD,CAC5E2D,eACAC,gBAEF,GAEDC,QAAS,CACRC,OAAAA,GACC,OAAOhE,KAAKC,QAAQO,IAAI,oDACzB,EACAyD,WAAAA,CAAY1B,EAAKxC,EAAQmE,GACxB,OAAOlE,KAAKC,QACVO,IAAI,mDAAqD+B,GACzD4B,KAAKC,GAAOA,EAAIC,KACnB,EACAC,UAAAA,CAAWjC,GACV,OAAOrC,KAAKC,QAAQO,IAAI,kDAAoD6B,EAC7E,EACAkC,cAAAA,CAAeC,EAAOC,GACrB,OAAOzE,KAAKC,QAAQC,KACnB,qDACA,CAAEsE,SACF,CACgCC,OAAQA,EACRC,QAAS,KAG3C,EACAC,OAAAA,CAAQvB,GACP,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,oDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,oDACAkD,EAOH,EACAyB,MAAAA,CAAOzB,GACN,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,mDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,mDACAkD,EAOH,EACA0B,MAAAA,CAAO1B,GACN,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,mDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,mDACAkD,EAOH,EACA2B,KAAAA,CAAM3B,GACL,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,kDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,kDACAkD,EAOH,EACA4B,OAAAA,CAAQ5B,GACP,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,oDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,oDACAkD,EAOH,EACA6B,MAAAA,CAAO7B,GACN,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,mDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,mDACAkD,EAOH,EACA8B,gBAAAA,CAAiB9B,GAChB,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,uDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,uDACAkD,EAOH,EACA+B,aAAAA,CAAc/B,GACb,OAAKL,MAAMC,QAAQI,GAKZH,QAAQC,WAAWE,EAAOD,IAAIyB,GAAK5E,KAAKC,QAAQC,KACtD,oDACA0E,EACA,CAAEtB,YAAa,IAAMsB,EAAEvB,0BAPhBrD,KAAKC,QAAQC,KACnB,oDACAkD,EAOH,IC5NFgC,EAAe,CAEbC,QAAS,SAAUC,GACjB,OAAOtF,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,mCAAmCH,IAAM,CAAA,EAE7C,EAEAI,WAAY,SAAUC,GACpB,OAAO3F,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,sCAAsCE,IACtC,CAAA,EAGJ,EAEAC,UAAW,SAAUN,GACnB,OAAOtF,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oCACA,CACEH,IAAIA,GAGV,EAEAO,cAAe,SAAUP,GACvB,OAAOtF,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCAAyCH,IACzC,CAAA,EAEJ,EAEAQ,kBAAmB,WACjB,OAAO9F,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,4CAA4C,GAEhD,EAEAM,kBAAmB,WACjB,OAAO/F,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,4CAA4C,GAEhD,EAEAO,aAAc,SAASC,EAAOC,GAC5B,OAAOlG,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,wCAAwCQ,KAAUC,IAClD,CAAA,EAGJ,EACAC,eAAe,WACb,OAAOnG,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCAAyC,GAE7C,GCvEFW,EAAe;;AAGXC,UAAW,WACP,OAAOrG,KAAKC,QAAQO,IACpB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,0CAA0C,GAC9C,EAEAa,SAAU,WACN,OAAOtG,KAAKC,QAAQO,IACpB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCAAyC,GAC7C,EAEAc,oBAAqB,UAAUC,iBAACA,EAAgBlB,IAAEA,EAAGmB,eAAEA,EAAcC,MAAEA,EAAKC,iBAAEA,IAE5E,OAAO3G,KAAKC,QAAQC,KAClBqF,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDAAoD,CAACe,mBAAkBlB,MAAKmB,iBAAgBC,QAAOC,oBACvG,EAEAC,kBAAmB,UAAUJ,iBAACA,EAAgBlB,IAAEA,EAAGoB,MAAEA,EAAKD,eAAEA,IAC1D,OAAOzG,KAAKC,QAAQC,KAClBqF,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,kDAAkD,CAACe,mBAAiBlB,MAAIoB,QAAMD,kBAClF,EAEAI,WAAY,SAAUC,EAAKC,EAAU,MAEnC,OAAO/G,KAAKC,QAAQC,KAClBqF,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,4CAA4CsB,IAC5CD,EAEJ,EAEAE,sBAAuB,SAAUC,GAC/B,OAAOjH,KAAKC,QAAQO,IAClB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,uDAAuDwB,IAAY,CAAA,EACvE,EAEAC,oBAAqB,SAAU5B,EAAM,KAAM6B,EAAK,MAE5C,OAAOnH,KAAKC,QAAQO,IACpB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,IAAKH,EAAI,CAACA,OAAK,MACT6B,EAAG,CAACA,MAAI,CAAA,GAElB,EAEAC,oBAAqB,SAAUV,EAAO9F,EAASyG,EAAS,MAEtD,OAAOrH,KAAKC,QAAQC,KAClBqF,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,CACEiB,QACA9F,aACIyG,EAAS,CAAEA,UAAW,CAAA,GAEhC,EAEAC,oBAAqB,SAAUZ,EAAO9F,EAAS2G,EAAIF,EAAS,MAE1D,OAAOrH,KAAKC,QAAQC,KAClBqF,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,CACEiB,QACA9F,UACA2G,QACIF,EAAS,CAAEA,OAAQA,GAAW,CAAA,GAExC,EAEAG,oBAAqB,SAAUP,GAE7B,OAAOjH,KAAKC,QAAQC,KAClBqF,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,CACEwB,aAEN,GC/FJQ,EAAe,CACdC,WAAAA,CAAYC,EAAYC,EAAYC,GACnC,OAAO7H,KAAKC,QAAQC,KACnB,sCACA,CAAGyH,aAAYC,aAAYC,YAE7B,EACAC,UAAAA,GACC,OAAO9H,KAAKC,QAAQO,IACnB,kCACA,CAAA,EAEF,EACAuH,oBAAAA,CAAqBJ,EAAYC,EAAYC,GAC5C,OAAO7H,KAAKC,QAAQC,KACnB,6CAA6CyH,IAC7C,CAAEC,aAAYC,YAEhB,EACAG,uBAAAA,CAAwBJ,EAAYC,GACnC,OAAO7H,KAAKC,QAAQC,KACnB,4CACA,CAAE0H,aAAYC,YAEhB,EACAI,6BAAAA,CAA8BC,GAC7B,OAAOlI,KAAKC,QAAQO,IACnB,yDAAyD0H,IACzD,GAEF,EACAC,2BAAAA,CAA4BC,GAC3B,OAAOpI,KAAKC,QAAQO,IACnB,uDAAuD4H,IACvD,GAEF,EACAC,YAAAA,CAAaT,EAAYC,EAAUS,GAClC,OAAOtI,KAAKC,QAAQO,IACnB,uCACA,CAAEoH,aAAYC,WAAUS,SAE1B,GCxBDC,EAAe,CACdC,QCpBc,CACdhI,GAAAA,GACC,OAAOR,KAAKC,QAAQO,IAAI,8BACzB,EACAiI,UAAW,CACVjI,GAAAA,GACC,OAAOR,KAAKC,QAAQO,IAAI,gCACzB,EACAkI,GAAAA,CAAID,GACH,OAAOzI,KAAKC,QAAQC,KAAK,oCAAqC,CAC7DuI,aAEF,IDSDE,SErBc,CACdrD,GAAAA,CAAIA,EAAKsD,GACR,IAAIrG,EAAM,gCACPsG,mBAAmBD,GACnB,QACAC,mBAAmBvD,GACtB,OAAOtF,KAAKC,QAAQ6I,OAAOvG,EAC5B,EACAwG,UAAAA,CAAWzG,EAAesG,GACzB,IAAIrG,EAAM,gCACPsG,mBAAmBD,GACnB,eACAC,mBAAmBvG,GACtB,OAAOtC,KAAKC,QAAQ6I,OAAOvG,EAC5B,EACAyG,MAAAA,CAAOC,EAAWL,GACjB,IAAIrG,EAAM,gCACPsG,mBAAmBD,GACnB,WACAC,mBAAmBI,GACtB,OAAOjJ,KAAKC,QAAQ6I,OAAOvG,EAC5B,EACAiG,OAAAA,CAAQU,GACP,OAAOlJ,KAAKC,QAAQ6I,OAAO,gCAAkCI,EAC9D,GFFAC,OGtBc,CACdC,MAAAA,GACC,OAAOpJ,KAAKC,QAAQO,IAAI,oCACzB,EACA6I,MAAAA,CAAOC,GACN,OAAOtJ,KAAKC,QAAQC,KAAK,oCAAqC,CAC7DoJ,kBAEF,GHeAC,MIvBc,CACdC,eAAAA,CAAgBzJ,EAAQ0J,GAavB,OAZA1J,EAAO2J,QAAU,gCACjB3J,EAAO4J,WAAa,KACJ,CACdV,UAAWQ,EAAKG,WAAWX,WAAaQ,EAAKG,WAAWzG,IAAI0G,GAAKA,EAAEZ,WACnEa,UAAWL,EAAKN,OAChBG,eAAgBG,EAAKM,sBAAwBN,EAAKO,OAAS,KAI7DjK,EAAOkK,gBAAkB,CAAC1H,EAAKxC,EAAQmE,IAAWlE,KAAKC,QAAQC,KAAKqC,EAAK2B,EAAQnE,GACjFA,EAAOmK,aAAe,CAAC3H,EAAK2B,EAAQiG,IAAaA,EAAS9F,KAEnDtE,CACR,EACAqK,YAAAA,CAAaC,EAAMhG,GAClB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,yCAA0ChG,EAAM,CAC9EiG,oBAAqBC,IAAS,GAEhC,EACAC,MAAAA,CAAOH,EAAMhG,GACZ,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,mCAAoChG,EACpE,EACAoG,OAAAA,CAAQpG,GACP,OAAOrE,KAAKC,QAAQC,KAAK,oCAAqCmE,EAC/D,EACAqG,IAAAA,CAAKL,EAAMhG,GACV,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,mCAAoChG,EACpE,EACAsG,OAAOC,GACN,OAAO5K,KAAKC,QAAQC,KAAK,mCAAoC,CAAC0K,cAC/D,EACAC,gBAAAA,GACC,OAAO7K,KAAKC,QAAQO,IAAI,6CACzB,GJXAsK,MKxBc,CACdC,UAAAA,CAAWxI,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,0CAA4C0D,EAAOiD,GAC5E,EACA6D,WAAAA,CAAY9G,GACX,OAAOlE,KAAKC,QAAQC,KAAK,4CAA6CgE,EACvE,GLmBA+G,QMzBc,CAEdC,WAAAA,CAAa3I,EAAKxC,EAAQmE,GACzB,OAAOlE,KAAKC,QAAQO,IAAI,2CAA6C0D,EAAOiD,GAC7E,EACAgE,aAAAA,CAAcd,EAAMlD,EAAI9C,GACvB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,6CAA+ClD,EAC7E9C,EAEF,EACA+G,WAAAA,CAAYC,GACX,OAAOrL,KAAKC,QAAQC,KAAK,2CAA4C,CAACmL,cACvE,EACAC,aAAAA,CAAcjB,EAAMgB,EAAYhH,GAC/B,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,6CAA+CgB,EAC7EhH,EAEF,EACAkH,aAAAA,CAAcF,GACb,OAAOrL,KAAKC,QAAQC,KAAK,6CAA8C,CAACmL,cACzE,EACAG,SAAAA,CAAUC,GACT,OAAOzL,KAAKC,QAAQO,IAAI,yCAA2CiL,EACpE,EACAC,SAAAA,CAAUC,GACT,OAAO3L,KAAKC,QAAQO,IAAI,yCAA2CmL,EACpE,EACAC,UAAAA,GACC,OAAO5L,KAAKC,QAAQO,IAAI,0CACzB,EACAqL,gBAAAA,GACC,OAAO7L,KAAKC,QAAQO,IAAI,gDACzB,EAGAsL,iBAAAA,CAAmBvJ,EAAKxC,EAAQmE,GAC/B,OAAOlE,KAAKC,QAAQO,IAAI,iDAAmD0D,EAAOiD,GACnF,EACA4E,oBAAAA,CAAqB1B,EAAMlD,EAAI9C,GAC9B,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,oDAAsDlD,EACpF9C,EAEF,EACA2H,kBAAAA,CAAmBC,GAClB,OAAOjM,KAAKC,QAAQC,KAAK,kDAAmD,CAAC+L,qBAC9E,EACAC,oBAAAA,CAAqB7B,EAAM4B,EAAmB5H,GAC7C,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,oDAAsD4B,EACpF5H,EAEF,EACA8H,oBAAAA,CAAqBF,GACpB,OAAOjM,KAAKC,QAAQC,KAAK,oDAAqD,CAAC+L,qBAChF,EAGAG,WAAAA,CAAa7J,EAAKxC,EAAQmE,GACzB,OAAOlE,KAAKC,QAAQO,IAAI,2CAA6C0D,EAAOiD,GAC7E,EACAkF,aAAAA,CAAchC,EAAMlD,EAAI9C,GACvB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,6CAA+ClD,EAC7E9C,EAEF,EACAiI,WAAAA,CAAYC,GACX,OAAOvM,KAAKC,QAAQC,KAAK,2CAA4C,CAACqM,cACvE,EACAC,aAAAA,CAAcnC,EAAMkC,EAAYlI,GAC/B,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,6CAA+CkC,EAC7ElI,EAEF,EACAoI,aAAAA,CAAcF,GACb,OAAOvM,KAAKC,QAAQC,KAAK,6CAA8C,CAACqM,cACzE,EACAG,mBAAAA,CAAoBf,GACnB,OAAO3L,KAAKC,QAAQO,IAAI,mDAAqDmL,EAC9E,EACAgB,eAAAA,GACC,OAAO3M,KAAKC,QAAQO,IAAI,+CACzB,cChFc,CAIdA,GAAAA,CAAI8B,EAAesG,GAClB,OAAQ5I,KAAKC,QAAQC,KACpB,sCACE2I,mBAAmBvG,GACnB,IACAuG,mBAAmBD,GAEvB,EACAgE,gBAAAA,CAAiBvC,EAAM/H,EAAe+B,GACrC,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,mDAAqD/H,EACnF+B,EAEF,EACAwI,iBAAAA,GACC,OAAO7M,KAAKC,QAAQO,IAAI,oDACzB,EACAsM,kBAAAA,GACC,OAAO9M,KAAKC,QAAQO,IAAI,qDACzB,EACAuM,kBAAAA,GACC,OAAO/M,KAAKC,QAAQO,IAAI,qDACzB,EACAwD,OAAAA,GACC,OAAOhE,KAAKC,QAAQO,IAAI,qCACzB,EACAwM,aAAAA,GACC,OAAOhN,KAAKC,QAAQO,IAAI,gDACzB,EACAyM,kBAAAA,GACC,OAAOjN,KAAKC,QAAQO,IAAI,qDACzB,EACA0M,mBAAAA,GACC,OAAOlN,KAAKC,QAAQO,IAAI,sDACzB,EACA2M,WAAAA,GACC,OAAOnN,KAAKC,QAAQO,IAAI,8CACzB,EACA4M,cAAAA,GACC,OAAOpN,KAAKC,QAAQO,IAAI,iDACzB,EAGA6M,oBAAAA,CAAsB9K,EAAKxC,EAAQmE,GAClC,OAAOlE,KAAKC,QAAQO,IAAI,mDAAqD0D,EAAOiD,GACrF,EACAmG,SAAAA,CAAUC,GACT,OAAQvN,KAAKC,QAAQC,KAAK,6CAA8C,CAACqN,mBAC1E,EACAC,aAAAA,EAAclL,cAACA,EAAamL,cAAEA,EAAa7E,uBAAEA,EAAsB8E,oBAAEA,IACpE,OAAO1N,KAAKC,QAAQC,KAAK,4CACtBoC,EAAgB,IAChBmL,EAAgB,IAChB7E,EAAyB,IACzB8E,EAEJ,EACAC,aAAAA,EAAcrL,cAACA,EAAamL,cAAEA,EAAa7E,uBAAEA,EAAsB8E,oBAAEA,IACpE,OAAO1N,KAAKC,QAAQC,KAAK,4CACtBoC,EAAgB,IAChBmL,EAAgB,IAChB7E,EAAyB,IACzB8E,EAEJ,EACAE,YAAAA,CAAazG,GACZ,OAAOnH,KAAKC,QAAQO,IAAI,2CAA6C2G,EACtE,EACA0G,YAAAA,EAAavL,cAACA,EAAamL,cAAEA,EAAa7E,uBAAEA,EAAsB8E,oBAAEA,IACnE,OAAO1N,KAAKC,QAAQC,KAAK,2CACtBoC,EAAgB,IAChBmL,EAAgB,IAChB7E,EAAyB,IACzB8E,EAEJ,EACAI,uBAAAA,GACC,OAAO9N,KAAKC,QAAQO,IAAI,sDACzB,EAGAuN,qBAAAA,CAAuBxL,EAAKxC,EAAQmE,GACnC,OAAOlE,KAAKC,QAAQO,IAAI,wDAA0D0D,EAAOiD,GAC1F,GP3DA6G,OQ3Bc,CAIdC,YAAAA,CAAa5D,EAAMlD,EAAI9C,GACtB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,2CAA6ClD,EAC3E9C,EAEF,EACA6J,UAAAA,EAAW5L,cAACA,EAAamL,cAAEA,EAAa7E,uBAAEA,EAAsB8E,oBAAEA,IACjE,OAAO1N,KAAKC,QAAQC,KACnB,yCACEoC,EAAgB,IAChBmL,EAAgB,IAChB7E,EAAyB,IACzB8E,EAEJ,EACAS,YAAAA,CAAa9D,GAAM/H,cAACA,EAAamL,cAAEA,EAAa7E,uBAAEA,EAAsB8E,oBAAEA,GAAsBrJ,GAC/F,OAAOrE,KAAKC,QAAQC,KACnBmK,EACA,2CACE/H,EAAgB,IAChBmL,EAAgB,IAChB7E,EAAyB,IACzB8E,EACFrJ,EAEF,EACA+J,gBAAAA,CAAiB9L,GAChB,OAAOtC,KAAKC,QAAQO,IAAI,mDAAqD8B,EAC9E,EACA+L,cAAAA,CAAe/L,GACd,OAAOtC,KAAKC,QAAQO,IAAI,iDAAmD8B,EAC5E,EACAgM,gBAAAA,GACC,OAAOtO,KAAKC,QAAQO,IAAI,+CACzB,EACA+N,QAAAA,GACC,OAAOvO,KAAKC,QAAQO,IAAI,sCACzB,EAIAgO,UAAAA,CAAWrH,EAAI9C,GACd,OAAOrE,KAAKC,QAAQC,KAAK,yCAA2CiH,EACnE9C,EACA,CAACf,YAAa6D,GAEhB,EACAsH,YAAAA,CAAatH,EAAI9C,GAChB,OAAOrE,KAAKC,QAAQC,KAAK,2CAA6CiH,EACrE9C,EACA,CAACf,YAAa6D,GAEhB,EACAuH,cAAAA,GACC,OAAO1O,KAAKC,QAAQO,IAAI,6CACzB,GR9BAmO,QS5Bc,CACdnO,GAAAA,CAAI8B,EAAesG,GAClB,IAAIrG,EAAM,mCACPsG,mBAAmBvG,GACnB,IACAuG,mBAAmBD,GACtB,OAAO5I,KAAKC,QAAQC,KAAKqC,EAC1B,EACAqM,IAAAA,CAAKvE,EAAM/H,EAAesG,EAAwBvE,GACjD,IAAI9B,EAAM,oCACPsG,mBAAmBvG,GACnB,IACAuG,mBAAmBD,GACtB,OAAO5I,KAAKC,QAAQC,KAAKmK,EAAM9H,EAAK8B,EACrC,GTeAwK,KU7Bc,CACdC,aAAAA,CAAcvM,EAAKxC,EAAQmE,GAC1B,OAAOlE,KAAKC,QAAQO,IAAI,8CAAgD0D,EAAOiD,GAChF,EACA4H,YAAAA,CAAaC,GACZ,OAAOhP,KAAKC,QAAQO,IAAI,6CAA+CwO,EACxE,EACAC,kBAAAA,GACC,OAAOjP,KAAKC,QAAQO,IAAI,kDACzB,EACA0O,mBAAAA,CAAoB7K,GACnB,OAAOrE,KAAKC,QAAQC,KAAK,oDAAqDmE,EAC/E,EACA8K,eAAAA,CAAgB7J,GACf,OAAOtF,KAAKC,QAAQO,IAAI,gDAAkD8E,EAC3E,EACA8J,qBAAAA,CAAsB9J,EAAK+J,GAC1B,OAAOrP,KAAKC,QAAQO,IAAI,sDAAwD8E,EAAM,IAAM+J,EAC7F,EACAC,YAAAA,CAAahK,GACZ,OAAOtF,KAAKC,QAAQO,IAAI,6CAA+C8E,EACxE,EACAiK,gBAAAA,CAAiBpI,GAChB,OAAOnH,KAAKC,QAAQO,IAAI,iDAAmD2G,EAC5E,EACAqI,QAAAA,GACC,OAAOxP,KAAKC,QAAQO,IAAI,wCACzB,EACAiP,kBAAAA,CAAmBpL,GAClB,OAAQrE,KAAKC,QAAQC,KAAK,mDAAoDmE,EAC/E,EACAqL,WAAAA,CAAYrF,EAAMhG,GACjB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,+CAAiDhG,EAChF,EACAsL,cAAAA,CAAetF,EAAMlD,EAAI9C,GACxB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,+CAAiDlD,EAAK9C,EACrF,EACAuL,cAAAA,CAAezI,GACd,OAAOnH,KAAKC,QAAQC,KAAK,+CAAiDiH,EAC3E,GVTA0I,kBW9Bc,CAEdC,oBAAAA,CAAsBvN,EAAKxC,EAAQmE,GAClC,OAAOlE,KAAKC,QAAQO,IAAI,8DAAgE0D,EAAOiD,GAChG,EACA4I,uBAAAA,CAAwB1F,EAAMhG,GAC7B,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,iEAAkEhG,EAElG,EACA2L,qBAAAA,CAAsB7I,GACrB,OAAOnH,KAAKC,QAAQC,KAAK,+DAAgE,CAACiH,MAC3F,EACA8I,uBAAAA,CAAwB5F,EAAMhG,GAC7B,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,iEAAkEhG,EAElG,EACA6L,uBAAAA,CAAwB/I,GACvB,OAAOnH,KAAKC,QAAQC,KAAK,iEAAkE,CAACiH,MAC7F,EACAgJ,yBAAAA,GACC,OAAOnQ,KAAKC,QAAQO,IAAI,mEACzB,EACA4P,gBAAAA,GACC,OAAOpQ,KAAKC,QAAQO,IAAI,0DACzB,EACA6P,gBAAAA,GACC,OAAOrQ,KAAKC,QAAQO,IAAI,0DACzB,EACA8P,YAAAA,CAAahH,GACZ,OAAOtJ,KAAKC,QAAQC,KAAK,sDAAuD,CAACoJ,kBAClF,EACAiH,iBAAAA,CAAkBjH,GACjB,OAAOtJ,KAAKC,QAAQC,KAAK,2DAA4D,CAACoJ,kBACvF,EACAkH,cAAAA,CAAe7E,GACd,OAAO3L,KAAKC,QAAQO,IAAI,wDAA0DmL,EACnF,EACA8E,UAAAA,CAAW9E,GACV,OAAO3L,KAAKC,QAAQO,IAAI,oDAAsDmL,EAC/E,EACA6D,QAAAA,GACC,OAAOxP,KAAKC,QAAQO,IAAI,kDACzB,EACAkQ,qBAAAA,CAAsBC,GACrB,OAAO3Q,KAAKC,QAAQC,KAAK,+DAAgE,CAACyQ,QAE3F,GXfAC,OY/Bc,CACdC,IAAAA,GACC,OAAO7Q,KAAKC,QAAQO,IAAI,kCACzB,EACAsQ,cAAAA,CAAexO,EAAesG,GAC7B,IAAIrG,EAAM,6CAA+CsG,mBAAmBvG,GAI5E,OAHMsG,IACLrG,EAAMA,EAAM,IAAMsG,mBAAmBD,IAE/B5I,KAAKC,QAAQO,IAAI+B,EACzB,EACAwO,kBAAAA,CAAmBzO,EAAesG,GACjC,IAAIrG,EAAM,iDAAmDsG,mBAAmBvG,GAIhF,OAHMsG,IACLrG,EAAMA,EAAM,IAAMsG,mBAAmBD,IAE/B5I,KAAKC,QAAQO,IAAI+B,EACzB,EACAyO,iBAAAA,CAAkB1O,EAAesG,GAChC,IAAIrG,EAAM,gDAAkDsG,mBAAmBvG,GAI/E,OAHMsG,IACLrG,EAAMA,EAAM,IAAMsG,mBAAmBD,IAE/B5I,KAAKC,QAAQO,IAAI+B,EACzB,EACA0O,iBAAAA,EAAkBC,qBAACA,EAAoBC,YAAEA,EAAWvI,uBAAEA,EAAsBwI,KAAEA,EAAIC,8BAAEA,IACnF,OAAOrR,KAAKC,QAAQC,KACnB,+CACA,CACCgR,uBACAC,cACAvI,yBACAwI,QAED,CACC9N,YAAa+N,GAGhB,EACAC,iBAAAA,EAAkBJ,qBAACA,EAAoBC,YAAEA,EAAWvI,uBAAEA,EAAsByI,8BAAEA,IAC7E,OAAOrR,KAAKC,QAAQC,KACnB,+CACA,CACCgR,uBACAC,cACAvI,0BAED,CACCtF,YAAa+N,GAGhB,EACAE,gCAAAA,EAAiCL,qBAACA,EAAoBC,YAAEA,EAAWvI,uBAAEA,EAAsByI,8BAAEA,IAC5F,OAAOrR,KAAKC,QAAQC,KACnB,8DACA,CACCgR,uBACAC,cACAvI,0BAED,CACCtF,YAAa+N,GAGhB,EACAG,8BAAAA,EAA+BC,wCAACA,EAAuCC,eAAEA,IACxE,OAAO1R,KAAKC,QAAQC,KACnB,4DACA,CACCuR,2CAED,CACCnO,YAAaoO,GAGhB,EACAC,kBAAAA,CAAmBC,EAAQV,EAAsBtI,EAAwBiJ,GACxE,MAAM9R,EAAS8R,EAAsB,CAAChP,eAAe,GAAS,CAAA,EAC9D,OAAO7C,KAAKC,QAAQC,KAAK,gDACxB,CACC0R,OAAUA,EACVV,qBAAwBA,EACxBtI,uBAA0BA,GAE3B7I,EAEF,GZtDA+R,SahCc,CACdC,eAAAA,CAAiBxP,EAAKxC,EAAQmE,GAC7B,OAAOlE,KAAKC,QAAQO,IAAI,gDAAkD0D,EAAOiD,GAClF,EACA6K,mBAAAA,GACC,OAAOhS,KAAKC,QAAQO,IAAI,oDACzB,EACAyR,cAAAA,CAAe5H,EAAMhG,GACpB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,+CAAgDhG,EAChF,EACA6N,YAAAA,CAAaC,GACZ,OAAOnS,KAAKC,QAAQO,IAAI,6CAA+C2R,EACxE,EACAC,cAAAA,CAAe/H,EAAMhG,GACpB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,+CAAgDhG,EAChF,EACAgO,cAAAA,CAAeF,GACd,OAAOnS,KAAKC,QAAQC,KAAK,+CAAiDiS,EAC3E,EACAG,SAAAA,CAAUhJ,GACT,OAAOtJ,KAAKC,QAAQO,IAAI,0CAA4C8I,EACrE,EACA4F,mBAAAA,CAAoB7K,GACnB,OAAOrE,KAAKC,QAAQC,KAAK,oDAAqDmE,EAC/E,EACA+K,qBAAAA,CAAsB9J,GACrB,OAAOtF,KAAKC,QAAQO,IAAI,sDAAwD8E,EACjF,EACAiN,WAAAA,CAAYhQ,EAAKxC,EAAQmE,GACxB,OAAOlE,KAAKC,QAAQO,IAAI,4CAA8C0D,EAAOiD,GAC9E,EACAqL,WAAAA,CAAYjQ,EAAKxC,EAAQmE,GACxB,OAAOlE,KAAKC,QAAQO,IAAI,4CAA8C0D,EAAOiD,GAC9E,EACAsL,eAAAA,GACC,OAAOzS,KAAKC,QAAQO,IAAI,gDACzB,EACAkS,eAAAA,GACC,OAAO1S,KAAKC,QAAQO,IAAI,gDACzB,EACAmS,qBAAAA,CAAsBzO,GACrB,OAAOlE,KAAKC,QAAQC,KAAK,sDAAwDgE,EAAOiO,SAAUjO,EACnG,EACA0O,kBAAAA,CAAmB1O,GAClB,OAAOlE,KAAKC,QAAQC,KAAK,mDAAqDgE,EAAOiO,SAAUjO,EAChG,EACA2O,qBAAAA,CAAsB3O,GACrB,OAAOlE,KAAKC,QAAQC,KAAK,sDAAwDgE,EAAOiO,SAAUjO,EACnG,EACA4O,kBAAAA,CAAmB5O,GAClB,OAAOlE,KAAKC,QAAQC,KAAK,mDAAqDgE,EAAOiO,SAAUjO,EAChG,GblBA6O,OcjCc,CACdvJ,eAAAA,CAAgBzJ,EAAQ0J,GAWvB,OAVA1J,EAAO2J,QAAU,iCACjB3J,EAAO4J,WAAa,KACJ,CACdV,UAAWQ,EAAKG,WAAWX,WAAaQ,EAAKG,WAAWzG,IAAI0G,GAAKA,EAAEZ,aAIrElJ,EAAOkK,gBAAkB,CAAC1H,EAAKxC,EAAQmE,IAAWlE,KAAKC,QAAQC,KAAKqC,EAAK2B,EAAQnE,GACjFA,EAAOmK,aAAe,CAAC3H,EAAK2B,EAAQiG,IAAaA,EAAS9F,KAEnDtE,CACR,EACAiT,iBAAAA,GACC,OAAOhT,KAAKC,QAAQC,KAAK,+CAC1B,EACA+S,OAAAA,CAAQ5O,GACP,OAAOrE,KAAKC,QAAQC,KACnB,oCACAmE,EAEF,EACA6O,aAAAA,CAAc7O,GACb,OAAOrE,KAAKC,QAAQC,KACnB,0CACAmE,EAEF,EACA8O,MAAAA,CAAO9O,GACN,OAAOrE,KAAKC,QAAQC,KAAK,oCAAqCmE,EAC/D,EACAsG,QAAOyI,QAACA,EAAO9J,eAAEA,IAChB,OAAOtJ,KAAKC,QAAQC,KAAK,oCAAqC,CAACkT,UAAS9J,kBACzE,GdAA+J,UelCc,CACdC,sBAAAA,CAAuB/Q,EAAKxC,EAAQmE,GACnC,OAAOlE,KAAKC,QAAQO,IAAI,wDAA0D0D,EAAOiD,GAAK,IAAMjD,EAAOoF,eAC5G,EACAiK,oBAAAA,CAAqBhR,EAAKxC,EAAQmE,GACjC,OAAOlE,KAAKC,QAAQO,IAAI,sDAAwD0D,EAAOiD,GAAK,IAAMjD,EAAOoF,eAC1G,EACAkK,eAAAA,CAAgBtP,GACf,OAAOlE,KAAKC,QAAQC,KAAK,iDAAmDgE,EAAO5B,cAAgB,IAAM4B,EAAOuP,gBACjH,EACAC,eAAAA,CAAgBxP,GACf,OAAOlE,KAAKC,QAAQC,KAAK,iDACtBgE,EAAO5B,cAAgB,IACvB4B,EAAOuP,gBACX,EACAE,QAAAA,CAASP,GACR,OAAOpT,KAAKC,QAAQO,IAAI,0CAA4C4S,EACrE,EACAQ,WAAAA,GACC,OAAO5T,KAAKC,QAAQO,IAAI,6CACzB,EACAqT,UAAAA,CAAWT,EAAS/O,GACnB,OAAOrE,KAAKC,QAAQC,KAAK,4CAA8CkT,EACtE/O,EACF,EACAyP,UAAAA,CAAWV,GACV,OAAOpT,KAAKC,QAAQC,KAAK,4CAA8CkT,EACxE,EACAW,UAAAA,CAAWzR,EAAe+B,GACzB,OAAOrE,KAAKC,QAAQC,KAAK,gDAAkDoC,EAC1E+B,EACF,GfIA2P,WgBnCc,CACdC,eAAAA,CAAgB1R,EAAKxC,EAAQmE,GAC5B,OAAOlE,KAAKC,QAAQO,IAAI,oDAAsD0D,EAAOiD,GACtF,EACA+M,sBAAAA,CAAuB5R,GACtB,OAAOtC,KAAKC,QAAQO,IAAI,2DAA6D8B,EACtF,EACA6R,gBAAAA,GACC,OAAOnU,KAAKC,QAAQO,IAAI,qDACzB,EACA4T,gBAAAA,CAAiB9L,GAChB,OAAOtI,KAAKC,QAAQO,IAAI,qDAAuD8H,EAChF,EACA+L,WAAAA,CAAY/K,GACX,OAAOtJ,KAAKC,QAAQO,IAAI,gDAAkD8I,EAC3E,EACAgL,gBAAAA,CAAiBjK,EAAMhG,GACtB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,qDAAsDhG,EACtF,EACAkQ,cAAAA,CAAeC,GACd,OAAOxU,KAAKC,QAAQO,IAAI,mDAAqDgU,EAC9E,EACAC,cAAAA,CAAepK,EAAMhG,GACpB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAM,qDAAsDhG,EACtF,EACAqQ,gBAAAA,CAAiBF,GAChB,OAAOxU,KAAKC,QAAQC,KAAK,qDAAuDsU,EACjF,GhBSAG,aiBpCc,CACdC,UAAAA,CAAWrS,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,oDAAsD0D,EAAOiD,GACtF,EACA0N,gBAAAA,GACC,OAAO7U,KAAKC,QAAQO,IAAI,0DACzB,EACAsU,kBAAAA,GACC,OAAO9U,KAAKC,QAAQO,IAAI,4DACzB,EACAuU,gBAAAA,GACC,OAAO/U,KAAKC,QAAQO,IAAI,6DACzB,EACAwU,cAAAA,GACC,OAAOhV,KAAKC,QAAQO,IAAI,0DACzB,EACAyU,kBAAAA,GACC,OAAOjV,KAAKC,QAAQO,IAAI,4DACzB,EACA0U,SAAAA,CAAU/N,GACT,OAAOnH,KAAKC,QAAQO,IAAI,oDAAsD2G,EAC/E,EACAgO,WAAAA,CAAY9K,EAAMhG,GACjB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,sDAAuDhG,EACtF,EACA+Q,WAAAA,CAAY/K,EAAMhG,GACjB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,sDAAuDhG,EACtF,EACAgR,WAAAA,CAAYlO,GACX,OAAOnH,KAAKC,QAAQC,KAAK,sDAAwDiH,EAClF,GjBOAmO,WkBrCc,CACdC,aAAAA,CAAchT,EAAKxC,EAAQmE,GAE1B,OAAOlE,KAAKC,QAAQO,IAAI,gDACrB0D,EAAOiN,YAAc,IACrBjN,EAAO0D,WAAa,IACpB1D,EAAO2D,SAAW,IAClB3D,EAAOsR,uBAAyB,IAChCtR,EAAOuR,mBAEX,EACAX,kBAAAA,GACC,OAAO9U,KAAKC,QAAQO,IAAI,oDACzB,GlByBAkV,aAAAA,GACC,OAAO1V,KAAKC,QAAQO,IAAI,qCACzB,EACAmV,cAAAA,GACC,OAAO3V,KAAKC,QAAQO,IAAI,sCACzB,GmB3CDoV,EAAe,CACdC,UAAAA,CAAYtT,EAAKxC,EAAQmE,GACxB,OAAOlE,KAAKC,QAAQO,IAAI,gDAAkD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACpG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,4CACzB,EACAwV,WAAAA,CAAY3L,EAAMlD,EAAI8O,GACrB,OAAOjW,KAAKC,QAAQC,KAAKmK,EAAK,iDAAmDlD,EAChF8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,+CAAgD,CACxEiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,mDAAoD,CAC5EiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,iDAAkD,CAC1EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYlM,EAAM8L,EAAUF,GAC3B,OAAOjW,KAAKC,QAAQC,KAAKmK,EAAK,iDAAmD8L,EAChFF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,oDAAsDgW,EAC/E,EACAC,YAAAA,CAAatP,EAAImP,GAChB,OAAOtW,KAAKC,QAAQO,IAAI,kDACzB,GCvCDuI,EAAe,CACd8M,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,oDAAsD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACxG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,gDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,qDAAuDiH,EAC/E8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,mDAAoD,CAC5EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,uDAAwD,CAChFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,qDAAsD,CAC9EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,qDAAuDiW,EAC/EF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,wDAA0DgW,EACnF,GCpCDE,EAAe,CACdb,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,qDAAuD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACzG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,iDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,sDAAwDiH,EAChF8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,oDAAqD,CAC7EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,wDAAyD,CACjFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,sDAAuD,CAC/EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,sDAAwDiW,EAChFF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,yDAA2DgW,EACpF,GCpCDG,EAAe,CACdd,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,iDAAmD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACrG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,6CACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,kDAAoDiH,EAC5E8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,gDAAiD,CACzEiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,oDAAqD,CAC7EiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,kDAAmD,CAC3EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,kDAAoDiW,EAC5EF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,qDAAuDgW,EAChF,GCzBDI,EAAe,QACd5N,EACAD,aACA2N,cACAG,WCfc,CACdhB,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,oDAAsD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACxG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,gDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,qDAAuDiH,EAC/E8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,mDAAoD,CAC5EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,uDAAwD,CAChFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,qDAAsD,CAC9EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,qDAAuDiW,EAC/EF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,wDAA0DgW,EACnF,GDpBAM,WEhBc,CACdjB,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,oDAAsD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACxG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,gDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,qDAAuDiH,EAC/E8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,mDAAoD,CAC5EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,uDAAwD,CAChFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,qDAAsD,CAC9EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,qDAAuDiW,EAC/EF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,wDAA0DgW,EACnF,GFnBAO,YGjBc,CACdlB,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,qDAAuD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACzG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,iDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,sDAAwDiH,EAChF8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,oDAAqD,CAC7EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,wDAAyD,CACjFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,sDAAuD,CAC/EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,sDAAwDiW,EAChFF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,yDAA2DgW,EACpF,GHlBAG,UACAK,aInBc,CACdnB,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,sDAAwD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KAC1G,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,kDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,uDAAyDiH,EACjF8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,qDAAsD,CAC9EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,yDAA0D,CAClFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,uDAAwD,CAChFiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,uDAAyDiW,EACjFF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,0DAA4DgW,EACrF,GJhBAS,YKpBc,CACdpB,UAAAA,CAAWtT,EAAKxC,EAAQmE,GACvB,OAAOlE,KAAKC,QAAQO,IAAI,qDAAuD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KACzG,EACAC,MAAAA,GACC,OAAO/V,KAAKC,QAAQO,IAAI,iDACzB,EACAwV,WAAAA,CAAY7O,EAAI8O,GACf,OAAOjW,KAAKC,QAAQC,KAAK,sDAAwDiH,EAChF8O,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOnW,KAAKC,QAAQC,KAAK,oDAAqD,CAC7EiW,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOnW,KAAKC,QAAQC,KAAK,wDAAyD,CACjFiW,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAASnP,GAC9B,OAAOnH,KAAKC,QAAQC,KAAK,sDAAuD,CAC/EiW,WACAG,UACAnP,MAEF,EACAoP,WAAAA,CAAYJ,EAAUF,GACrB,OAAOjW,KAAKC,QAAQC,KAAK,sDAAwDiW,EAChFF,EAEF,EACAzF,cAAAA,CAAegG,GACd,OAAOxW,KAAKC,QAAQO,IAAI,yDAA2DgW,EACpF,IClCDU,EAAe,CACdlO,OCHc,CACdmO,oBAAAA,CAAqB5U,EAAKxC,EAAQmE,GACjC,OAAOlE,KAAKC,QAAQO,IAAI,uEAAyE0D,EAAO4R,KAAO,IAAM5R,EAAOiD,GAC7H,EACAiQ,oBAAAA,CAAqB/M,EAAMpB,EAAWgN,GACrC,OAAOjW,KAAKC,QAAQC,KAAKmK,EAAM,uEAC9BpB,EAAWgN,EAEb,EACAoB,kBAAAA,CAAmBC,GAClB,OAAOtX,KAAKC,QAAQC,KAAK,qEAAuEoX,EACjG,EACAC,oBAAAA,CAAqBlN,EAAMiN,EAAyBrB,GACnD,OAAOjW,KAAKC,QAAQC,KAAKmK,EAAM,uEAAyEiN,EACvGrB,EACF,EACAuB,oBAAAA,CAAqBF,GACpB,OAAOtX,KAAKC,QAAQC,KAAK,uEAAyEoX,EACnG,EACAG,sBAAAA,GACC,OAAOzX,KAAKC,QAAQO,IAAI,yEACzB,EACAkX,iBAAAA,CAAkBlT,GACjB,OAAOxE,KAAKC,QAAQO,IAAI,oEAAsEgE,EAC/F,ICxBDmT,EAAe,CACdC,wBAAAA,CAAyB3O,EAAW4O,GAEnC,IACC,MAAMjX,EAAU,CAACqI,YAAW6O,OAAQD,GAC9BtV,EAAM,oEACZ,OAAOvC,KAAKC,QAAQC,KAAKqC,EAAK3B,EAAS,KACxC,CAAE,MAAO2J,GACR,MAAMA,CACP,CAED,EACAwN,YAAAA,CAAanX,EAASoX,EAAO,IAE5B,IACC,MAAMzV,EAAMyV,EAAO,wDACnB,OAAOC,MAAM/X,KAAKqC,EAAK3B,EACxB,CAAE,MAAO2J,GACR,MAAMA,CACP,CAED,GCrBD2N,EAAe,CACbC,YAAAA,CAAaC,GACb,OAAOpY,KAAKC,QAAQO,IACV+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,iCACT,CAAEkC,WAAYyQ,GAEhB,EACAC,QAAAA,CAASC,EAAOC,EAAKC,EAAKC,EAAKC,EAAiB,GAC/C,OAAO1Y,KAAKC,QAAQO,IACnB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,gCACA,CAAE6S,QAAOC,MAAKC,MAAKC,MAAKC,kBAE1B,EACAC,YAAAA,GACC,OAAO3Y,KAAKC,QAAQO,IACnB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,gCAEF,GCvBDmT,EAAe,CACXC,OAAAA,CAAQC,EAAYC,EAAQ,KAAMC,EAAQ,KAAMC,EAAS,MACrD,OAAOjZ,KAAKC,QAAQO,IACzB,+BACA,CACCsY,WAAYA,KACRC,EAAQ,CAACA,WAAS,MAClBC,EAAQ,CAACA,WAAS,MAClBC,EAAS,CAACA,YAAU,CAAA,GAGxB,EAEHC,OAAAA,CAAQC,EAAO,EAAGC,EAAY,GAAIJ,GACjC,OAAOhZ,KAAKC,QAAQO,IACnB,+BACA,CACC2Y,OACAC,YACAJ,WAGH,EAEAK,IAAAA,CAAKC,GACJ,OAAOtZ,KAAKC,QAAQO,IACnB,4BACA,CACC8Y,MAAOA,GAGV,EACAC,gBAAiB,WAChB,OAAOvZ,KAAKC,QAAQO,IACnB,uCACA,CAAA,EAEF,EACAgZ,aAAc,WACb,OAAOxZ,KAAKC,QAAQO,IACnB,iDACA,CAAA,EAEF,GC3CDiZ,EAAe,CACXC,gBAAAA,CAAiBxR,GACX,OAAOlI,KAAKC,QAAQO,IAChB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCACA,CAAEyC,eAAgBA,GAE1B,EACLyR,SAAAA,CAAU/Q,EAAwBsI,GACjC,OAAOlR,KAAKC,QAAQO,IACnB,6BAA6BoI,KAA0BsI,IACrD,GAEJ,EACA0I,oBAAAA,CAAqB1I,GACpB,OAAOlR,KAAKC,QAAQO,IACnB,qCAAqC0Q,IACnC,GAEJ,GCpBD2I,EAAe,CACXC,SAAAA,CAAUC,EAAMnR,GACZ,OAAO5I,KAAKC,QAAQO,IAChB+E,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,qCAAqCsU,KAAQnR,IAC7C,CAAA,EAER,GCNJoR,EAAe,CACdhR,OCHc,CACbiR,WAAAA,CAAY1X,EAAKxC,EAAQmE,GACxB,OAAOlE,KAAKC,QAAQO,IAAI,iDAAmD0D,EAAOiD,GAAK,IAAMjD,EAAO4R,KAAO,IAAM5R,EAAOgW,KAAO,IAAMhW,EAAOiV,KAC7I,EACAgB,WAAAA,GACC,OAAOna,KAAKC,QAAQO,IAAI,iDACzB,EACA4Z,sBAAAA,GACC,OAAOpa,KAAKC,QAAQO,IAAI,4DACzB,EACA6Z,oBAAAA,CAAqBnW,GACpB,OAAOlE,KAAKC,QAAQO,IAAI,0DAA4D0D,EAAOiD,GAAK,IAAMjD,EAAOoS,QAC9G,EACAgE,oBAAAA,CAAqBpW,GACpB,OAAOlE,KAAKC,QAAQO,IAAI,0DAA4D0D,EAAOiD,GAAK,IAAMjD,EAAOoS,QAC9G,EACAiE,WAAAA,CAAYrW,GACX,OAAOlE,KAAKC,QAAQO,IAAI,iDAAkD0D,EAAOiD,GAAK,IAAMjD,EAAOoS,QACpG,EACAP,MAAAA,CAAO7R,GACN,OAAOlE,KAAKC,QAAQO,IAAI,4CAA6C0D,EAAOiD,GAAK,IAAMjD,EAAOoS,QAC/F,EACAkE,cAAAA,CAAeC,GACd,OAAOza,KAAKC,QAAQO,IAAI,oDAAsDia,EAC/E,EACAC,yBAAAA,CAA0BxW,GACzB,OAAOlE,KAAKC,QAAQO,IAAI,+DAAiE0D,EAAOiD,GAAK,IAAMjD,EAAOoS,QACnH,EACAqE,cAAAA,CAAezW,EAAQG,GACtB,OAAOrE,KAAKC,QAAQC,KAAK,oDAAsDgE,EAAOiD,GAAK,IAAMjD,EAAOoS,QACvGjS,EACF,EACAuW,YAAAA,CAAaC,GACZ,OAAO7a,KAAKC,QAAQO,IAAI,kDAAoDqa,EAC7E,EACAC,2BAAAA,CAA4BzQ,EAAMlD,EAAI9C,GACrC,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,iDAAmDlD,EAChF9C,EACF,EACA0W,WAAAA,CAAY5T,EAAI9C,GACf,OAAOrE,KAAKC,QAAQC,KAAK,iDAAmDiH,EAC3E9C,EACF,EACA2W,aAAAA,CAAcH,GACb,OAAO7a,KAAKC,QAAQC,KAAK,mDAAqD2a,EAC/E,IC7CFI,EAAe,CACdd,WAAAA,GACC,OAAOna,KAAKC,QAAQO,IAAI,iDACzB,EACA0a,yBAAAA,GACC,OAAOlb,KAAKC,QAAQO,IAAI,+DACzB,GCND2a,EAAe,CAEdrG,mBAAoB,WACnB,OAAO9U,KAAKC,QAAQO,IACnB,uCACA,CAAA,EAEF,EAEA4a,sBAAuB,SAAUxY,OAAgBJ,EAAW6Y,OAAY7Y,EAAW6M,OAAS7M,EAAW8Y,OAAY9Y,GAClH,OAAOxC,KAAKC,QAAQO,IACnB,iDACA,CAACoC,kBAAiByY,cAAahM,WAAUiM,eAE3C,EAEAC,mCAAoC,SAAU3Y,GAC7C,OAAO5C,KAAKC,QAAQO,IACnB,+DAA+DoC,IAC/D,GAEF,EACA4Y,2BAA4B,SAAUH,EAAazY,GAClD,OAAO5C,KAAKC,QAAQO,IACnB,sDACA,CACC6a,cACAzY,mBAGH,EACA6Y,4BAA6B,SAAU7Y,EAAiBmX,GACvD,OAAO/Z,KAAKC,QAAQO,IACnB,uDAAuDoC,KAAmBmX,IAC1E,GAGF,EACA2B,qBAAsB,SAAU9S,EAAwBmR,GACvD,OAAO/Z,KAAKC,QAAQO,IACnB,iDAAiDoI,KAA0BmR,IAC3E,GAGF,GCCD4B,EAAe,CACX9b,iBACA+b,EACA7a,aACA8a,UCjDW,CACd,iBAAMC,GAEL,OAAO9b,KAAKC,QAAQO,IADR,0CACiB,KAAM,KACpC,UD8CG2I,EACAjH,aACAkD,SACAgB,eACAqB,SACAsU,SEvDW,CAEXC,aAAc,WACZ,OAAOhc,KAAKC,QAAQO,IAClB,yCACC,CAAA,EAEL,EAEAmK,OAAQ,SAAUsR,GAChB,OAAOjc,KAAKC,QAAQO,IAClB,oCAAoCyb,IACnC,GAEL,EAEH9I,OAAQ,UAAU8I,YAAEA,EAAW1Z,IAAEA,EAAG2Z,MAAEA,EAAKC,IAAEA,EAAI,OAChD,OAAOnc,KAAKC,QAAQC,KACnB,oCAAoC+b,IAClC,CACD1Z,IAAKA,EACL2Z,MAAOA,GAGV,EAEG1R,OAAQ,UAAUjI,IAACA,EAAG2Z,MAAEA,EAAKC,IAAEA,IAC7B,OAAOnc,KAAKC,QAAQC,KAClB,mCACC,CACCqC,IAAKA,EACL2Z,MAAOA,EACPC,IAAKA,GAGX,GFqBA5T,MACAqO,QACAM,iBACAS,cACAyE,OG5DW,CAEXC,KAAM,WACF,OAAOrc,KAAKC,QAAQO,IACpB,+BAA+B,CAAA,EACnC,EAEA8b,IAAK,WACD,OAAOtc,KAAKC,QAAQO,IACpB,8BAA8B,CAAA,EAClC,EAEA+b,QAAS,SAAUC,GACf,OAAOxc,KAAKC,QAAQO,IACpB,mCAAmCgc,IAAW,GAClD,GH8CAtE,MACAU,MACAa,QACAI,SACAG,WACAiB,WACApB,SACHwB,YIpEc,CACdoB,uBAAwB,WACvB,OAAOzc,KAAKC,QAAQO,IACnB,+CACA,CAAA,EAEF,EACAkc,mBAAoB,SAAUpT,GAC7B,OAAOtJ,KAAKC,QAAQO,IACnB,iEACA,CACC8I,eAAkBA,GAGrB,GJuDAqT,KKrEc,CACdzb,QAAS,WACR,OAAOlB,KAAKC,QAAQO,IACnB,mCACA,CAAA,EAEF,GLgEAoc,SMrEc,CACdC,UAAAA,GACC,OAAO7c,KAAKC,QAAQO,IACnB,uCACA,CAAA,EAEF,EACAsc,WAAAA,GACC,OAAO9c,KAAKC,QAAQO,IACnB,wCACA,CAAA,EAEF,GN0DAuc,UOrEc,CACd/T,OCHc,CACdgU,eAAAA,CAAgBza,EAAKxC,EAAQmE,GAC5B,OAAOlE,KAAKC,QAAQO,IAAI,uDAAyD0D,EAAO+E,UACzF,EACAgU,0BAAAA,CAA2B1a,EAAKxC,EAAQmE,GACvC,OAAOlE,KAAKC,QAAQO,IAAI,kEAAoE0D,EAAO+E,UACpG,EACAiU,uBAAAA,CAAwB3a,EAAKxC,EAAQmE,GACpC,OAAOlE,KAAKC,QAAQO,IAAI,+DAAiE0D,EAAO+E,UAAY,IAAM/E,EAAOiZ,WAC1H,EACAC,2BAAAA,CAA4BnU,GAC3B,OAAOjJ,KAAKC,QAAQO,IAAI,kEAAoEyI,EAC7F,EACAoU,kBAAAA,CAAmB9a,EAAKxC,EAAQmE,GAC/B,OAAOlE,KAAKC,QAAQO,IAAI,0DAA4D0D,EAAOiZ,WAC5F,EACAG,mBAAAA,GACC,OAAOtd,KAAKC,QAAQO,IAAI,2DACzB,EACA+c,mBAAAA,GACC,OAAOvd,KAAKC,QAAQO,IAAI,2DACzB,EACAgd,cAAAA,CAAenT,EAAMhG,GACpB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,sDAAuDhG,EACtF,EACAoZ,YAAAA,CAAaN,GACZ,OAAOnd,KAAKC,QAAQC,KAAK,oDAAsDid,EAChF,EACAO,cAAAA,CAAerT,EAAMhG,GACpB,OAAOrE,KAAKC,QAAQC,KAAKmK,EAAK,sDAAuDhG,EACtF,EACAsZ,cAAAA,CAAeR,GACd,OAAOnd,KAAKC,QAAQC,KAAK,sDAAwDid,EAClF,EACAS,kBAAAA,CAAmB1Z,GAClB,OAAOlE,KAAKC,QAAQC,KAAK,0DAA4DgE,EAAOiZ,WAAYjZ,EACzG,EACA2Z,oBAAAA,CAAqBxT,EAAMnG,GAC1B,OAAOlE,KAAKC,QAAQC,KAAKmK,EAAK,4DAA8DnG,EAAOiZ,WAAYjZ,EAChH,EACA4Z,oBAAAA,CAAqBzT,EAAMnG,GAC1B,OAAOlE,KAAKC,QAAQC,KAAKmK,EAAK,4DAA8DnG,EAAOiZ,WAAYjZ,EAChH,EACA6Z,oBAAAA,CAAqB7Z,GACpB,OAAOlE,KAAKC,QAAQC,KAAK,4DAA8DgE,EAAOiZ,WAAYjZ,EAC3G,EACA8Z,iBAAAA,CAAkB9Z,GACjB,OAAOlE,KAAKC,QAAQC,KAAK,yDAA2DgE,EAAOiZ,WAAYjZ,EACxG,EACA+Z,eAAAA,CAAgB/Z,GACf,OAAOlE,KAAKC,QAAQC,KAAK,uDAAyDgE,EAAOiZ,WAAYjZ,EACtG,EACAsM,cAAAA,CAAetM,GACd,OAAOlE,KAAKC,QAAQC,KAAK,sDAC1B,EACAc,SAAAA,CAAUiI,GACT,OAAOjJ,KAAKC,QAAQC,KAAK,iDAAmD+I,EAC7E,EACAiV,kBAAAA,CAAmBjV,GAClB,OAAOjJ,KAAKC,QAAQC,KAAK,0DAA4D+I,EACtF,EACAkV,aAAAA,CAAcC,GACb,OAAOpe,KAAKC,QAAQC,KAAK,qDAAuDke,EACjF,EACAC,iBAAAA,CAAkBpV,GACjB,OAAOjJ,KAAKC,QAAQO,IAAI,yDAA2DyI,EACpF,GD9DAqV,mBAAAA,GACC,OAAOte,KAAKC,QAAQO,IAAI,iDACzB,GPkEA2a,UACAxa,SSxDc,CACd4d,MAAAA,GACC,OAAOve,KAAKC,QAAQO,IAAI,gCACzB,ICbDge,EAAe,CACdC,QAASA,CAACC,EAAKC,KACd,GAAID,EAAI3e,OAAO6e,iBAAiB3e,QAO/B,YALI0e,GAASE,UACZC,QAAQC,KAAK,0BACbL,EAAI3e,OAAO6e,iBAAiB3e,QAAQ4e,QAAQG,aAAaL,EAAQE,WAMnE,SAASI,EAAY5U,EAAM6U,EAAK7a,EAAMtE,GACrC,GAAmB,iBAARsK,QAA+B7H,IAAXzC,GAC7Bmf,EAAK7a,EAAMtE,GAAU,CAACsK,EAAM6U,EAAK7a,GAClCgG,OAAO7H,OACD,GAAI6H,EAAM,CAChB,GAAmB,iBAARA,EACV,MAAM,IAAI8U,UAAU,iEACT3c,IAAR0c,QAA8B1c,IAAT6B,QAAiC7B,IAAXzC,IAC9CA,EAASsK,EACTA,OAAO7H,EAET,CACA,GAAI6H,EAAM,CAET,IAAKA,EAAK+U,kBAAoB/U,EAAKgV,YAClC,MAAM,IAAIF,UAAU,kCAErB9U,EAAO,CACN+U,gBAAiB/U,EAAK+U,gBACtBC,YAAahV,EAAKgV,aAGftf,EACHA,EAAOsK,KAAOA,EAEdtK,EAAS,CAACsK,OACZ,CAEA,MAAO,CAAC6U,EAAK7a,EAAMtE,EACpB,CAEA,SAASuf,EAAoBnV,GAC5B,MAAMoV,EAASpV,EAAS9F,KAMxB,cALO8F,EAAS9F,KACXkb,EAAOC,KAGXD,EAAOC,KAAKrV,SAAWA,EAFvBoV,EAAOC,KAAO,CAACrV,YAGToV,CACR,CACgBha,2BAA2BC,SAAWD,2BAA2BE,UACjF,MAAMga,EAAcxH,MAAMxV,OAAO,CAChCiC,QAAS,IACTgb,QAASna,2BAA2BC,SAAWD,2BAA2BE,UAAY,MAGvFga,EAAYE,aAAaC,QAAQC,IAAI9f,IACpC,GAAqB,QAAjBA,EAAO+f,SAAqB/f,EAAOsE,KACtC,OAAOtE,EAER,GAAIA,EAAOsE,gBAAgB0b,SAC1B,OAAOhgB,EAER,IAAKigB,OAAOC,OAAOlgB,EAAOsE,MAAM6b,MAAMC,KACjCA,aAAgBC,aAEhBrd,MAAMC,QAAQmd,IACVA,EAAKD,MAAMG,KAAOA,aAAaC,SAEpC,CACH,MAAMC,EAAUP,OAAOQ,QAAQzgB,EAAOsE,MAAMoc,OAAO,CAACC,GAAKC,EAAKR,MAC7D,GAAIA,aAAgBC,SACnB,IAAK,MAAMQ,KAAQT,EAClBO,EAAGX,SAASc,OAAOF,GAAOR,EAAKW,OAAS,EAAI,KAAO,IAAKF,QAC/C7d,MAAMC,QAAQmd,GACpBA,EAAKD,MAAMG,KAAOA,aAAaC,OAClCI,EAAGK,SAASJ,GAAOR,EAEnBA,EAAKa,QAAQJ,GAAQF,EAAGX,SAASc,OAAOF,GAAOR,EAAKW,OAAS,EAAI,KAAO,IAAKF,IAG9EF,EAAGK,SAASJ,GAAOR,EAEpB,OAAOO,GACL,CACFX,SAAU,IAAIA,SACdgB,SAAU,CAAA,IAEXR,EAAQR,SAASc,OAAO,YAAaI,KAAKC,UAAUX,EAAQQ,WAC5DhhB,EAAOsE,KAAOkc,EAAQR,QACvB,CAEA,OAAOhgB,IAGR0f,EAAYE,aAAaxV,SAAS0V,IAAI1V,IACC,OAAlCA,EAASpK,QAAQ8C,gBACkB,IAAnCsH,EAASpK,QAAQ8C,eACiB,QAAlCsH,EAASpK,QAAQ8C,eAIjBsH,EAAS9F,KAAK8c,SACjBhX,EAAS9F,KAAK8c,OAAShX,EAAS9F,KAAK8c,OAAOhY,OAC3CiY,IAAQjX,EAASpK,OAAOqhB,EAAItL,KAAO,iBAAmB4I,EAAI3e,OAAO6e,iBAAiB3e,QAAQohB,sBAAsBD,EAAItL,OAAOsL,EAAKjX,EAASpK,UALnIuf,EAAoBnV,IAS1BI,GACgB,gBAAdA,EAAM+W,KACFre,QAAQ4B,OAAO,CAAK0c,SAAS,KAAUhX,IAEZ,OAA/BA,EAAMxK,QAAQ8C,gBACkB,IAAhC0H,EAAMxK,QAAQ8C,eACiB,WAA/B0H,EAAMxK,QAAQ8C,cACVI,QAAQ4B,OAAO0F,GAEnBA,EAAMJ,SACoB,KAAzBI,EAAMJ,SAAS6D,QAClB0Q,EAAI3e,OAAO6e,iBAAiB4C,UAAUC,aAAa,QAASlX,EAAMmX,QAASnX,EAAMqV,QAAQ+B,aAAa,GAC/F1e,QAAQ4B,OAAO,CAAK0c,SAAS,KAAUhX,MAI/CA,EAAMJ,SAAS9F,KAAK8c,OAAS5W,EAAMJ,SAAS9F,KAAK8c,OAAOhY,OACvDiY,IAAQ7W,EAAMxK,OAAOqhB,EAAItL,KAAO,iBAAmB4I,EAAI3e,OAAO6e,iBAAiB3e,QAAQohB,sBAAsBD,EAAItL,OAAOsL,EAAK7W,EAAMxK,SAE/HwK,EAAMJ,SAAS9F,KAAK8c,OAAOL,OAU1B7d,QAAQ4B,OAAO0F,GATbtH,QAAQ4B,OAAO,CAAK0c,SAAS,KAAUhX,KACrCA,EAAMqV,SAChBlB,EAAI3e,OAAO6e,iBAAiB4C,UAAUC,aAAa,QAASlX,EAAMmX,QAASnX,EAAMqV,QAAQ+B,aAClF1e,QAAQ4B,OAAO,CAAK0c,SAAS,KAAUhX,MAE9CmU,EAAI3e,OAAO6e,iBAAiB4C,UAAUI,WAAWrX,EAAMmX,SAChDze,QAAQ4B,OAAO,CAAK0c,SAAS,KAAUhX,MAMhDmU,EAAI3e,OAAO6e,iBAAiB3e,QAAU,CACrC6I,OAAOvG,IACNuc,QAAQC,KAAK,0DACNU,EAAY3W,OAAO,CAACvG,SAE5B/B,IAAGA,CAAC6J,EAAM6U,EAAKhb,EAAQnE,KACtB+e,QAAQC,KAAK,qDACZG,EAAKhb,EAAQnE,GAAUkf,EAAY5U,EAAM6U,EAAKhb,EAAQnE,GACnDmE,IACCnE,EACHA,EAAOmE,OAASA,EAEhBnE,EAAS,CAACmE,WAELub,EAAYjf,IAAI0e,EAAKnf,IAE7BG,KAAIA,CAACmK,EAAM6U,EAAK7a,EAAMtE,KACrB+e,QAAQC,KAAK,uDACZG,EAAK7a,EAAMtE,GAAUkf,EAAY5U,EAAM6U,EAAK7a,EAAMtE,GAC5C0f,EAAYvf,KAAKgf,EAAK7a,EAAMtE,IAEpCshB,sBAAuB,CACtBQ,UAAAA,CAAWtX,EAAOxK,GACjB,MAAMyhB,EAAY9C,EAAI3e,OAAO6e,iBAAiB4C,UAE9C,OAAIzhB,GAAQsK,MACXtK,EAAOsK,KAAK+U,kBACZrf,EAAOsK,KAAKgV,aAAY,EAAO9U,EAAMyP,WAC9B,GAEJjX,MAAMC,QAAQuH,EAAMyP,WACvBzP,EAAMyP,SAASgH,QAAQQ,EAAUI,aAC1B,GAC4B,iBAAlBrX,EAAMyP,WACnBja,GAAQuD,YACX0c,OAAOC,OAAO1V,EAAMyP,UAAUgH,QAC7Brb,GAAS6b,EAAUC,aAClB,QACA1e,MAAMC,QAAQjD,EAAOuD,aAAeob,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAEC,MAAM,KAAMjiB,EAAOuD,aAAevD,EAAOuD,YAC9GqC,GACA,IAIFqa,OAAOQ,QAAQjW,EAAMyP,UAAUgH,QAC9B,EAAEL,EAAKhb,KAAW6b,EAAUC,aAAa,QAASd,EAAKhb,GAAO,KAEzD,EAGT,EACAsc,OAAAA,CAAQ1X,EAAOxK,GACd,MAAMyhB,EAAY9C,EAAI3e,OAAO6e,iBAAiB4C,UAE1CzhB,GAAQsK,KACXtK,EAAOsK,KAAKgV,aAAY,EAAO9U,EAAMmX,SAC7B3hB,GAAQuD,YAChBke,EAAUC,aACT,QACA1e,MAAMC,QAAQjD,EAAOuD,aAAeob,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAEC,MAAM,KAAMjiB,EAAOuD,aAAevD,EAAOuD,YAC9GiH,EAAMmX,SACN,GAGDF,EAAUI,WAAWrX,EAAMmX,QAC7B,EACAQ,GAAAA,CAAI3X,GACH,MAAMiX,EAAY9C,EAAI3e,OAAO6e,iBAAiB4C,UAE9C,IAAIE,EAAU,GAYd,OAXAA,GAAW,YAAcnX,EAAMmX,QAAU,OACzCA,GAAW,aAAenX,EAAM4X,SAAW,KAC3CT,GAAW,gBAAkBnX,EAAM6X,KAAO,KACtC7X,EAAM8X,WAAa9X,EAAM8X,UAAUvB,SACtCY,GAAW,gBACXnX,EAAM8X,UAAUrB,QAAQI,IACvBM,GAAW,aAAeN,EAAIR,KAAO,KACrCc,GAAW,WAAaN,EAAIgB,KAAO,KACnCV,GAAW,eAAiBN,EAAIkB,SAAW,QAGrC/X,EAAMgY,UACb,IAAK,UACL,IAAK,eACL,IAAK,kBACL,IAAK,eACJf,EAAUC,aAAa,OAAQ,OAASlX,EAAMgY,SAAUb,GAAS,GACjE,MACD,IAAK,SACL,IAAK,cACL,IAAK,iBACJF,EAAUC,aAAa,OAAQ,OAASlX,EAAMgY,SAAUb,GAAS,GACjE,MACD,QACCA,EAAU,aAAenX,EAAMgY,SAAW,OAASb,EACnDF,EAAUgB,iBAAiBd,GAG9B,EACAe,SAAAA,CAAUlY,GACT,MAAMiX,EAAY9C,EAAI3e,OAAO6e,iBAAiB4C,UAE9C,IAAIE,EAAU,GACdA,GAAW,SAAWnX,EAAMmY,MAAQ,OACpChB,GAAW,YAAcnX,EAAMmX,QAAU,OACzCA,GAAW,aAAenX,EAAM4X,SAAW,KAC3CT,GAAW,gBAAkBnX,EAAM6X,KAAO,KACtC7X,EAAM8X,WAAa9X,EAAM8X,UAAUvB,SACtCY,GAAW,gBACXnX,EAAM8X,UAAUrB,QAAQI,IACvBM,GAAW,aAAeN,EAAIR,KAAO,KACrCc,GAAW,WAAaN,EAAIgB,KAAO,KACnCV,GAAW,eAAiBN,EAAIkB,SAAW,QAG7Cd,EAAUgB,iBAAiBd,EAC5B,EACAiB,EAAAA,CAAGpY,GACF,MAAMiX,EAAY9C,EAAI3e,OAAO6e,iBAAiB4C,UAE9C,IAAIE,EAAU,QACQlf,IAAlB+H,EAAMqY,UACTlB,GAAWnX,EAAMqY,QAAU,aACTpgB,IAAf+H,EAAM+W,OACTI,GAAW,SAAWnX,EAAM+W,KAAO,aAClB9e,IAAd+H,EAAMsY,MACTnB,GAAW,QAAUnX,EAAMsY,IAAM,aACZrgB,IAAlB+H,EAAMmX,QACTA,GAAW,YAAcnX,EAAMmX,QAAU,YACdlf,IAAnB+H,EAAMyP,WACd0H,GAAW,aAAenX,EAAMyP,SAAS8I,KAAK,QAAU,aAClCtgB,IAAnB+H,EAAM4X,WACTT,GAAW,aAAenX,EAAM4X,SAAW,WACzB3f,IAAf+H,EAAM6X,OACTV,GAAW,gBAAkBnX,EAAM6X,KAAO,MAE3CZ,EAAUgB,iBAAiBd,EAC5B,EACAqB,IAAAA,CAAKxY,EAAOxK,GACX,MAAMyhB,EAAY9C,EAAI3e,OAAO6e,iBAAiB4C,UAE9C,IAAIE,EAAU,GACdA,GAAW,oBAAsBnX,EAAMyY,WAAa,KACpDtB,GAAW,gBAAkBnX,EAAMuV,OAAS,KAC5C4B,GAAW,yBAA2BnX,EAAM0Y,qBACxCljB,GAAQuD,YACXke,EAAUC,aACT,QACA1e,MAAMC,QAAQjD,EAAOuD,aAAeob,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAEC,MAAM,KAAMjiB,EAAOuD,aAAevD,EAAOuD,YAC9GiH,EAAMmX,SACN,GAGDF,EAAUC,aAAa,QAASlX,EAAMmX,QAASA,EACjD,IAKF,MAAMwB,EACLC,WAAAA,CAAYC,EAAaC,QACX7gB,IAAT6gB,GACHrjB,KAAKC,QAAU,CACd6I,OAAOvG,IACNuc,QAAQC,KAAK,kCACNL,EAAI3e,OAAO6e,iBAAiB3e,QAAQ6I,OAAOvG,IAEnD/B,IAAGA,CAAC6J,EAAM6U,EAAKhb,EAAQnE,KACtB+e,QAAQC,KAAK,kCACNL,EAAI3e,OAAO6e,iBAAiB3e,QAAQO,IAAI6J,EAAM6U,EAAKhb,EAAQnE,IAEnEG,KAAIA,CAACmK,EAAM6U,EAAK7a,EAAMtE,KACrB+e,QAAQC,KAAK,kCACNL,EAAI3e,OAAO6e,iBAAiB3e,QAAQC,KAAKmK,EAAM6U,EAAK7a,EAAMtE,KAGnEigB,OAAOsD,eAAetjB,KAAKC,QAAS,UAAW,CAC9CO,IAAGA,KACFse,QAAQC,KAAK,kCACNL,EAAI3e,OAAO6e,iBAAiB3e,QAAQ4e,WAG7CH,EAAI3e,OAAO6e,iBAAiB3e,QAAQ4e,QAAU7e,MAE9CggB,OAAOsD,eAAetjB,KAAM,UAAW,CACtCQ,GAAAA,GACC,OAAQ6iB,GAAQrjB,MAAMC,OACvB,IAIFD,KAAKgf,aAAaoE,GAAa,EAChC,CAEApE,YAAAA,CAAaoE,EAAaG,GACzBvD,OAAOwD,KAAKJ,GAAapC,QAAQL,IAChCX,OAAOsD,eAAetjB,KAAM2gB,EAAK,CAChCngB,GAAAA,GACC,MAA+B,mBAApB4iB,EAAYzC,GACfyC,EAAYzC,GAAK8C,KAAKzjB,MACvB,IAAIkjB,EAAqBE,EAAYzC,GAAM3gB,KAAKC,QAAQ4e,QAChE,MAGG0E,GAAQzE,QAAQC,KAAK,gDAC3B,EAGD,MAAMF,EAAU,IAAIqE,EAAqBvH,GACrCgD,GAASE,UACZC,QAAQC,KAAK,0BACbF,EAAQG,aAAaL,EAAQE,UAG9BH,EAAI3e,OAAO6e,iBAAiB3e,QAAQ4e,QAAUA,EAG9CH,EAAIgF,QAAQ,UAAWhF,EAAI3e,OAAO6e,iBAAiB3e,WCtVrD,MASM0jB,EAAyB,QACzBC,EAA0B,SASnBC,EAAiB,CAS7BrjB,IAAK,SAASsjB,EAAOC,EAAcC,EAAkB,MACpD,OAAOH,EAAeI,WAAWH,EAAOC,EAhBd,MAgBiDC,EAC5E,EAOA9jB,KAAM,SAAS4jB,EAAOC,EAAcC,EAAkB,MACrD,OAAOH,EAAeI,WAAWH,EAAOC,EAxBb,OAwBiDC,EAC7E,EAKAE,UAAW,SAAS/Z,GAEnB,QAAwB,iBAAbA,IAAyBA,EAASga,eAAeR,KACxDxZ,EAASga,eAAeP,IAzCG,GAyCyBzZ,EAASI,MAMlE,EAKA6Z,QAAS,SAASja,GACjB,OAAQ0Z,EAAeK,UAAU/Z,EAClC,EAKAka,QAAS,SAASla,GAEjB,SAAI0Z,EAAeK,UAAU/Z,MAEsB,iBAAtCA,EAASyZ,IAAyC5D,OAAOwD,KAAKrZ,EAASyZ,IAA0B9C,OAAS,GACpE,gBAAtC3W,EAASyZ,IAAwCzZ,EAASyZ,GAAyB9C,OAAS,GACtD,iBAAtC3W,EAASyZ,IAAqF,IAA5CzZ,EAASyZ,GAAyBU,QAC/C,iBAAtCna,EAASyZ,IAOtB,EAKAW,QAAS,SAASpa,GAEjB,OAAI0Z,EAAeQ,QAAQla,GAEnBA,EAASyZ,GAGV,IACR,EAKAY,SAAU,SAASra,GAElB,MAAwB,iBAAbA,GACP6V,OAAOwD,KAAKrZ,GAAU2W,OAAS,GAC/B3W,EAASga,eAAeP,GAEpBzZ,EAASyZ,GAGV,eACR,EAKAa,aAAc,SAASta,GAEtB,MAAwB,iBAAbA,GAAyBA,EAASga,eAAeR,GAEpDxZ,EAASwZ,GAGV,CACR,EAQAe,mBAAoB,SAASZ,GAC5B,IAAI5E,EAAM,KAQV,MAL0C,oBAA/B3Z,6BAEV2Z,EAAM3Z,2BAA2BC,SAAWD,2BAA2BE,UAAY,IAAMqe,GAGnF5E,CACR,EAKAyF,YAAa,SAASC,EAAYza,EAAU0a,GAqB5C,EASAZ,WAAY,SAASH,EAAOC,EAAcjO,EAAMkO,GAG/C,IAAIc,EAAe,CAClBhF,OAAQhK,EACRvT,IAAKshB,EAAea,mBAAmBZ,GACvCpf,QAnL8B,KAkM/B,GArL0B,OA0KtBoR,EAEHgP,EAAa5gB,OAAS6f,EAKtBe,EAAazgB,KAAO0f,EAIU,iBAApBC,EAGV,IAAK,IAAIe,KAAQf,EAAiBc,EAAaC,GAAQf,EAAgBe,GAIxE,OAAO9M,MAAM6M,EACd,GC5HKE,EAAqBC,SAASC,cAAc,OAE5CC,EAAYC,IAAIC,UAAU,CAC/BC,KAAM,cACNC,WAAY,CACXC,UACAC,aAEDC,QAAS,CACRC,UAAUC,GAgBF,UAfMrgB,2BAA2BsgB,mBAejC,yCAbI,koBAQMtgB,2BAA2BugB,YAAc,IAAMvgB,2BAA2BwgB,cAAgB,mCACtFH,EAAUlE,QAAQsE,OAAS,mOAMjDC,eAAAA,CAAgBpc,GACfqc,UAAUC,SAASC,oBAAoBvc,EAAEwc,OAAOC,aAAa,SAASC,QACvE,GAEDC,SAAAA,GACCxB,EAAmByB,cAAcC,YAAY1B,EAC9C,EACA2B,SAAU,CACTC,aAAc,WACb,MAAyD,KAAlDrhB,2BAA2BsgB,kBACnC,GAEDgB,SAAoB,4+DAiDrB1B,EAAUtF,IAAIiH,GACd3B,EAAUtF,IAAIkH,GAGd,MAAMC,EAAoB7B,EAAU8B,MAAMjC,GAE1CC,SAASiC,KAAKC,YAAYnC,GAG1B,IAAAoC,EAAe,CACd3I,QAASA,CAACC,EAAKC,KACTD,EAAI3e,OAAO6e,iBAAiBkD,IAChCpD,EAAImB,IAAIwH,GAET,MAAM7F,EAAY,CACjB8F,YAAAA,CAAa5F,GACZ,GAAI3e,MAAMC,QAAQ0e,GACjB,OAAOA,EAAQV,QAAQhhB,KAAKsnB,cAC7BN,EAAkBO,MAAMC,MAAMC,IAAI,CAAElF,SAAU,UAAWmF,QAAS,OAAQ1B,OAAQtE,EAASiG,KAAM,KAClG,EACAC,SAAAA,CAAUlG,GACT,GAAI3e,MAAMC,QAAQ0e,GACjB,OAAOA,EAAQV,QAAQhhB,KAAK4nB,WAC7BZ,EAAkBO,MAAMC,MAAMC,IAAI,CAAElF,SAAU,OAAQmF,QAAS,OAAQ1B,OAAQtE,EAASiG,KAAM,KAC/F,EACAE,YAAAA,CAAanG,GACZ,GAAI3e,MAAMC,QAAQ0e,GACjB,OAAOA,EAAQV,QAAQhhB,KAAK6nB,cAC7Bb,EAAkBO,MAAMC,MAAMC,IAAI,CAAElF,SAAU,OAAQmF,QAAS,UAAW1B,OAAQtE,GACnF,EACAE,UAAAA,CAAWF,GACV,GAAI3e,MAAMC,QAAQ0e,GACjB,OAAOA,EAAQV,QAAQhhB,KAAK4hB,YAC7BoF,EAAkBO,MAAMC,MAAMC,IAAI,CAAElF,SAAU,QAASmF,QAAS,UAAW1B,OAAQtE,GACpF,EACAc,gBAAAA,CAAiBd,GAIhB,GAAI3e,MAAMC,QAAQ0e,GACjB,OAAOA,EAAQV,QAAQhhB,KAAKwiB,kBAC7BwE,EAAkBO,MAAMO,MAAML,IAAI,CACjClF,SAAU,QACVmF,QAAStC,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,sBAC7DiE,OAAQtE,GACV,EACAqG,cAAaA,IACL,IAAI9kB,QAAQ,CAAC+kB,EAASnjB,KAC5BmiB,EAAkBiB,SAASC,QAAQ,CAClCpd,MAAO,kBACPqd,OAAQ/C,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,oBAC5DL,QAAS0D,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,yBAC7DqG,YAAahD,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,gBACjEsG,YAAa,kBACbC,YAAalD,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,iBACjEwG,YAAa,qBACbC,MAAAA,GACCR,GAAQ,EACT,EACAnjB,MAAAA,GACCmjB,GAAQ,EACT,MAIHzL,QAAQoC,GACA,IAAI1b,QAAQ,CAAC+kB,EAASnjB,KAC5BmiB,EAAkBiB,SAASC,QAAQ,CAClCpd,MAAO6T,GAAS7T,OAAS,kBACzBqd,OAAQxJ,GAASwJ,QAAU/C,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,oBAC/EL,QAAS/C,GAAS+C,SAAW,GAC7B0G,YAAazJ,GAASyJ,aAAe,KACrCC,YAAa1J,GAAS0J,aAAe,kBACrCC,YAAa3J,GAAS2J,aAAelD,IAAIuB,SAAS,IAAMjI,EAAI3e,OAAO6e,iBAAiBkD,GAAGC,EAAE,iBACzFwG,YAAa5J,GAAS4J,aAAe,4BACrCC,MAAAA,GACCR,GAAQ,EACT,EACAnjB,MAAAA,GACCmjB,GAAQ,EACT,MAIHvG,YAAAA,CAAac,EAAUrG,EAAOwF,EAAS+G,GAAS,EAAOC,GAAO,GAC7D,IAAI/J,EAAU,CAAE4D,SAAUA,EAAUmF,QAASxL,EAAO8J,OAAQtE,EAASgH,QAEhED,IACJ9J,EAAQgJ,KAAO,KAEhBX,EAAkBO,MAAMC,MAAMC,IAAI9I,EACnC,EACAgK,aAAAA,CAAcC,EAAcrG,EAAW,OAAQrG,EAAQ,OAAQuM,GAAS,EAAOC,GAAO,GAErF,QAAIE,EAAa1I,MAAMwB,GAA8B,iBAAZA,KACxCkH,EAAa5H,QAAQU,GAAW1hB,KAAKyhB,aAAac,EAAUrG,EAAOwF,EAAS+G,EAAQC,KAC7E,EAGT,EACAG,iBAAAA,CAAkBte,GAEjB,IAAGA,EAAM4Z,eAAe,SAAW5Z,EAAM+a,KAAKwD,gBAAkB,aAAaA,cAA7E,CAIA,GAAqB,iBAAVve,EACV,OAAOiX,EAAUgB,iBAAiBjY,GAGnC,GAAIxH,MAAMC,QAAQuH,IAAUA,EAAM2V,MAAMkB,GAAsB,iBAARA,GACrD,OAAO7W,EAAM2V,MAAMsB,EAAUgB,kBAG9B,IAAIjY,EAAM4Z,eAAe,aAAc5Z,EAAMgX,QAA7C,CAIA,GAAqB,iBAAVhX,GAAgC,OAAVA,EAAgB,CAChD,IAAIwe,EAAS,GAoBb,OAjBIxe,EAAM4Z,eAAe,aAAe5Z,EAAMJ,UAAU9F,MAAM2kB,OAC7DD,GAAU,mBAAqBxe,EAAMJ,SAAS9F,KAAK2kB,OAAOtH,SAAWnX,EAAMJ,SAAS9F,KAAK2kB,QAAU,OAC3Fze,EAAM4Z,eAAe,aAC7B4E,GAAU,kBAAoBxe,EAAMmX,QAAQuH,cAAgB,QAEzD1e,EAAM4Z,eAAe,WAAa5Z,EAAMxK,OAAOokB,eAAe,SACjE4E,GAAU,oBAAsBxe,EAAMxK,OAAOwC,IAAM,QAEhDgI,EAAM4Z,eAAe,WACxB4E,GAAU,gBAAkBxe,EAAM2e,MAAQ,QAG7B,IAAVH,IACHA,EAAS,kBAAoB9H,KAAKC,UAAU3W,GAAS,QAEtDwe,GAAU,0BAA4BxjB,2BAA2BugB,YAAc,IAAMvgB,2BAA2BwgB,cAEzGvE,EAAUgB,iBAAiBuG,EACnC,CAGAvH,EAAUgB,iBAAiB,mEAAqEjd,2BAA2BugB,YAAc,IAAMvgB,2BAA2BwgB,cA5BzK,CAZA,CAyCF,EACAoD,mBAAAA,CAAoBzH,GAEnB,GAAuB,iBAAZA,EACV,OAAOF,EAAUqG,aAAanG,GAG/B,GAAI3e,MAAMC,QAAQ0e,GAAU,CAE3B,GAAIA,EAAQxB,MAAMkJ,GAAsB,iBAARA,GAC/B,OAAO1H,EAAQxB,MAAMsB,EAAUqG,cAGhC,GAAInG,EAAQxB,MAAMkJ,GAAsB,iBAARA,IAA6B,OAARA,IACpD,OAAO1H,EAAQxB,MAAMkJ,IAChBA,EAAIjF,eAAe,SAAWiF,EAAI/kB,KAAK8f,eAAe,UACzD3C,EAAUqG,aAAa5G,KAAKC,UAAUkI,EAAI/kB,KAAK2kB,SAE/CxH,EAAUgB,iBAAiBvB,KAAKC,UAAUkI,KAI9C,CAGuB,iBAAZ1H,GAAoC,OAAZA,EAWnCF,EAAUgB,iBAAiB,mEAAqEjd,2BAA2BugB,YAAc,IAAOvgB,2BAA2BwgB,eAVtKrE,EAAQyC,eAAe,SAAWzC,EAAQrd,KAAK8f,eAAe,UAEjE3C,EAAUqG,aAAa5G,KAAKC,UAAUQ,EAAQrd,KAAK2kB,SAEnDxH,EAAUgB,iBAAiBvB,KAAKC,UAAUQ,GAO7C,EACA2H,mBAAAA,CAAoBhf,GACnB,MAAMmM,EAAQ,IAAI8S,MAAM,kBACxBjf,EAAKkf,iBAAiB,CAAC,mDAAmDvI,QAAQwI,GAAMA,EAAGC,cAAcjT,GAS1G,EACAkT,oBAAAA,CAAqBnf,EAAOF,GAC3B,QAAa7H,IAAT6H,GACH,GAAIE,GAASA,EAAMof,WAAaC,KAAKC,aACpC,OAAOzI,GAAOI,EAAUkI,qBAAqBtI,EAAK7W,QAEnD,GAA+B,KAA3BA,GAAOJ,UAAU6D,OAAe,CACnC,IAAImT,EAAS0C,EAAeW,SAASja,EAAMJ,SAAS9F,MAC9B,iBAAX8c,IACVA,EAAS5W,EAAMJ,SAAS9F,MAGzBmd,EAAU6H,oBAAoBhf,GAG9B,MAAMyf,EAAW9J,OAAOQ,QAAQW,GAAQhY,OAAO,EAAEwX,EAAKqF,MACrD,MAAM+D,EAAQ1f,EAAK2f,cAAc,4BAA8BrJ,EAAM,MACrE,OAAKoJ,IAGLA,EAAMN,cAAc,IAAIQ,YAAY,sBAAuB,CAACjE,aAUrD,KACL7iB,IAAI+mB,GAAOA,EAAI,IAIZpC,EAAQzd,EAAK2f,cAAc,yBAgBjC,YAfIlC,GAASgC,EAAShJ,OACrBgH,EAAM2B,cAAc,IAAIQ,YAAY,iBAAkB,CAACjE,OAAQ8D,KAY/DA,EAAS9I,QAAQQ,EAAUI,YAG7B,CAGD,GAA+B,KAA3BrX,GAAOJ,UAAU6D,OAAe,CACnC,IAAImT,EAAS0C,EAAeW,SAASja,EAAMJ,SAAS9F,MACpDmd,EAAUI,WAA8B,iBAAXT,EAAuBnB,OAAOC,OAAOkB,GAAUA,EAC7E,MACCK,EAAUqH,kBAAkBte,EAE9B,GAEDmU,EAAI3e,OAAO6e,iBAAiB4C,UAAYA,EACxC9C,EAAIgF,QAAQ,YAAahF,EAAI3e,OAAO6e,iBAAiB4C,aC5bvD2I,EAAe,CACd1L,QAASA,CAACC,EAAKC,KACd,GAAID,EAAI3e,OAAO6e,iBAAiBwL,KAC/B,OAMD,SAASC,EAAsBlJ,EAAQmJ,GAClCvnB,MAAMC,QAAQme,GACjBA,EAAOH,QAAQsJ,GAEftK,OAAOQ,QAAQW,GAAQH,QACtB,EAAE9E,EAAOqO,KAAUA,EAAKvJ,QACvBzW,GAAS+f,EAAK/f,EAAO2R,IAGzB,CAZKwC,EAAI3e,OAAO6e,iBAAiB4C,WAChC9C,EAAImB,IAAIuH,GAYT,IAAIoD,EAAuB,CAC1BC,SAAS,EACTC,MAAM,EACNC,QAAS,CACRtgB,KAAM,CAAC,aAAc,WACrBmd,MAAO,CAAC,aAAc,UAAW,YAAa,gBAE/CoD,QAAS,CACRvgB,IAAAA,CAAKA,EAAM8W,GACV9W,EAAK+U,kBACL+B,EAAOH,QAAQI,GAAO/W,EAAKgV,aAC1B,EACA+B,EAAIpH,UAAYoH,EAAIM,SAEtB,EACA,WAAM8F,CAAMrG,GACX,MAAMW,EAAKpD,EAAI3e,OAAO6e,iBAAiBkD,GACvC,IAAKA,EACJ,OAAO7e,QAAQ4B,OAAO,8BAEvBgmB,eAAeC,EAAc3J,GAC5BA,EAASA,EAAOV,OAAO,CAAClB,EAAQ6B,KAC/B,OAAQA,EAAItL,MACZ,IAAK,YACL,IAAK,cACAsL,EAAIM,QACPnC,EAAO6B,EAAIM,SAAW,CAACN,EAAI7e,KAE3Bgd,EAAOwL,SAAW,CAAC3J,EAAI7e,KACxB,MACD,IAAK,UACCgd,EAAOwL,WACXxL,EAAOwL,SAAW,IACnBxL,EAAOwL,SAASC,KAAK5J,EAAIM,SACzB,MACD,IAAK,aACJ1B,OAAOQ,QAAQY,EAAIpH,UACjBgH,QAAQ,EAAEiK,EAAO7B,MACZ7J,EAAO0L,KACX1L,EAAO0L,GAAS,IACbloB,MAAMC,QAAQomB,GACjB7J,EAAO0L,GAAOD,QAAQ5B,GAEtB7J,EAAO0L,GAAOD,KAAK5B,KAIvB,OAAO7J,GACL,CAAA,GACH,IAAI9U,EAAU,EACd,MAAMygB,QAAajoB,QAAQqZ,IAAI0D,OAAOQ,QAAQW,GAC5CgK,KAAK,CAACvmB,EAAGwmB,IAAM,CAAC,YAAYC,QAAQD,EAAE,IAAM,CAAC,YAAYC,QAAQzmB,EAAE,KACnEzB,IAAI0nB,OAAQI,EAAOC,MACnB,GAAa,YAATD,EAAqB,OAClBnJ,EAAGxhB,aAAa,aAEtB2qB,EAAQ,sBADQnJ,EAAGC,EAAE,qBACqB,OAC3C,MACCkJ,EAAQ,OAASA,EAAQ,QAG1B,OADAxgB,GAAWygB,EAAKpK,OACTmK,EACJ,OACAC,EAAKpI,KAAK,aACV,WAEL,MAAO,CACNrY,UACAygB,OAEF,CAEA,IAAIzgB,EAASygB,EACTnoB,MAAMC,QAAQme,KACd1W,UAASygB,cAAeJ,EAAc3J,MAEtC1W,UAASygB,cAAelL,OAAOQ,QAAQW,GACxCV,OAAOoK,MAAOzmB,GAAM8X,EAAOqO,MAC3B,MAAMhL,QAAenb,GACfqG,QAAEA,EAAOygB,KAAEA,SAAeJ,EAAcP,GAO9C,OANAhL,EAAO9U,SAAWA,EAClB8U,EAAO2L,KAAKF,KAAK,OACd9O,EACA,gBACAgP,EAAKpI,KAAK,IACV,cACIvD,GACLtc,QAAQ+kB,QAAQ,CAAEvd,QAAS,EAAGygB,KAAM,aAGnCpJ,EAAGxhB,aAAa,MACtB,MAAMgrB,EAAWxJ,EAAGC,EAAE,cAAe,CAAEwJ,EAAG9gB,IAE1CiU,EAAI3e,OAAO6e,iBAAiB4C,UAAUC,aACrC,QACA6J,EACA,OAASJ,EAAKpI,KAAK,IAAM,SACzB,GACA,EAEF,EACAZ,GAAAA,CAAIf,GACHkJ,EAAsBlJ,EAAQ,CAAC5W,EAAO2R,KACrC,IAAIwF,EAAU,GAYd,OAXAA,GAAW,YAAcnX,EAAMmX,QAAU,OACzCA,GAAW,aAAenX,EAAM4X,SAAW,KAC3CT,GAAW,gBAAkBnX,EAAM6X,KAAO,KACtC7X,EAAM8X,WAAa9X,EAAM8X,UAAUvB,SACtCY,GAAW,gBACXnX,EAAM8X,UAAUrB,QAAQI,IACvBM,GAAW,aAAeN,EAAIR,KAAO,KACrCc,GAAW,WAAaN,EAAIgB,KAAO,KACnCV,GAAW,eAAiBN,EAAIkB,SAAW,QAGrC/X,EAAMgY,UACb,IAAK,UACL,IAAK,eACL,IAAK,kBACL,IAAK,eACArG,EACHA,GAAS,SAAW3R,EAAMgY,SAE1BrG,EAAQ,OAAS3R,EAAMgY,SACxB7D,EAAI3e,OAAO6e,iBAAiB4C,UAAUC,aAAa,OAAQvF,EAAOwF,GAAS,GAC3E,MACD,IAAK,SACL,IAAK,cACL,IAAK,iBACAxF,EACHA,GAAS,SAAW3R,EAAMgY,SAE1BrG,EAAQ,OAAS3R,EAAMgY,SACxB7D,EAAI3e,OAAO6e,iBAAiB4C,UAAUC,aAAa,OAAQvF,EAAOwF,GAAS,GAC3E,MACD,QACCA,EAAU,aAAenX,EAAMgY,SAAW,OAASb,EAC/CxF,IACHwF,EAAUxF,EAAQ,OAASwF,GAC5BhD,EAAI3e,OAAO6e,iBAAiB4C,UAAUgB,iBAAiBd,KAI3D,EACAe,SAAAA,CAAUtB,GACTkJ,EAAsBlJ,EAAQ,CAAC5W,EAAO2R,KACrC,IAAIwF,EAAU,GACVxF,IACHwF,GAAWxF,EAAQ,QACpBwF,GAAW,SAAWnX,EAAMmY,MAAQ,OACpChB,GAAW,YAAcnX,EAAMmX,QAAU,OACzCA,GAAW,aAAenX,EAAM4X,SAAW,KAC3CT,GAAW,gBAAkBnX,EAAM6X,KAAO,KACtC7X,EAAM8X,WAAa9X,EAAM8X,UAAUvB,SACtCY,GAAW,gBACXnX,EAAM8X,UAAUrB,QAAQI,IACvBM,GAAW,aAAeN,EAAIR,KAAO,KACrCc,GAAW,WAAaN,EAAIgB,KAAO,KACnCV,GAAW,eAAiBN,EAAIkB,SAAW,QAG7C5D,EAAI3e,OAAO6e,iBAAiB4C,UAAUgB,iBAAiBd,IAEzD,EACAiB,EAAAA,CAAGxB,GACFkJ,EAAsBlJ,EAAQ,CAAC5W,EAAO2R,KACrC,IAAIwF,EAAU,GACVxF,IACHwF,GAAWxF,EAAQ,aACE1Z,IAAlB+H,EAAMqY,UACTlB,GAAWnX,EAAMqY,QAAU,aACTpgB,IAAf+H,EAAM+W,OACTI,GAAW,SAAWnX,EAAM+W,KAAO,aAClB9e,IAAd+H,EAAMsY,MACTnB,GAAW,QAAUnX,EAAMsY,IAAM,aACZrgB,IAAlB+H,EAAMmX,QACTA,GAAW,YAAcnX,EAAMmX,QAAU,YACdlf,IAAnB+H,EAAMyP,WACd0H,GAAW,aAAenX,EAAMyP,SAAS8I,KAAK,QAAU,aAClCtgB,IAAnB+H,EAAM4X,WACTT,GAAW,aAAenX,EAAM4X,SAAW,WACzB3f,IAAf+H,EAAM6X,OACTV,GAAW,gBAAkBnX,EAAM6X,KAAO,MAE3C1D,EAAI3e,OAAO6e,iBAAiB4C,UAAUgB,iBAAiBd,IAEzD,EACAqB,IAAAA,CAAK5B,GACJkJ,EAAsBlJ,EAAQ,CAAC5W,EAAO2R,KACjCA,EACHA,GAAS,KAAO3R,EAAMmX,QAEtBxF,EAAQ3R,EAAMmX,QAEf,IAAIA,EAAU,GACdA,GAAW,oBAAsBnX,EAAMyY,WAAa,KACpDtB,GAAW,gBAAkBnX,EAAMuV,OAAS,KAC5C4B,GAAW,yBAA2BnX,EAAM0Y,qBAE5CvE,EAAI3e,OAAO6e,iBAAiB4C,UAAUC,aACrC,QACAvF,EACAwF,GACA,IAGH,IAOF,SAAS8J,EAAWnhB,EAAM6U,EAAK7a,EAAMtE,GACpC,GAAmB,iBAARsK,QAA+B7H,IAAXzC,GAC7Bmf,EAAK7a,EAAMtE,GAAU,CAACsK,EAAM6U,EAAK7a,GAClCgG,OAAO7H,OACD,GAAI6H,EAAM,CAChB,GAAmB,iBAARA,EACV,MAAM,IAAI8U,UAAU,iEACT3c,IAAR0c,QAA8B1c,IAAT6B,QAAiC7B,IAAXzC,IAC9CA,EAASsK,EACTA,OAAO7H,EAET,CACA,GAAI6H,EAAM,CAET,IAAKA,EAAK+U,kBAAoB/U,EAAKgV,YAClC,MAAM,IAAIF,UAAU,kCAErB9U,EAAO,CACN+U,gBAAiB/U,EAAK+U,gBACtBC,YAAahV,EAAKgV,aAGftf,EACHA,EAAOsK,KAAOA,EAEdtK,EAAS,CAACsK,OACZ,CAEA,MAAO,CAAC6U,EAAK7a,EAAMtE,EACpB,CACA,SAAS0rB,EAAmBthB,GAC3B,GAA6B,iBAAlBA,EAAS9F,MAAqB8F,EAAS9F,gBAAgBqnB,OACjE,OAAOD,EAAmB,CAAEpnB,KAAM8F,IAEnC,MAAMoV,EAASpV,EAAS9F,KAExB,cADO8F,EAAS9F,KACXkb,GAEAA,EAAOC,KAGXD,EAAOC,KAAKrV,SAAWA,EAFvBoV,EAAOC,KAAO,CAAErV,YAGVoV,GALC,CAACC,KAAM,CAACrV,YAAW9F,KAAM,KAMlC,CACA,SAASsnB,EAAoB5rB,GAC5B,IAAe,IAAXA,GAA+B,QAAXA,EACvB,MAAO,IAAKyqB,EAAsBC,SAAS,EAAOC,MAAM,GAEzD,IAAK3qB,IAAqB,IAAXA,EACd,MAAO,IAAKyqB,GAEb,GAAe,YAAXzqB,EACH,MAAO,IAAKyqB,EAAsBE,MAAM,GAEzC,GAAe,SAAX3qB,EACH,MAAO,IAAKyqB,EAAsBC,SAAS,GAE5C,MAAMA,QAAEA,EAAOC,KAAEA,EAAIE,QAAEA,EAAOD,QAAEA,GAAY5qB,EAa5C,OAXAA,EAAS,IAAKyqB,GAEdxK,OAAOQ,QAAQ,CAAEkK,OAAMD,YAAWzJ,QAAQ,EAAEL,EAAKhb,WAClCnD,IAAVmD,IACH5F,EAAO4gB,GAAOhb,KAEhBqa,OAAOQ,QAAQ,CAAEoK,UAASD,YAAW3J,QAAQ,EAAEL,EAAKhb,WACrCnD,IAAVmD,IACH5F,EAAO4gB,GAAO,IAAK5gB,EAAO4gB,MAAShb,MAG9B5F,CACR,CACA,SAAS6rB,EAAkB7rB,GAC1B,MAAMwf,EAASoM,EAAoB5rB,GAAQ8C,eAE3C,GAAK9C,GAAQsK,KAEN,CACN,MAAMwhB,EAActM,EAAOqL,QAAQvgB,KACnCkV,EAAOqL,QAAU,IAAKrL,EAAOqL,QAASvgB,KAAM8W,GAAU0K,EAAY9rB,EAAOsK,KAAM8W,GAChF,MAJC5B,EAAOoL,QAAU,IAAKpL,EAAOoL,QAAStgB,KAAM,IAM7C,OAAOkV,CACR,CACA,SAASuM,EAAevhB,GACvB,OAAIA,EAAMJ,SACoB,KAAzBI,EAAMJ,SAAS6D,OACX,CAAC,CACP8H,KAAM,YACN4L,QAASnX,EAAMmX,QACfnf,IAAKgI,EAAMqV,QAAQ+B,cAGcnf,MAA9B+H,EAAMJ,SAAS9F,KAAK8c,OAA4B,GAC7C5W,EAAMJ,SAAS9F,KAAK8c,OAElB5W,EAAMqV,QACT,CAAC,CACP9J,KAAM,cACN4L,QAASnX,EAAMmX,QACfnf,IAAKgI,EAAMqV,QAAQ+B,cAGb,CAAC,CACP7L,KAAM,SACN4L,QAASnX,EAAMmX,SAGlB,CACA,SAASqK,EAAoBlpB,EAAese,GAC3C,MAAM5B,EAAS,CAAA,EACTyM,EAAO,GAEb,GAAcxpB,MAAV2e,EAAqB,MAAO,CAAA,EAEhC,KAAOA,EAAOL,QACbkL,EAAKhB,KAAK7J,EAAO8K,OAClB,IAAK,IAAI1hB,KAASyhB,EAAM,CACvB,IAAIlW,EAAOvL,EAAMuL,KACboW,EAAU,KACd,IAAK,IAAInK,KAAKlf,EAAc8nB,QAAS,CACpC,IAAIwB,EAAsBtpB,EACxB8nB,QAAQ5I,GACRqK,SAAStW,GACPuW,EAAoBxpB,EAAc+nB,QAAQ7I,GAC9C,GAAIoK,GAAuBE,IAC1BH,EAAUnK,EACK,QAAXmK,GACH,KAEH,CACIA,IACHpW,EAAOoW,GACQrpB,EAAc+nB,QAAQ9U,IAEhCyJ,EAAOzJ,KACXyJ,EAAOzJ,GAAQ,IACZ/S,MAAMC,QAAQuH,GACjBgV,EAAOzJ,GAAMkV,QAAQzgB,GAErBgV,EAAOzJ,GAAMkV,KAAKzgB,IAGpB4W,EAAO6J,KAAKzgB,EACb,CACA,OAAOgV,CACR,MArJ+B/c,IAA3Bmc,GAAS9b,gBACZ2nB,EAAuBmB,EAAoBhN,EAAQ9b,gBAuJpD,MAAM4c,EAAcxH,MAAMxV,OAAO,CAChCiC,QAAS,IACTgb,QAASna,2BAA2BC,SACjCD,2BAA2BE,UAC3B,MAGJga,EAAYE,aAAaC,QAAQC,IAAI9f,IACpC,GAAqB,QAAjBA,EAAO+f,SAAqB/f,EAAOsE,KACtC,OAAOtE,EAER,GAAIA,EAAOsE,gBAAgB0b,SAC1B,OAAOhgB,EAER,IAAKigB,OAAOC,OAAOlgB,EAAOsE,MAAM6b,MAAMC,KACjCA,aAAgBC,aAEhBrd,MAAMC,QAAQmd,IACVA,EAAKD,MAAMG,KAAOA,aAAaC,SAEpC,CACH,MAAMC,EAAUP,OAAOQ,QAAQzgB,EAAOsE,MAAMoc,OAAO,CAACC,GAAKC,EAAKR,MAC7D,GAAIA,aAAgBC,SACnB,IAAK,MAAMQ,KAAQT,EAClBO,EAAGX,SAASc,OAAOF,GAAOR,EAAKW,OAAS,EAAI,KAAO,IAAKF,QAC/C7d,MAAMC,QAAQmd,GACpBA,EAAKD,MAAMG,KAAOA,aAAaC,OAClCI,EAAGK,SAASJ,GAAOR,EAEnBA,EAAKa,QAAQJ,GAAQF,EAAGX,SAASc,OAAOF,GAAOR,EAAKW,OAAS,EAAI,KAAO,IAAKF,IAG9EF,EAAGK,SAASJ,GAAOR,EAEpB,OAAOO,GACL,CACFX,SAAU,IAAIA,SACdgB,SAAU,CAAA,IAEXR,EAAQR,SAASc,OAAO,YAAaI,KAAKC,UAAUX,EAAQQ,WAC5DhhB,EAAOsE,KAAOkc,EAAQR,QACvB,CAEA,OAAOhgB,IAGR0f,EAAYE,aAAaxV,SAAS0V,IACjC1V,IACuC,OAAlCA,EAASpK,QAAQ8C,gBACkB,IAAnCsH,EAASpK,QAAQ8C,eACiB,QAAlCsH,EAASpK,QAAQ8C,eAIjBsH,EAAS9F,KAAK8c,SACjBhX,EAAS9F,KAAK8c,OAAShX,EAAS9F,KAAK8c,OAAOhY,OAC3CiY,IAAQjX,EAASpK,OAAOqhB,EAAItL,KAAO,iBAAmB4I,EAAI3e,OAAO6e,iBAAiBwL,KAAK/I,sBAAsBD,EAAItL,OAAOsL,EAAKjX,EAASpK,UALhI0rB,EAAmBthB,IAU5BI,IACC,GAAkB,gBAAdA,EAAM+W,KACT,OAAOre,QAAQ4B,OAAO,CAAE0c,SAAS,KAAShX,IAE3C,MAAM+hB,EAAcV,EAAkBrhB,EAAMxK,QAE5C,IAAKusB,EAAY5B,KAChB,OAAOznB,QAAQ4B,OAAO0F,GAEvB,MAAMgiB,EAAYT,EAAevhB,GAE3B4W,EAAS4K,EAAoBO,EAAaC,GAEhD,IAAK,IAAIzW,KAAQqL,EAChBmL,EAAY1B,QAAQ9U,GAAMqL,EAAOrL,IAGlC,OAAIyW,EAAUzL,OACN7d,QAAQ4B,OAAO0F,GAEhBtH,QAAQ4B,OAAO,CAAE0c,SAAS,KAAShX,MAI5CmU,EAAI3e,OAAO6e,iBAAiBwL,KAAO,CAClCthB,OAAOvG,GACCkd,EAAY3W,OAAO,CAACvG,QAE5B/B,IAAGA,CAAC6J,EAAM6U,EAAKhb,EAAQnE,MACrBmf,EAAKhb,EAAQnE,GAAUyrB,EAAWnhB,EAAM6U,EAAKhb,EAAQnE,GAClDmE,IACCnE,EACHA,EAAOmE,OAASA,EAEhBnE,EAAS,CAACmE,WAELub,EAAYjf,IAAI0e,EAAKnf,IAE7BG,KAAIA,CAACmK,EAAM6U,EAAK7a,EAAMtE,MACpBmf,EAAK7a,EAAMtE,GAAUyrB,EAAWnhB,EAAM6U,EAAK7a,EAAMtE,GAC3C0f,EAAYvf,KAAKgf,EAAK7a,EAAMtE,IAEpCysB,IAAAA,CAAK3N,EAAS4N,EAAiBpiB,GAC9B,GAAItH,MAAMC,QAAQ6b,GAAU,CAC3B,MAAMuL,EAAO1L,EAAI3e,OAAO6e,iBAAiBwL,KAEzC,OAAOnnB,QACLC,WAAW2b,EAAQ1b,IAAI,CAACpD,EAAQ2sB,KAC3B3pB,MAAMC,QAAQjD,KAClBA,EAAS,CAAC,IAAM2sB,EAAO3sB,IACjBqqB,EAAKoC,KAAKzsB,EAAO,GAAI,CAC3BuD,YAAavD,EAAO,GACpB8C,eAAe,OAGhBsB,KAAKob,IACL,MAAM,CAAA,CAAMxf,GAAWyrB,EAAWnhB,OAAM7H,OAAWA,EAAWiqB,GAAmB,IAC3EH,EAAcV,EAAkB7rB,GAEtC,IAAKusB,EAAY7B,UAAY6B,EAAY5B,KACxC,OAAOnL,EAGR,MAAMoN,EAAc,CAAA,EACpB,IAAK,IAAIvoB,KAAOmb,EAAQ,CACvB,MAAQqN,EAASzM,GAAwB,cAAf/b,EAAI4J,OAC3B,CAAEse,EAAY7B,QAASrmB,EAAIuB,OAC3B,CAAE2mB,EAAY5B,KAAMtmB,EAAIyoB,QAC3B,IAAKD,EACJ,OAED,MAAMzL,EAAS4K,EAAoBO,EAAaR,EAAe3L,IAE/D,IAAK,IAAIrK,KAAQqL,EACXwL,EAAY7W,GAKhB6W,EAAY7W,GAAMqK,EAAKpgB,OAAOuD,aAAe6d,EAAOrL,GAJpD6W,EAAY7W,GAAQ,CACnB,CAACqK,EAAKpgB,OAAOuD,aAAc6d,EAAOrL,GAKtC,CAEA,IAAK,IAAIgX,KAAWH,EACnBL,EAAY1B,QAAQkC,GAASH,EAAYG,IAG1C,OAAOvN,GAEV,CACA,IAAIO,OAAEA,EAAMvd,IAAEA,EAAG2B,OAAEA,EAAMnE,OAAEA,GAAW8e,EAStC,YARwBrc,IAApBiqB,IACH1sB,EAAS0sB,GAEL3M,IACJA,EAAS,OAENA,EAAOgJ,cACVhJ,EAASA,EAAOgJ,eACH,OAAVhJ,EACI9f,KAAKQ,IAAI6J,EAAM9H,EAAK2B,EAAQnE,GACf,QAAV+f,EACH9f,KAAKE,KAAKmK,EAAM9H,EAAK2B,EAAQnE,QAEpC+e,QAAQvU,MAAM,8BAA+BuV,EAE/C,EACAiN,gBAAgBhtB,GACR6rB,EAAkB7rB,IAI3B2e,EAAIgF,QAAQ,OAAQhF,EAAI3e,OAAO6e,iBAAiBwL,QC5hBlD4C,EAAe,CACd1sB,aAAaC,IACL,CACNuf,OAAQ,MACRvd,IAAK,uCAAyChC,IAGhDE,YAAWA,CAACC,EAAWC,KAEf,CACNmf,OAAQ,OACRvd,IAAK,uCACL2B,OAJc,CAACxD,aAAYC,cAO7BE,YAAWA,KACH,CACNif,OAAQ,MACRvd,IAAK,yCAGPzB,qBAAoBA,KACZ,CACNgf,OAAQ,MACRvd,IAAK,8CCrCR,MAAM7B,EAAa0kB,IAAI6H,SAAS,IAC1BC,EAAiB,CAAA,EACvB,IAAIC,EAAgB/H,IAAIgI,IAAI7nB,2BAA2B4nB,eAC5CE,EAAcjI,IAAIuB,SAAS,IACjCwG,EAAcxnB,MACXJ,2BAA2B+nB,iBAAiBC,KAAK5sB,GAAYA,EAASqY,SAAWmU,EAAcxnB,OAAO6nB,QAD7E,MAoBjC,MAAM5R,EAAU,CACfuR,gBACAE,cACA5sB,WAAAA,CAAYE,GACX,MAAM8sB,EAAWzN,OAAOwD,KAAK9iB,GAC7B,OAAOV,KAAKD,OAAO6e,iBAAiBwL,KAClCoC,KAAKQ,EAAWvsB,YAAYgtB,EAAU9sB,IACtCwD,KAAKC,IACLA,EAAIC,KAAK2c,QAAQ0M,IAChBhtB,EAAWgtB,EAAIntB,UAAUmtB,EAAIC,QAAUD,EAAIE,OAI5CT,EAAcxnB,MAAQhF,EAEfyD,GAEV,EACA9D,YAAAA,CAAaC,GACZ,OAAIwC,MAAMC,QAAQzC,GACV0C,QAAQqZ,IAAI/b,EAAS4C,IAAInD,KAAKD,OAAO6e,iBAC1CkD,GAAGxhB,gBAED4sB,EAAe3sB,KACnB2sB,EAAe3sB,GAAYP,KAAKD,OAAO6e,iBAAiBwL,KACtDoC,KAAKQ,EAAW1sB,aAAaC,IAC7B4D,KAAKC,GAAOA,GAAKC,KA1CtB,SAAyBwpB,EAAKttB,GAC7B,OAAOstB,EAAI1kB,OAAOU,GAAKA,EAAEtJ,UAAYA,GAAUkgB,OAAO,CAACrc,EAAK0pB,KACtD1pB,EAAI0pB,EAAKH,UACbvpB,EAAI0pB,EAAKH,QAAUG,EAAKF,MAClBxpB,GACL,CAAA,EACJ,CAoC6B2pB,CAAgB3pB,EAAIC,KAAM9D,GAAY,CAAA,GAC9D4D,KAAKC,IACL1D,EAAWH,GAAY6D,KAEnB8oB,EAAe3sB,GACvB,EACAytB,KAAAA,CAAMztB,EAAUotB,EAAQzpB,GAEvB,OADA4a,QAAQC,KAAK,cACNqG,IAAIuB,SAAS,IAAM3mB,KAAK+hB,EAAExhB,EAAUotB,EAAQzpB,GACpD,EACA6d,CAAAA,CAAExhB,EAAUotB,EAAQzpB,GAQnB,QAPe1B,IAAX0B,IACFnB,MAAMC,QAAQzC,IAAgC,GAAnBA,EAASugB,QACpCvgB,EAAS0tB,OAAuC,GAA9B1tB,EAAS0tB,MAAM,KAAKnN,UAEvC5c,EAASypB,GACRptB,EAAUotB,GAAUptB,EAAS0tB,MAAQ1tB,EAAS0tB,MAAM,KAAO1tB,QAE9CiC,IAAXmrB,EAEH,OADA7O,QAAQvU,MAAM,gBAAiBhK,EAAUotB,EAAQzpB,GAC1C,GAER,IAAIgqB,EAAM9I,IAAIuB,SAAS,IACjBjmB,EAAWH,GA1DnB,SAAiCA,EAAUotB,EAAQzpB,GAClD,IAAIqb,EAAS7e,EAAWH,GAAUotB,GAClC,OAAKpO,GAEDrb,IACHqb,EAASA,EAAOxY,QAAQ,eAAgB,CAAConB,EAAOC,SAAsB5rB,IAAf0B,EAAOkqB,GAAoBD,EAAQjqB,EAAOkqB,KAC3F7O,GAHC,aAAeoO,EAAS,IAIjC,CAqDUU,CAAwB9tB,EAAUotB,EAAQzpB,GADzC,IAKT,OAFKxD,EAAWH,IACfP,KAAKM,aAAaC,GACZ2tB,EAAIvoB,KACZ,GAGD,IAAA2oB,EAAe,CACd7P,OAAAA,CAAQC,EAAKC,GACPD,EAAI3e,OAAO6e,iBAAiB3e,SAChCye,EAAImB,IAAIrB,GACJE,EAAI3e,OAAO6e,iBAAiBwL,MAChC1L,EAAImB,IAAIsK,GACTzL,EAAI3e,OAAO6e,iBAAiBkD,GAAK,CAChCC,EAAGnG,EAAQmG,EACXzhB,aAAciuB,GAAO3S,EAAQtb,aAAaksB,KAAK9N,EAAK6P,GACpD9tB,YAAa+tB,GAAQ5S,EAAQnb,YAAY+rB,KAAK9N,EAAK8P,GACnDrB,cAAeA,EACfE,cACAW,MAAOpS,EAAQoS,OAEhBtP,EAAIgF,QAAQ,KAAMhF,EAAI3e,OAAO6e,iBAAiBkD,GAC/C,6DCpGD2M,EAAe,CACdlJ,WAAY,CACXmJ,QCJa,CACdC,MAAO,CACN,UAEDC,MAAO,CACNhlB,WAAY,CACXkM,KAAM,CAACwK,KAAMN,QACb6O,UAAU,IAGZxqB,KAAIA,KACI,CACNyqB,QAAS,KAGXC,MAAO,CACNnlB,UAAAA,CAAW2hB,GACI,8BAAVA,EAAEzV,MACLyV,EAAEqC,OAAOzpB,KAAKob,IACb,MAAMsO,EAAM5M,KAAK+N,MAAMzP,GACvBvf,KAAK8uB,QAAUjB,EAAIiB,SAAW,IAGjC,GAEDjI,SAAU,wdDnBV8H,MAAO,CACN,qBAEDC,MAAO,CACNhlB,WAAY,CACXkM,KAAM,CAAEsK,SAAUrd,OAClB8rB,UAAU,GAEXI,SAAUC,QACV/nB,GAAIukB,OACJpG,KAAMoG,OACNyD,WAAY,CAACzD,OAAQ3oB,MAAOid,QAC5BoP,OAAQF,QACR1G,OAAQ,CACP1S,KAAM4V,OACN2D,QAAS,IAEVC,SAAU,CACTxZ,KAAMoZ,QACNG,SAAS,IAGX3J,QAAS,CACR6J,cAAc3O,GACNK,KAAKC,UAAU,CACrBsO,aAAc5O,EAAK4O,aACnBC,iBAAkB7O,EAAK6O,iBACvBnK,KAAM1E,EAAK0E,KACXpL,KAAM0G,EAAK1G,KACXpE,KAAM8K,EAAK9K,OAGb4Z,QAAAA,CAASlZ,GACR,IAAKxW,KAAKivB,SACT,OAAOjvB,KAAK2vB,MAAM,oBAAqBnZ,EAAM6P,OAAOuJ,OAErD,MAAMC,EAAK,IAAIC,aACTC,EAAU,GAChB,IAAK,IAAInP,KAAQ5gB,KAAK4J,WACrBimB,EAAGG,MAAMvI,IAAI7G,GACbmP,EAAQ/E,KAAKhrB,KAAKuvB,cAAc3O,IAEjC,IAAK,IAAIA,KAAQpK,EAAM6P,OAAOuJ,MAEzBG,EAAQ1E,QAAQrrB,KAAKuvB,cAAc3O,IAAS,GAC/CiP,EAAGG,MAAMvI,IAAI7G,GAEf5gB,KAAK2vB,MAAM,oBAAqBE,EAAGD,MACpC,EACAK,UAAAA,CAAW9oB,GACV,MAAM+oB,EAAentB,MAAMotB,KAAKnwB,KAAK4J,YAAYzC,GAE3C0oB,EAAK,IAAIC,aACf,IAAK,IAAIlP,KAAQ5gB,KAAK4J,WACjBgX,IAASsP,GACZL,EAAGG,MAAMvI,IAAI7G,GAEf5gB,KAAK2vB,MAAM,oBAAqBE,EAAGD,MACpC,GAEDb,MAAO,CACNnlB,UAAAA,CAAW2hB,GACV,IAAKA,EACJ,OACD,GAAIA,aAAanL,SAAU,CAC1B,IAAKpgB,KAAKunB,MAAM6I,OACf,OAED,OAAOpwB,KAAKunB,MAAM6I,OAAOR,MAAQrE,CAClC,CAEA,MAAMsE,EAAK,IAAIC,aAEf,IAAK,IAAIlP,KAAQ2K,EAChB,GAAI3K,aAAgBN,KACnBuP,EAAGG,MAAMvI,IAAI7G,OACP,CACN,MAAMyP,EAAU,IAAI/P,KAAK,CAACW,KAAKC,UAAUN,IAAQA,EAAK0E,KAAM,CAC3DxP,KAAM,+BAEP+Z,EAAGG,MAAMvI,IAAI4I,EACd,CAEDrwB,KAAK2vB,MAAM,oBAAqBE,EAAGD,MACpC,GAED/I,SAAU,gqBE1FXyJ,EAAe,CACdhL,KAAM,iBACNjhB,KAAMA,KAAAA,CACLksB,MAAO,KACPC,YAAY,IAEb5B,MAAO,CACN6B,SAAU,CACT3a,KAAM,CAACoZ,QAAQxD,QACf2D,SAAS,EACTqB,UAAU/qB,GACF,CAAC,UAAU,GAAM,GAAOymB,SAASzmB,IAG1CgrB,MAAO,CACN7a,KAAMoZ,QACNG,SAAS,GAEVuB,SAAU,CACT9a,KAAMoZ,QACNG,SAAS,GAEVwB,WAAY3B,QACZ4B,YAAa,CAACpF,OAAO3oB,MAAMid,QAC3B+Q,YAAa,CACZjb,KAAM,CAAC4V,OAAO3oB,MAAMid,QACpBqP,QAAS,IAEV2B,UAAW,CACVlb,KAAM,CAAC4V,OAAO3oB,MAAMid,QACpBqP,QAAS,aAEV4B,YAAa,CACZnb,KAAM,CAAC4V,OAAO3oB,MAAMid,QACpBqP,QAAS,IAEV6B,sBAAuB,CACtBpb,KAAMoZ,QACNG,SAAS,IAGXV,MAAO,CACN,cACA,gBACA,uBACA,cACA,eACA,oBAEDjJ,QAAS,CACRyL,OAAAA,GACC,OAAOnxB,KAAKuwB,MAAMY,SACnB,EACAC,YAAAA,GACC,OAAOpxB,KAAKuwB,MAAMa,cACnB,EACAC,IAAAA,GACC,OAAOrxB,KAAKuwB,MAAMc,MACnB,EACAC,IAAAA,CAAKC,GACJ,OAAOvxB,KAAKuwB,MAAMe,KAAKC,EACxB,EACAhL,MAAAA,GACC,OAAOvmB,KAAKuwB,MAAMhK,QACnB,EACAiL,gBAAAA,GACCxxB,KAAKwwB,YAAcxwB,KAAKwwB,WACxBxwB,KAAK2vB,MAAM,mBACZ,GAED8B,OAAAA,GACKzxB,KAAKunB,MAAMgJ,QACdvwB,KAAKuwB,MAAQ,IAAIrK,UAAUwL,MAAM1xB,KAAKunB,MAAMgJ,MAAO,CAClDE,SAAUzwB,KAAKywB,SACfE,MAAO3wB,KAAK2wB,MACZC,SAAU5wB,KAAK4wB,WAElB,EACAe,KAAAA,CAAMzK,EAAMvI,EAASzC,EAAO0V,GAC3B,MAAMtB,EAAUtwB,KACf6xB,EAAQ,CAAA,OACIrvB,IAAT0kB,IACH2K,EAAMxC,QAAU,IAAMnI,QACT1kB,IAAV0Z,IACH2V,EAAM3V,MAAQ,IAAMA,QACN1Z,IAAXovB,IACHC,EAAMD,OAAS,IAAMA,GAGtB,IAAIE,GAAmB,EAKvB,MAJuB,oBAAbC,WACTD,GAAmB,GAGb,IAAI7uB,QAAQ,CAAC+kB,EAAQnjB,KAC3B,MAAMmtB,EAAW5M,IAAIC,UAAU,CAC9BC,KAAM,cACN2M,MAAKA,IACG,IAAM7M,IAAI8M,EAAE5B,EAAS,CAC3B5N,MAAO,UACH/D,EACJyO,IAAK,QACL,oBAAqB4E,EAASG,SAC3BN,GAELJ,OAAAA,GACCzxB,KAAKunB,MAAMgJ,MAAMe,MAElB,EACAc,aAAAA,GACKpyB,KAAKunB,MAAMgJ,SACc,IAA5BvwB,KAAKunB,MAAMgJ,MAAMhR,OAAmByI,EAAQhoB,KAAKunB,MAAMgJ,MAAMhR,QAAU1a,IACzE,EACA2hB,SAAAA,GACC6L,EAAQ5L,cAAcC,YAAY2L,EACnC,IAEKA,EAAUpN,SAASC,cAAc,OAGnC4M,GACHE,EAASnS,IAAIkS,SAAShyB,OAAOsvB,QAAS,CAACiD,OAAQ,CAACC,QAAS,QAI1DtvB,QAAA+kB,UAAA7jB,KAAA,WAAA,OAAAquB,CAAA,GAAmCruB,KAAMquB,IACxCR,EAASnS,IAAI2S,EAAQnD,SACrB2C,EAAS/K,MAAMoL,GACfpN,SAASiC,KAAKC,YAAYkL,MAG7B,EACAxL,SAAU,u/CCtIX4L,EAAe,CACdC,UAASA,KACD,CACN5S,OAAQ,MACRvd,IAAK,sCAGPowB,iBAAgBA,KACR,CACN7S,OAAQ,MACRvd,IAAK,6CAGPqwB,0BAA0BttB,IAClB,CACNwa,OAAQ,MACRvd,IAAK,oDACL2B,OAAQ,CAAEoB,SAGZutB,yBAAyB7M,IACjB,CACNlG,OAAQ,MACRvd,IAAK,mDACL2B,OAAQ,CAAE4uB,iBAAkB9M,EAAO8M,iBAAkB3hB,YAAa6U,EAAO7U,eAG3E4hB,kCAAkC9c,IAC1B,CACN6J,OAAQ,OACRvd,IAAK,4DACL2B,OAAQ+R,EACRlW,OAAQ,CAACizB,QAAS,CAAE,eAAgB,0BAGtCC,uCAAuChd,IAC/B,CACN6J,OAAQ,OACRvd,IAAK,iEACL2B,OAAQ+R,EACRlW,OAAQ,CAACizB,QAAS,CAAE,eAAgB,0BAGtCE,8BAA8B5W,IACtB,CACNwD,OAAQ,MACRvd,IAAK,wDACL2B,OAAQ,CAAEivB,QAAS7W,KAGrB8W,uBAAAA,CAAwBC,GAEvB,IAAIC,EAAaD,EAAO/a,MACxB,GAAG+a,EAAO/a,iBAAiBib,KAAM,CAKhCD,EAAa,GAJAD,EAAO/a,MAAMkb,iBACZ9H,OAAO2H,EAAO/a,MAAMmb,WAAa,GAAGC,SAAS,EAAG,QAClDhI,OAAO2H,EAAO/a,MAAMqb,WAAWD,SAAS,EAAG,MAGxD,CAEA,MAAO,CACN5T,OAAQ,OACRvd,IAAK,kDACL2B,OAAQ,CACP0vB,YAAaP,EAAOO,YACpBC,mBAAoBR,EAAOS,YAAYD,mBACvCvb,MAAOgb,EACPliB,KAAMiiB,EAAOU,QACbC,iBAAkBX,EAAOW,eACzBC,kBAAmBZ,EAAOY,mBAAqB,GAC/CC,UAAWb,EAAOa,UAClBC,UAAWd,EAAOc,UAClBC,OAAQf,EAAOe,OACftB,iBAAkBO,EAAOP,iBACzBuB,mBAAoBhB,EAAOgB,oBAG9B,EACAC,0BAA0BV,IAClB,CACN9T,OAAQ,OACRvd,IAAK,oDACL2B,OAAQ,CAAE0vB,iBAGZW,iBAAgBA,CAACjc,EAAOub,EAAoBC,EAAaM,EAAQJ,EAAgBQ,EAAmBN,KAC5F,CACNpU,OAAQ,OACRvd,IAAK,2CACL2B,OAAQ,CAAEoU,QAAOub,qBAAoBC,cAAaM,SAAQJ,iBAAgBQ,oBAAmBN,eAG/FO,eAAexrB,IACP,CACN6W,OAAQ,OACRvd,IAAK,yCACL2B,OAAQ,CAAE+E,eAGZyrB,iBAAgBA,KACR,CACN5U,OAAQ,MACRvd,IAAK,6CAIPiN,SAAQA,KACA,CACNsQ,OAAQ,MACRvd,IAAK,qCAGPoyB,iCAAgCA,CAACrrB,EAAgBsrB,EAAU,KACnD,CACN9U,OAAQ,MACRvd,IAAK,2DACL2B,OAAQ,CAAEoF,iBAAgBsrB,aAI5BC,iBAAgBA,KACR,CACN/U,OAAQ,MACRvd,IAAK,6CAGPuyB,oCAAoC7e,IAC5B,CACN6J,OAAQ,OACRvd,IAAK,8DACL2B,OAAQ+R,EACRlW,OAAQ,CAACizB,QAAS,CAAE,eAAgB,0BAGtC+B,yCAAwCA,CAACC,EAAc7jB,KAC/C,CACN2O,OAAQ,OACRvd,IAAK,mEACL2B,OAAQ,CAAC8wB,eAAc7jB,kBC3InB,MAAM8jB,EAAa,CACzB3P,KAAM,aACNsJ,MAAO,CACNsG,OAAQ,CACPpf,KAAMoZ,QACNG,SAAS,IAGXxI,SAAU,kXCFEsO,EAAsB,CAClC7P,KAAM,sBACNC,WAAY,CACXkJ,SACA6B,UACA8E,YAAarD,SAASsD,YACtBC,SAAUvD,SAASwD,SACnBC,SAAUzD,SAAS0D,SACnBC,SAAU3D,SAAS4D,SACnBC,UAAW7D,SAAS8D,UACpBC,aAAc/D,SAASgE,aACvBC,QAASjE,SAASrQ,QAClBuU,QAASlE,SAASmE,QAClBC,gBACAlB,cAEDmB,OAAQ,CAAC,eAAgB,WAAY,aAAc,eACnDxH,MAAO,CACNyH,cAAe,CACdvgB,KAAMkK,OACNqP,QAAS,MAEViH,SAAU,CACTxgB,KAAMoZ,QACNG,SAAS,IAGXhrB,KAAIA,KACI,CACNkyB,SAAS,EACTC,eAAe,EACfC,gBAAiB,KACjBC,mBAAoBnxB,2BAA2B+nB,iBAC/CjjB,KAAM+a,IAAI6H,SAAS,CAClBjU,QAAS,GACT2d,SAAU,GACVC,YAAa,GACbC,cAAe,GACfC,iBAAkB,GAClBC,sBAAuB,GACvBC,aAAc,MAIjBtR,QAAS,CACRuR,kBAAAA,CAAmB5D,GAClB,MAAM6D,EAAUl3B,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQiiB,EAAOjiB,MAEjE,OAAG8lB,GAASpD,YACJoD,GAASG,QAAUr3B,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gCAAkC,KAAO/hB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gCAAkC,MAC5H,IAAtBmV,GAASK,UAAsBlE,EAAOjiB,KAGxC,GAFApR,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,6BAIpC,EACA,cAAMyV,CAASnE,EAAQoE,GAAY,GAClC,OAAIpE,EAAOzS,KAAKE,QAKb2W,IAOK,UANEz3B,KAAKwhB,UAAUjF,QAAQ,CAC/BmF,QAAS1hB,KAAK8hB,GAAGC,EAAE,wCACnBqG,YAAapoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCACxCsG,YAAa,mBACbC,YAAatoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wBACxCwG,YAAa,wBAVdvoB,KAAKwhB,UAAUqG,aAAa7nB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,+BAChD,EAgBT,EACA,sBAAM2V,GAEL,UAAW13B,KAAKw3B,SAASx3B,KAAKy2B,iBAAiB,GAE9C,OAAO,EAIR,MAAMxgB,EAAW,IAAI8J,SACrB9J,EAAS4K,OAAO,qBAAsB7gB,KAAKy2B,gBAAgB5C,oBAC3D5d,EAAS4K,OAAO,mBAAoB7gB,KAAKy2B,gBAAgB3D,kBACzD7c,EAAS4K,OAAO,cAAe7gB,KAAKy2B,gBAAgB7C,aACpD3d,EAAS4K,OAAO,cAAe7gB,KAAKq2B,cAAcllB,aAClD8E,EAAS4K,OAAO,aAAc7gB,KAAKq2B,cAAcsB,YAEjD1hB,EAAS4K,OAAO,UAAW7gB,KAAKqK,KAAc,QAAE2O,SAChD/C,EAAS4K,OAAO,WAAY7gB,KAAKqK,KAAe,UAChD4L,EAAS4K,OAAO,cAAe7gB,KAAKqK,KAAkB,aACtD4L,EAAS4K,OAAO,gBAAiB7gB,KAAKqK,KAAoB,eAC1D4L,EAAS4K,OAAO,mBAAoB7gB,KAAKqK,KAAuB,kBAChE4L,EAAS4K,OAAO,eAAgB7gB,KAAKqK,KAAmB,cAExD,IAAK,IAAIgW,EAAI,EAAGA,EAAIrgB,KAAKy2B,gBAAgB7V,KAAKE,OAAQT,IACrDpK,EAAS4K,OAAO,OAAQ7gB,KAAKy2B,gBAAgB7V,KAAKP,IAEnDrgB,KAAKu2B,SAAU,EACfv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUM,kCAAkC9c,IACzD9R,KAAKC,IACLpE,KAAK43B,gBAAgBxzB,EAAKpE,KAAKy2B,mBAC7BoB,QAAQ,KACV73B,KAAKu2B,SAAU,IAGjBv2B,KAAKunB,MAAMuQ,mCAAmCzG,MAC/C,EACA0G,cAAAA,CAAe1E,GACd,MAAM9wB,EAAM,yEAAyE8wB,EAAOO,2BAA2B5zB,KAAKq2B,cAAcllB,gCAAgCnR,KAAKq2B,cAAcvD,mBAE7LkF,OAAO3b,KAAK9W,2BAA2BC,SAAWD,2BAA2BE,UAAYlD,EAE1F,EACA01B,UAAAA,CAAWC,GACV,MAAM9vB,EAAO,IAAImrB,KAAK2E,GAEhBC,EAAWC,GAAQ1M,OAAO0M,GAAK1E,SAAS,EAAG,KAE3C2E,EAAQF,EAAQ/vB,EAAKqrB,WAAa,GAIxC,MAAO,GAHK0E,EAAQ/vB,EAAKurB,cAGR0E,KAFJjwB,EAAKorB,eAGnB,EACA,YAAMpD,CAAOiD,GAGZ,UAAYrzB,KAAKw3B,SAASnE,GAEzB,OAAO,EAGR,GAA8C,QAA3CA,EAAOS,aAAaD,mBAEtB7zB,KAAKy2B,gBAAkBpD,EACvBrzB,KAAKunB,MAAMuQ,mCAAmCxG,WACxC,CACN,MAAMrb,EAAW,IAAI8J,SACrB9J,EAAS4K,OAAO,qBAAsBwS,EAAOQ,oBAC7C5d,EAAS4K,OAAO,mBAAoB7gB,KAAKq2B,cAAcvD,kBACvD7c,EAAS4K,OAAO,cAAewS,EAAOO,aACtC3d,EAAS4K,OAAO,cAAe7gB,KAAKq2B,cAAcllB,aAClD8E,EAAS4K,OAAO,aAAc7gB,KAAKq2B,cAAcsB,YAEjD,IAAK,IAAItX,EAAI,EAAGA,EAAIgT,EAAOzS,KAAKE,OAAQT,IACvCpK,EAAS4K,OAAO,OAAQwS,EAAOzS,KAAKP,IAGrCrgB,KAAKu2B,SAAU,EACfv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUQ,uCAAuChd,IAC9D9R,KAAKC,IACLpE,KAAK43B,gBAAgBxzB,EAAKivB,KACxBwE,QAAQ,KACV73B,KAAKu2B,SAAU,GAElB,CACD,EACAqB,eAAAA,CAAgBxzB,EAAKivB,GACE,WAAnBjvB,EAAIob,KAAKxR,QACXhO,KAAKwhB,UAAU8F,aAAatnB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sCAGvDsR,EAAOiF,aAAc,IAAI/E,MAAOgF,cAActK,MAAM,KAAK,QAC9BzrB,IAAxB4B,GAAKC,MAAMm0B,WACbnF,EAAOmF,SAAWp0B,EAAIC,KAAKm0B,WAI5Bx4B,KAAKwhB,UAAUI,WAAW5hB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,oCAGnD3d,EAAIob,KAAKiZ,cACXz4B,KAAKwhB,UAAUoG,UAAUxjB,EAAIob,KAAKiZ,aAIpC,EACAC,eAAeC,GACPA,EAAO3f,QAEf4f,wBAAAA,CAAyBvF,GACxB,MAAM6D,EAAUl3B,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQiiB,EAAOjiB,MACjE,OAAO8lB,EAAUA,EAAQpD,YAAc,EACxC,GAED/E,MAAO,CACNsH,aAAAA,CAAcwC,GAEb74B,KAAKqK,KAAK2O,QAAU6f,EAAO7f,QAAUhZ,KAAK02B,mBAAmBnJ,KAAKiB,GAAQA,EAAKxV,SAAW6f,EAAO7f,SAAWhZ,KAAK02B,mBAAmBnJ,KAAKiB,GAAwB,UAAhBA,EAAKxV,SACtJhZ,KAAKqK,KAAKssB,SAAWkC,EAAOlC,UAAY,GACxC32B,KAAKqK,KAAKusB,YAAciC,EAAOjC,aAAe,GAC9C52B,KAAKqK,KAAKwsB,cAAgBgC,EAAOhC,eAAiB,GAClD72B,KAAKqK,KAAKysB,iBAAmB+B,EAAO/B,kBAAoB,GACxD92B,KAAKqK,KAAK0sB,sBAAwB8B,EAAO9B,uBAAyB,GAClE/2B,KAAKqK,KAAK2sB,aAAe6B,EAAO7B,cAAgB,CAEjD,GAEDrQ,SAAU,CACTmS,aAAAA,GACC,OAAO94B,KAAK+4B,YAAc/4B,KAAKq2B,cAAc/sB,cAC9C,EACA0vB,kBAAiBA,KAET,CACN3V,KAAM,CACL4V,MAAO,CACNC,OAAQ,QAGV7G,QAAS,CACR4G,MAAO,CACNE,QAAS,UAKbC,MAAAA,GACC,OAAOp5B,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,0CACnC,EACAsX,wBAAAA,GACC,OAAOr5B,KAAKqK,KAAKwsB,cAAc/V,OAAS,GAAK9gB,KAAKqK,KAAKysB,iBAAiBhW,OAAS,GAAK9gB,KAAKqK,KAAKssB,SAAS7V,OAAS,GAAK9gB,KAAKqK,KAAKusB,YAAY9V,OAAS,GAAK9gB,KAAKqK,KAAK2sB,aAAe,CACrL,EACAsC,yBAAAA,GACC,OAAOt5B,KAAKw2B,eAAiBx2B,KAAKq5B,wBACnC,EACAE,0BAAAA,GACC,IAAIC,GAAa,EAOjB,OANAx5B,KAAKq2B,eAAeoD,cAAczY,QAAQ0Y,IACT,aAA7BA,EAAO7F,oBACuB,aAA7B6F,EAAO7F,qBACV2F,GAAa,KAGRA,CACR,EACAG,oBAAAA,GACC,MAAO,CACNh0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mCAClCW,MAAO,iBAET,EACAkX,kBAAAA,GACC,MAAO,CACNj0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,iCAClCW,MAAO,iBAET,EACAmX,mBAAAA,GACC,MAAO,CACNl0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCAClCW,MAAO,iBAET,EACAoX,kBAAAA,GACC,MAAO,CACNn0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mCAClCW,MAAO,iBAET,EACAqX,mBAAAA,GACC,MAAO,CACNp0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCAClCW,MAAO,iBAET,EACAsX,mBAAAA,GACC,MAAO,CACNr0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCAClCW,MAAO,iBAET,EACAuX,wBAAAA,GACC,MAAO,CACNt0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uCAClCW,MAAO,iBAET,EACAwX,4BAAAA,GACC,OAAGl6B,KAAKm6B,WACA,CACNx0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mDAClCW,MAAO,kBAGD,CACN/c,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gDAClCW,MAAO,iBAGV,EACA0X,iCAAAA,GACC,MAAO,CACNz0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gDAClCW,MAAO,iBAET,EACA2X,mBAAAA,GACC,MAAO,CACN10B,MAAO3F,KAAK8hB,GAAGC,EAAE,iCACjBW,MAAO,iBAET,EACA4X,wBAAAA,GACC,MAAO,CACN30B,MAAO3F,KAAK8hB,GAAGC,EAAE,sCACjBW,MAAO,iBAET,GAED6X,OAAAA,GAEA,EACA9I,OAAAA,GAEA,EACA5K,SAAU,mvgBCrUL2T,EAAO,gBACPC,EAAQC,MAAMC,SAASC,MAAMC,QAAQL,GAEpC,SAASM,EAAkBzH,EAAQ8D,GACzC,MAAM7e,EAAQoiB,MAAMC,SAASI,QAAQ1H,EAAO/a,MAAO,CAAEkiB,SAAQQ,MAAM,OAC7D1C,EAAcjF,EAAOiF,YAAcoC,MAAMC,SAASI,QAAQ1H,EAAOiF,YAAa,CAAEkC,SAAU,KAChGnH,EAAO4H,WAAa3iB,EAAM4iB,KAAKT,EAAO,QAAQU,KAC9C,MAAMC,EAAS9C,GAAeA,EAAchgB,EAG5C,GAAI+a,EAAOjiB,KAAM,CAChB,MAAMgmB,EAA6B,iBAAhB/D,EAAOjiB,KAAoBiiB,EAAOjiB,KAAO+lB,EAAa5J,KAAK8N,GAAQA,EAAKjqB,MAAQiiB,EAAOjiB,MAC1G,IAAqB,IAAjBgmB,GAAKC,QAAkB,MAAO,YAC7B,IAAqB,IAAjBD,GAAKC,QAAmB,MAAO,gBACzC,CAGA,OAAIhE,EAAOS,aAAayD,UAAYjf,GAASmiB,EACrC,0BAIJpH,EAAOW,eACNX,EAAOiF,YACH8C,EAAS,aAAe,YAI5B9iB,EAAQmiB,EAAc,WACtBpH,EAAO4H,YAAc,GAAW,YAC7B,WAID3iB,EAAQmiB,EAAQ,WAAa,UACrC,CC9BO,MAAMa,GAAoB,CAChChW,KAAM,oBACNC,WAAY,CACXqQ,UAAW7D,SAAS8D,UACpBC,aAAc/D,SAASgE,aACvBzF,uBACAiL,EACAtG,cAEDvR,OAAAA,GACC,MAAO,CACNyT,aAAc/R,IAAIuB,SAAS,IAAM3mB,KAAKm3B,cACtCgD,WAAY/U,IAAIuB,SAAS,IAAM3mB,KAAKm6B,YACpCpB,YAAa3T,IAAIuB,SAAS,IAAM3mB,KAAK+4B,aAEvC,EACAnK,MAAO,CACN4M,iBAAkB,CACjBnM,QAAS,MAEVoM,SAAU,CACT3lB,KAAMkK,OACN6O,UAAU,EACVQ,QAASA,KAAAA,CAAQ/pB,IAAK,KACtBorB,UAAU/qB,GACFA,GAASA,EAAML,MAIzBjB,KAAIA,KACI,CACNq3B,eAAgB,CAAC,GACjBC,kBAAmB,KACnBC,eAAgB,KAChBC,iBAAiB,EACjBtF,SAAS,EACTY,aAAc,KACdnR,OAAQ,KACR8V,gBAAiB,KACjBC,sBAAuB,KACvBhD,YAAa,OAGfrT,QAAS,CACRsW,uBAAAA,CAAwBC,GACvB,IAAIC,GAAe,EACfC,GAAe,EAanB,OAXAF,EAAQjb,QAAQe,IACf,MAAMqa,EAAap8B,KAAKm3B,cAAc5J,KAAK6J,GAAOA,EAAIhmB,MAAQ2Q,EAAE3Q,MAC7DgrB,GAAcA,EAAW/E,UACA,aAAxBtV,EAAE8R,mBACJqI,GAAe,EACkB,aAAxBna,EAAE8R,qBACXsI,GAAe,MAKXD,GAAgBC,CACxB,EACAE,yBAAAA,CAA0BJ,GACzB,MAAMK,EAAeL,EAAQ1O,KAAKxL,GAA6B,aAAxBA,EAAE8R,oBACnC0I,EAAeN,EAAQ1O,KAAKxL,GAA6B,aAAxBA,EAAE8R,oBAEzC,IAAI2I,GAAgB,EACjBF,IACFE,GAAgB,EAEhBP,EAAQjb,QAAQe,IACf,MAAMqa,EAAap8B,KAAKm3B,cAAc5J,KAAK6J,GAAOA,EAAIhmB,MAAQ2Q,EAAE3Q,MAC7DgrB,GAAcA,EAAW/E,SACC,aAAxBtV,EAAE8R,qBACL2I,GAAgB,MAMpB,IAAIC,GAAgB,EAcpB,OAbGF,IACFE,GAAgB,EAEhBR,EAAQjb,QAAQe,IACf,MAAMqa,EAAap8B,KAAKm3B,cAAc5J,KAAK6J,GAAOA,EAAIhmB,MAAQ2Q,EAAE3Q,MAC7DgrB,GAAcA,EAAW/E,SACC,aAAxBtV,EAAE8R,qBACL4I,GAAgB,MAMbD,GAAiBC,CACzB,EACAC,UAAAA,CAAWt0B,GACV,MAAMu0B,EAAWjC,MAAMC,SAASI,QAAQ3yB,EAAM,CAAEoyB,KAAM,kBAAmBQ,MAAM,OAE/E,OADoBN,MAAMC,SAASC,MAAMC,QAAQ,iBAC5B8B,CACtB,EACAC,kBAAAA,CAAmBjuB,GAClB3O,KAAKu2B,SAAU,EACfv2B,KAAK68B,YAAYluB,GAASxK,KAAMC,IAC/B,MAAM04B,EAAK98B,KAAK87B,iBAAiBvO,KAAKwP,GAAgBA,EAAajK,kBAAoBnkB,EAAQmkB,kBAC/FgK,EAAGrD,cAAgBr1B,EAAIC,KAAK,GAAG2kB,OAE/B,MAAMgU,EAA0B,OAAZF,EAAG1rB,KAEvB0rB,EAAGrD,cAAczY,QAAQqS,IAIxB,GAHAA,EAAOzS,KAAO,GACdyS,EAAO4J,iBAAkB,EAEO,OAA7B5J,EAAOQ,mBAA6B,CAItC,MAAMqJ,GAAS7J,EAAOa,YAAal0B,KAAK08B,WAAWrJ,EAAO/a,OAC1D+a,EAAO4J,gBAAkBC,GAAUl9B,KAAKq8B,0BAA0BS,EAAGrD,cAOtE,MAAUpG,EAAOa,UAChBb,EAAO4J,iBAAmBj9B,KAAK08B,WAAWrJ,EAAO/a,OAGjD+a,EAAO4J,gBAAkB5J,EAAOW,eAI9BgJ,IAAa3J,EAAO4J,iBAAkB,GAGzC5J,EAAOS,YAAc9zB,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,qBAAuBR,EAAOQ,oBAC1FR,EAAO8J,UAAYrC,EAAkBzH,EAAQrzB,KAAKm3B,gBAGnD2F,EAAGM,SAAWp9B,KAAKq9B,cAAcP,GACjCA,EAAG3rB,YAAcnR,KAAKmR,YAEtBnR,KAAK+7B,sBAAwBe,EAE7B98B,KAAKunB,MAAM+V,2BAA2BhM,SAEpCuG,QAAQ,KAAK73B,KAAKu2B,SAAQ,GAC9B,EACAgH,sBAAsBC,GAGd,mKAFKA,EAAKC,WAG+D,aAEjFC,eAAAA,CAAgBF,GACf,MAAMtP,EAAMsP,EAAKC,WAEjB,MAAgB,kBAAbvP,EAAIyP,KACC,+JAEgB,wBAAbzP,EAAIyP,KACP,iKADD,CAIR,EACAC,cAAcJ,GAEL,mGADIA,EAAKC,WAEA,kEAElBI,qBAAqBL,GACRA,EAAKC,WAET,4JAEM,IAEfK,gBAAgBnnB,GAER,UAAYA,EAAQonB,MAE5BV,cAAc3D,IACLA,EAAOsE,UAAYtE,EAAOsE,UAAY,IAAM,IAAMtE,EAAOuE,SAAW,IAAMvE,EAAOwE,WAAaxE,EAAOyE,WAAa,IAAMzE,EAAOyE,WAAa,IAErJ,eAAMC,CAAU/5B,GAEf,MAAMy3B,EAAkBz3B,EAAK,IAAM,KAC/By3B,IACJ97B,KAAK87B,gBAAkBA,EAAgB34B,IAAIwT,IAGnC,IACHA,EACHhI,QAAS,CACRwC,YAAanR,KAAKmR,YAClB2hB,iBAAkBnc,EAAQmc,iBAC1BuB,mBAAoB1d,EAAQghB,WAC5B0G,mBAAoB1nB,EAAQ0nB,mBAC5BV,KATS,iBAWVW,aAAc3nB,EAAQ4nB,eAAiB,KACvCC,aAAc7nB,EAAQ8nB,eAAiB,KACvCC,IAAK/nB,EAAQ/N,uBACb+1B,IAAKhoB,EAAQioB,WACbC,KAAM7+B,KAAK89B,gBAAgBnnB,GAC3BymB,SAAUp9B,KAAKq9B,cAAc1mB,GAC7B8B,IAAK9B,EAAQmoB,sBACbC,MAAOpoB,EAAQooB,SAIlB,EACAC,mBAAAA,GACCh/B,KAAKoqB,KAAKoC,KAAKiG,EAAUG,0BAA0B5yB,KAAKmR,cACtDhN,KAAKC,IACFA,GAAKC,MAAMrE,KAAKo+B,UAAUh6B,EAAIC,OAEpC,EACAw4B,WAAAA,CAAYluB,GACX,OAAO,IAAI1L,QAAS+kB,IACnBhoB,KAAKoqB,KAAKoC,KAAKiG,EAAUI,yBAAyBlkB,IAChDxK,KAAKC,IACL4jB,EAAQ5jB,MAGZ,EACA,kBAAM66B,GACLj/B,KAAKg/B,qBACN,EACAE,+BAAAA,CAAgC7I,GAC/B,IAAIna,EAAQ,GAIZ,OAFAA,GAASma,EAAc0I,OAAS/+B,KAAK8hB,GAAGC,EAAE,wBAEnC7F,CACR,EACAijB,YAAY9I,GACRA,EAAc0H,MACT,UAAU1H,EAAc0H,MAClB,GAEf9G,kBAAAA,CAAmBZ,GAClB,GAAGA,EAAcjlB,MAAQpR,KAAKm3B,aAAc,CAC3C,MAAMD,EAAUl3B,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQilB,EAAcjlB,MACxE,OAAO8lB,GAASpD,WACjB,CACC,MAAO,EAET,EACAsL,0BAAAA,CAA2B/I,GAC1B2B,OAAO3b,KAAKga,EAAciI,aAC3B,EACAe,0BAAAA,CAA2BhJ,GAC1B2B,OAAO3b,KAAKga,EAAcmI,aAC3B,GAEDzP,MAAO,CAAA,EAGPpI,SAAU,CACTwT,UAAAA,GACC,OAAOn6B,KAAKmR,cAAgBnR,KAAKy7B,SAASn2B,GAC3C,EACA6L,WAAAA,GACC,OAAOnR,KAAKw7B,kBAAoBx7B,KAAKy7B,UAAUn2B,KAAO,IACvD,GAED,aAAMi1B,GACLv6B,KAAK47B,eAAiB57B,KAAK8hB,GAAGxhB,aAAa,CAAC,aAAc,WAC1DN,KAAK47B,eAAez3B,KAAK,KAAMnE,KAAK67B,iBAAkB,IAEtD77B,KAAKu2B,SAAU,QAETv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUjjB,YAAYrL,KAAKC,IACzB,WAAnBA,EAAIob,KAAKxR,SACXhO,KAAKm3B,aAAe/yB,EAAIC,KAAK,GAE7BrE,KAAKs/B,oBAAsBt/B,KAAKm3B,aAAahuB,OAC5CiuB,GAAOhzB,EAAIC,KAAK,GAAG+nB,SAASgL,EAAIhmB,UAGhCymB,QAAQ,KACV73B,KAAKu2B,SAAU,IAIhBv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUiC,oBAAoBvwB,KAAKC,IACjDpE,KAAK27B,kBAAoBv3B,EAAIC,OAC3Bk7B,MAAM11B,IACR7J,KAAKu2B,SAAU,IAIhBv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUE,oBAAoBxuB,KAAKC,IACjDpE,KAAK+4B,YAAc30B,EAAIC,MAAM00B,cAC3BwG,MAAM11B,IACR7J,KAAKu2B,SAAU,GAEjB,EACA9E,OAAAA,GACCzxB,KAAKi/B,cACN,EACApY,SAAU,+hKChSE2Y,GAAgB,CAC5B7Q,MAAO,CAAC,eACRC,MAAO,CACN6Q,QAAS,CACR3pB,KAAMoZ,SAEPwQ,YAAa,CACZ7Q,UAAU,EACV/Y,KAAM6pB,UAEPC,sBAAuB,CAAA,GAExB7Q,MAAO,CAIN0Q,QAAS,SAAUI,EAAUC,GAC5B9/B,KAAK+/B,WACN,GAED17B,KAAM,WACL,MAAO,CACNkyB,SAAS,EACThsB,OAAO,EACPy1B,aAAc,KAEhB,EACAzF,QAAS,WACRv6B,KAAK+/B,WACN,EACAra,QAAS,CAIRqa,UAAW,WAMV,GALA//B,KAAKu2B,SAAU,EACfv2B,KAAKuK,OAAQ,EACbvK,KAAKggC,aAAe,KAGW,mBAApBhgC,KAAK0/B,YAChB,CAEQ,IAAIO,EAAoBjgC,KAAK0/B,YAAY1/B,KAAK4/B,uBAGjDK,aAA6Bh9B,QAEhCg9B,EACE97B,KAAKnE,KAAKkgC,gBACVX,MAAMv/B,KAAKmgC,cACXtI,QAAQ73B,KAAKogC,gBAIfpgC,KAAKqgC,SAAS,mDAEhB,MAGCrgC,KAAKqgC,SAAS,yCAEhB,EAIAA,SAAU,SAASL,GAClBhgC,KAAKu2B,SAAU,EACfv2B,KAAKuK,OAAQ,EACbvK,KAAKggC,aAAeA,CACrB,EAIAE,eAAgB,SAAS/1B,GACxBnK,KAAK2vB,MAAM,cAAexlB,EAAWA,EAAS9F,UAAO7B,EACtD,EAIA29B,aAAc,SAAS51B,GAClBA,EAAMJ,UAAU9F,MAAM2kB,OACzBhpB,KAAKqgC,SAAS91B,EAAMJ,SAAS9F,KAAK2kB,QAC1Bze,EAAMlG,MAAMqd,QACpB1hB,KAAKqgC,SAAS91B,EAAMlG,KAAKqd,SAEzB1hB,KAAKqgC,SAAS91B,EAAMmX,QACtB,EAIA0e,eAAgB,WACfpgC,KAAKu2B,SAAU,CAChB,GAED1P,SAAU,0RClGLyZ,GAA8B,8BAKpC,IAAAC,GAAe,CACd3R,MAAO,CACN4R,QAAS,CACR1qB,KAAM/S,MACNssB,QAAS,IAEVoR,QAAS,CACR3qB,KAAM/S,MACNssB,QAAS,IAEVqR,OAAQ,CACP5qB,KAAM/S,MACNssB,QAAS,KAGXV,MAAO,CACNgS,aAAc,CAAC,YACfC,kBAAmB,CAAC,gBACpBx/B,iBAAkB,CAAC,qBAEpBiD,KAAM,WACL,MAAO,CACNw8B,cAAe,GAEjB,EACAla,SAAU,CACTma,KAAAA,GACC,OAAO9gC,KAAKygC,QAAQhgB,OAAO,CAAC7b,EAAEm8B,KAC7B,IAAIjrB,EAAOirB,EAAEjrB,KAAKgT,cAgBlB,OAfIhT,EAAKuV,QAAQ,QAAU,EAC1BzmB,EAAEm8B,EAAEzb,MAAQ,UAEZxP,EAAKuV,QAAQ,YAAc,GAC3BvV,EAAKuV,QAAQ,SAAW,GACxBvV,EAAKuV,QAAQ,WAAa,EAE1BzmB,EAAEm8B,EAAEzb,MAAQ,OAEZxP,EAAKuV,QAAQ,cAAgB,GAC7BvV,EAAKuV,QAAQ,SAAW,EAExBzmB,EAAEm8B,EAAEzb,MAAQ,OAEZ1gB,EAAEm8B,EAAEzb,MAAQ,GACN1gB,GACL,CAAA,EACJ,GAEDmqB,MAAO,CACN2R,MAAAA,CAAOnV,GACNvrB,KAAK6gC,cAAgBtV,CACtB,GAED7F,QAAS,CACRib,YAAAA,CAAaK,GACZhhC,KAAK2vB,MAAM,eAAgBqR,EAAIC,cAAct7B,MAC9C,EACAi7B,iBAAAA,GACC,MAAMM,EAAiBlhC,KAAK6gC,cAAc13B,OAAOqgB,GAAMA,EAAGlE,MAAQgb,IAC9DY,EAAe/3B,OAAOqgB,GAAsB,IAAhBA,EAAG2X,WAAiBrgB,OACnDgH,MAAM,sCAEN9nB,KAAK2vB,MAAM,oBAAqBuR,EAClC,EACAE,QAAAA,CAASJ,GACRhhC,KAAK6gC,cAAc7V,KAAK,CACvB1F,KAAMgb,IAER,EACAe,WAAAA,CAAY3U,GACX1sB,KAAK6gC,cAAcS,OAAO5U,EAAO,EAClC,GAED7F,SAAU,+zJC3EX0a,GAAe,CACd3S,MAAO,CACN8R,OAAQ39B,MACRy+B,SAAU,CACT1rB,KAAM/S,MACNssB,QAAS,IAEVoS,MAAO,CACN3rB,KAAMkK,OACNqP,QAAS,CAAA,IAGXV,MAAO,CACN0C,KAAM,CAAC,aACPC,KAAM,CAAC,cAERjtB,KAAM,WACL,MAAO,CACNq9B,eAAgB,GAElB,EACA3S,MAAO,CACNyS,QAAAA,CAASjW,GACRvrB,KAAK0hC,eAAiBnW,CACvB,GAED7F,QAAS,CACRa,MAAAA,CAAO0E,IACoC,GAAtCjrB,KAAK0hC,eAAerW,QAAQJ,IAE/BjrB,KAAK0hC,eAAeJ,OAAOthC,KAAK0hC,eAAerW,QAAQJ,GAAQ,GAC/DjrB,KAAK2vB,MAAM,OAAQ1E,KAInBjrB,KAAK0hC,eAAe1W,KAAKC,GACzBjrB,KAAK2vB,MAAM,OAAQ1E,GAErB,GAEDpE,SAAU,meC3CX,MAAM8a,GAAgB,CACrBC,UAAW,gBACXC,KAAM,gBACNC,IAAK,cACLpZ,KAAM,eACNqZ,KAAM,UACNC,IAAK,eAEAC,GAAiB,CACtBL,UAAW,wBACXC,KAAM,mBACNC,IAAK,kBACLpZ,KAAM,mBACNqZ,KAAM,mBACNC,IAAK,oBAON,IAAAE,GAAe,CACdtT,MAAO,CACNuT,UAAWniB,OACXjgB,OAAQ,CACP+V,KAAM,CAACoZ,QAASxD,OAAQiU,SAAU58B,MAAOid,QACzCqP,SAAS,GAEV+S,UAAW,CAAC1W,OAAQ3oB,MAAOid,SAE5B2G,SAAU,CACT0b,aAAAA,GACC,IAAKriC,KAAKD,OACT,OAAO,EAER,IAAIA,EAASC,KAAKD,OAElB,GAAIA,aAAkB4/B,SACrB,MAAO,CAAC5/B,GAET,GAAe,OAAXA,EACH,MAAO,GAQR,IANoB,IAAhBC,KAAKD,SACRA,EAAS,CAAC,QAEoC,oBAA3CigB,OAAOsiB,UAAUC,SAAS/V,KAAKzsB,KAClCA,EAASA,EAAOkuB,MAAM,MAED,iBAAXluB,IAAwBgD,MAAMC,QAAQjD,GAAS,CACzD,IAAIyiC,EAAY,GAChB,IAAK,IAAIC,KAAK1iC,EAAQ,CACrB,IAAmB+V,EAAf4sB,EAAI3iC,EAAO0iC,GAEVC,IAGqC,oBAAtC1iB,OAAOsiB,UAAUC,SAAS/V,KAAKkW,GAErB,QADb5sB,EAAO9V,KAAK2iC,sBAAsBD,IAEjCF,EAAUxX,KAAK,CACd4X,KAAM,YAAcjB,GAAc7rB,GAClC+sB,MAAOH,IAAMD,EAAIR,GAAensB,GAAQ2sB,EACxCK,UAAWhtB,IAIA,QADZA,EAAO9V,KAAK2iC,sBAAsBF,IAEjCD,EAAUxX,KAAK,CACd4X,KAAM,YAAcjB,GAAc7rB,GAClC+sB,MAAOH,EACPI,UAAWhtB,IAGZgS,MAAM,WAAa2a,EAAI,QAAUC,EAAI,sCAGhB,iBAANA,GAAmB3/B,MAAMC,QAAQ0/B,GAiBrC,QADb5sB,EAAO9V,KAAK2iC,sBAAsBF,IAEjCD,EAAUxX,KAAK,CACd4X,KAAM,YAAcjB,GAAc7rB,GAClC+sB,MAAOZ,GAAensB,GACtBgtB,UAAWhtB,IAGZgS,MAAM2a,EAAI,0CAtBE,QADb3sB,EAAO9V,KAAK2iC,sBAAsBF,UAEbjgC,IAAhBkgC,EAAEI,YACLJ,EAAEI,UAAYhtB,QACCtT,IAAZkgC,EAAEG,QACLH,EAAEG,MAAQZ,GAAensB,SACXtT,IAAXkgC,EAAEE,OACLF,EAAEE,KAAOjB,GAAc7rB,IACxB0sB,EAAUxX,KAAK0X,UAEClgC,IAAZkgC,EAAEG,QACLH,EAAEG,MAAQJ,GACXD,EAAUxX,KAAK0X,IAclB,CACA3iC,EAASyiC,CACV,CAEA,GAAIz/B,MAAMC,QAAQjD,GAClB,CA4BC,GA3BAA,EAASA,EAAOoD,IAAIqmB,IACnB,GAA2C,oBAAvCxJ,OAAOsiB,UAAUC,SAAS/V,KAAKhD,GAA2B,CAC7D,IAAIsZ,EAAY9iC,KAAK2iC,sBAAsBnZ,GAC3C,OAAkB,OAAdsZ,EACI,KACD,CACNF,KAAM,YAAcjB,GAAcmB,GAClCD,MAAOZ,GAAea,GACtBA,YAEF,CAEA,GAAItZ,aAAcmW,SACjB,MAAO,CACNmD,UAAWtZ,GAGb,GAAkB,iBAAPA,IAAoBzmB,MAAMC,QAAQwmB,IAAc,OAAPA,EAAa,CAChE,GAAIA,EAAGsZ,qBAAqBnD,SAC3B,OAAOnW,EACR,GAAIxpB,KAAK+iC,sBAAsBvZ,EAAGsZ,WACjC,OAAOtZ,CACT,CAEA,OAAO,OACLrgB,OAAOqgB,GAAa,OAAPA,GAEZzpB,EAAO+gB,OAAS,EACnB,OAAO/gB,EAER,GAAIA,EAAOoJ,OAAOqgB,GAAMA,EAAGqZ,OAASrZ,EAAGoZ,MAAM9hB,QAAU/gB,EAAO+gB,OAC7D,OAAO/gB,EAER+nB,MAAM,mBACP,CAEA,MAAO,EACR,GAEDpC,QAAS,CACRid,qBAAAA,CAAsB5Y,GACrB,IAAIiZ,EAAUjZ,EAAMjB,cAEpB,MAAe,aAAXka,EACI,YAEJ,CAAC,OAAQ,MAAO,OAAQ,OAAQ,OAAO5W,SAAS4W,GAC5CA,EAED,IACR,EACAD,qBAAAA,CAAsBhZ,GACrB,IAAI+Y,EAAY9iC,KAAK2iC,sBAAsB5Y,GAC3C,IAAK+Y,EAEJ,OADAhb,MAAMiC,EAAQ,uCACP,EAER,GAAiB,QAAb+Y,IACE9K,OAAOiL,KAEX,OADAnb,MAAM,4BACC,EAGT,GAAiB,OAAbgb,EAAoB,CACvB,IAAK9K,OAAOkL,MAEX,OADApb,MAAM,6BACC,EAGR,IADU,IAAIob,MAAMC,MAAM,CAAA,GACjBC,UAER,OADAtb,MAAM,sCACC,CAET,CACA,OAAO,CACR,EACAub,QAAAA,CAAStjC,GACRC,KAAKmiC,UAAUkB,SAAStjC,EAAO+iC,UAAW/iC,EAAO6gB,KAAM7gB,EAAO4e,QAC/D,GAEDkI,SAAU,4pCC/MX,MAAMyc,GAAiB,IAAIC,QAE3B,IAAAC,GAAe,CACd/R,OAAAA,CAAQjI,EAAIia,GACX,IAAIpnB,GAAO,EACXinB,GAAe56B,IAAI8gB,EAAIwX,IACtB,IAAK3kB,EACJ,OAED,GAAImN,EAAGka,SAAS1C,EAAI3a,QACnB,OAED,MAAMsd,EAAWzd,UAAUC,SAASyd,YAAYpa,GAC5Cma,GACHA,EAAStS,SAEX7H,EAAGqa,iBAAiB,oBAAqB,KACxCxnB,GAAO,IAERmN,EAAGqa,iBAAiB,mBAAoB,KACvCxnB,GAAO,IAER4I,SAAS4e,iBAAiB,QAASP,GAAe9iC,IAAIgpB,IAAK,EAC5D,EACA4I,aAAAA,CAAc5I,EAAIia,GACjBxe,SAAS6e,oBAAoB,QAASR,GAAe9iC,IAAIgpB,WAClDA,EAAGua,uBACX,GClBc/L,OAAOgM,WAAWC,aAAa,SAAU,QAAS,CAChEC,oBAAAA,CAAqBzD,EAAS0D,GAC7B,IAAIC,EAAY,EAChBC,EAAarkC,KAAKskC,MAAMC,WAAWC,QAAQC,YAC3CC,EAAM,EACNC,GAAU,EAEVlE,EAAQzf,QAAQ,CAAC4jB,EAAQvkB,KACnBukB,EAAOC,YACXD,EAAOE,qBAGJ9kC,KAAKskC,MAAM3lB,QAAQomB,iBAAmBH,EAAOI,QAAQC,WAAWC,QAAUN,EAAOM,UAAYN,EAAOO,WAAWC,UAClHT,EAAUC,GAGPA,EAAOM,UACVd,GAAaQ,EAAOS,cAIlBV,GACHD,EAAML,EAAaD,EAAYO,EAAQU,WAEnCrlC,KAAKskC,MAAM3lB,QAAQomB,kBAAoB/kC,KAAKskC,MAAMgB,UAAU,oBAAoB,KACnFX,EAAQY,SAAS,GACjBvlC,KAAKskC,MAAMU,QAAQD,iBAAiB5xB,UAGjCuxB,EAAM,EACTC,EAAQY,SAASb,GAEjBC,EAAQG,qBAGL9kC,KAAKskC,MAAM3lB,QAAQomB,kBAAoB/kC,KAAKskC,MAAMgB,UAAU,oBAAoB,IACnFtlC,KAAKskC,MAAMU,QAAQD,iBAAiB5xB,QAGvC,IC/BD,IAAAqyB,GAAe,CACdpkC,iBAAiBC,IACT,CACNye,OAAQ,OACRvd,IAAK,2CACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBC,iBAAkBH,EAASG,oBAI9BC,mBAAmBJ,IACX,CACNye,OAAQ,OACRvd,IAAK,6CACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,YAItBC,kBAAkBN,IACV,CACNye,OAAQ,OACRvd,IAAK,4CACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBK,aAAcP,EAASO,gBAI1BC,eAAeR,IACP,CACNye,OAAQ,OACRvd,IAAK,yCACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,eAIzBC,kBAAkBV,IACV,CACNye,OAAQ,OACRvd,IAAK,4CACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,eAIzBE,cAAcX,IACN,CACNye,OAAQ,MACRvd,IAAK,oCACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,YAItBO,UAAUZ,IACF,CACNye,OAAQ,MACRvd,IAAK,oCACL2B,OAAQ,CACP5C,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,eC3DrBkkC,GAAQ,EAKL,MAAMC,GAAiB,CAC7BngB,WAAY,CACXia,iBACAe,gBACAgB,iBACAW,kBAEDyD,WAAY,CACXnC,sBAED7U,MAAO,CACN,aACA,YACA,aACA,cACA,kBAEDC,MAAO,CACNgX,aAAcjG,SACdzjB,MAAOwP,OACPma,YAAana,OACboa,SAAU,CACThwB,KAAMoZ,QACNG,SAAS,GAEV9tB,WAAY,CACXuU,KAAM4V,QAEPqa,iBAAkB/lB,OAClBgmB,gBAAiBjjC,MACjBkjC,UAAW/W,QACXgX,eAAehX,QACfiX,OAAQjX,QACRkX,kBAAmB1a,OACnB2X,SAAU,CACTvtB,KAAM,CAACoZ,QAASxD,OAAQiU,SAAU58B,MAAOid,QACzCqP,SAAS,GAEVgX,WAAYnX,QACZoX,YAAa,CAAC5a,OAAQ3oB,MAAOid,QAC7BumB,eAAgBrX,QAChBsX,YAAa9a,OACb+a,SAAU/a,OAEVgb,QAAShb,OACTib,cAAejb,OACfkb,UAAW1X,QACX2X,iBAAkB,CACjB/wB,KAAMoZ,QACNG,SAAS,IAGXhrB,KAAM,WACL,MAAO,CACNyiC,KAAM,EAENC,WAAY,KACZC,cAAc,EACdtG,OAAQ,KACRuG,QAAS,KACTC,gBAAiB,KACjBxF,eAAgB,KAChB9/B,aAAc,KAEdulC,iBAAkB,KAClBC,eAAgB,KAGhBC,kBAAkB,EAClBC,qBAAsB,KACtBC,2BAA4B,KAC5BC,qBAAsB,KAEtBC,YAAa,KAEbtF,UAAW,KACXuF,YAAY,EACZC,sBAAsB,EACtBC,aAAc,GACdC,YAAa,CACZ1c,MAAM,EACNsV,SAAS,EACTt3B,QAAQ,EACR2+B,cAAc,EACdh9B,OAAO,EACPqO,MAAM,GAGT,EACAwN,SAAU,CACTohB,iBAAAA,GACC,OAAK/nC,KAAK0gC,QAAW1gC,KAAK0hC,eAEnB1hC,KAAK0gC,OAAOv3B,OAAO6+B,QAAKhoC,KAAK0hC,eAAerW,QAAQ2c,IADnD,IAET,EACAC,YAAAA,GACC,OAAKjoC,KAAKinC,QAEHhmB,KAAK+N,MAAM/N,KAAKC,UAAUlhB,KAAKinC,UAD9B,EAET,EACAiB,eAAAA,GACC,IAAIxH,EAASzf,KAAK+N,MAAM/N,KAAKC,UAAUlhB,KAAK0gC,UAAY,GACpDgB,EAAiBzgB,KAAK+N,MAAM/N,KAAKC,UAAUlhB,KAAK0hC,kBAAoB,GAEpEjB,EAAU,KAOd,GAJIzgC,KAAK+lC,kBAAoB/lC,KAAK+lC,iBAAiB5hB,eAAe,aACjEsc,EAAUzgC,KAAK+lC,iBAAiBtF,UAG5B19B,MAAMC,QAAQy9B,IAAa19B,MAAMC,QAAQy9B,IAAYA,EAAQ3f,OAAS4f,EAAO5f,OAClF,CACC2f,EAAU,GAGV,IAAK,IAAIxV,KAASyV,EAClB,CAEC,IAAIkE,EAAS,CACZ1oB,MAAO+O,EACPA,MAAOA,GAIR2Z,EAAOM,QAAUxD,EAAerW,QAAQJ,IAAU,EAGlDwV,EAAQzV,KAAK4Z,EACd,CACD,MAIC,IAAK,IAAIuD,KAAO1H,EAKf0H,EAAIjD,QAAUxD,EAAerW,QAAQ8c,EAAIld,QAAU,IAAkC,GAA7ByV,EAAOrV,QAAQ8c,EAAIld,OAEvEkd,EAAIhkB,eAAe,eACtBgkB,EAAIC,UAAYD,EAAIjD,SAIvB,OAAOzE,CACR,EACA4H,oBAAAA,GACC,OAAKroC,KAAK0nC,WAEH1nC,KAAKmiC,UAAUmG,aAAan/B,OAAOg/B,IACzC,IAAII,EAAMJ,EAAIK,gBACd,OAAQD,EAAInD,QAAUmD,EAAIrsB,OAA0B,sBAAjBqsB,EAAIzF,YACrC3/B,IAAIglC,GAAOA,EAAIM,YAJV,EAKT,EACAC,UAAAA,GACC,OAAK1oC,KAAK0nC,WAEH1nC,KAAKmiC,UAAUmG,aAAa7nB,OAAO,CAACrc,EAAK+jC,KAC/C/jC,EAAI+jC,EAAIM,YAAcN,EAAIK,gBAAgBtsB,MACnC9X,GACL,CAAA,GAJK,CAAA,CAKT,EACAukC,OAAAA,GACC,OAAK3oC,KAAK8mC,KAEH,IAAM9mC,KAAK8mC,KADV,EAET,EACA8B,gBAAAA,GACC,IAAK5oC,KAAKkoC,kBAAoBloC,KAAKknC,gBAClC,MAAO,GACR,MAAM2B,EAAe7oC,KAAKkoC,gBAAgBznB,OAAO,CAAC7b,EAAEm8B,KACnDn8B,EAAEm8B,EAAE9V,OAAS8V,EAAE7kB,MACRtX,GACL,CAAA,GACH,OAAO5E,KAAKknC,gBAAgB/jC,IAAIqmB,IAAE,IAASA,EAAQtN,MAAO2sB,EAAarf,EAAGlE,QAC3E,GAEDI,QAAS,CACRojB,WAAAA,GACK9oC,KAAKimC,UACRjmC,KAAKmiC,UAAU4G,UAEf/oC,KAAKiC,WACP,EACA,mBAAM+mC,GACL,IAAIC,EAAc,iCACdjpC,KAAK8hB,WACF9hB,KAAK8hB,GAAGxhB,aAAa,MAC3B2oC,EAAcjpC,KAAK8hB,GAAGC,EAAE,2BAGpB/hB,KAAKimC,iBAEH,IAAIhjC,QAAQ+kB,IACjB,MAAMtmB,EAAWs2B,OAAOkR,SAASC,KAAOnR,OAAOkR,SAASC,KAAKC,MAAM,GAAK,KAElEC,EAAqBhlC,IAC1BrE,KAAKspC,cAAcjlC,GACnB2jB,KAGgB,OAAbtmB,EACH1B,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAUvjC,UAAUZ,IAC/C,KACAgoC,GAGDrpC,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAUxjC,cAAcX,IACnD,CAAEK,YACF2nC,KAMJ,IAAItD,EAAmB,CACrByD,OAAQ,uBACRC,gBAAgB,EAChBC,eAAe,CACdC,SAAS,GAEVV,cACApB,YAAa7nC,KAAK6nC,eACZ7nC,KAAK+lC,kBAAoB,CAAA,GAmCjC,QAhCgCvjC,IAA5BujC,EAAiB6D,aACWpnC,IAA/BujC,EAAiB8D,gBACcrnC,IAA/BujC,EAAiB+D,YACjB/D,EAAiB6D,OAAS,KAGtB5pC,KAAKimC,UAITF,EAAiBtF,QAAQzf,QAAQmnB,SACZ3lC,IAAhB2lC,EAAIjD,UACPiD,EAAIjD,SAAU,MALhBa,EAAiB1hC,KAAOrE,KAAKioC,aAC7BlC,EAAiBtF,QAAUzgC,KAAKkoC,kBAQ7BnC,EAAiBgE,YAAchE,EAAiBiE,gBAAmBjE,EAAiBtF,SAAWsF,EAAiBtF,QAAQt3B,OAAOqgB,GAAsB,gBAAhBA,EAAGsZ,WAA6BhiB,UACxK9gB,KAAK2nC,sBAAuB,GAEzB3nC,KAAK0mC,UAEJ1mC,KAAK2mC,gBAAeZ,EAAiBkE,UAAW,GAEpDlE,EAAiBrZ,MAAQ1sB,KAAK0mC,SAI/B1mC,KAAKmiC,UAAY,IAAI6B,UACpBhkC,KAAKunB,MAAM+c,MACXyB,GAGGhjC,MAAMC,QAAQhD,KAAKgmC,kBAAoBhmC,KAAKgmC,gBAAgBllB,OAAS,EAGxE,IAAK,IAAIkgB,KAAOhhC,KAAKgmC,gBACpBhmC,KAAKmiC,UAAU+H,GAAGlJ,EAAIxqB,MAAOwqB,EAAIpW,SAEnC5qB,KAAKmiC,UAAU+H,GAAG,aAAc,KAAOlqC,KAAK0nC,YAAa,EAAM1nC,KAAK2vB,MAAM,gBAC1E3vB,KAAKmiC,UAAU+H,GAAG,sBAAuB7lC,IACxCrE,KAAK4nC,aAAevjC,IAIjBrE,KAAK2mC,eAAiB3mC,KAAK0mC,SAC9B1mC,KAAKmiC,UAAU+H,GAAG,cAAe7lC,IAChC,IAAI8lC,EAAW,GAGf,IAAK,IAAIC,EAAW,EAAGA,EAAW/lC,EAAKyc,OAAQspB,IAC/C,CACC,IAAIC,EAAQhmC,EAAK+lC,GAGbC,EAAMrqC,KAAK2mC,gBAGV3mC,KAAKmnB,YAAY9iB,EAAMgmC,IAAQF,EAASnf,KAAKof,EAEnD,CAGA,IAAK,IAAI3/B,EAAU,EAAGA,EAAU0/B,EAASrpB,OAAQrW,IAGhDpG,EAAKi9B,OAAO6I,EAAS1/B,GAAWA,EAAS,KAIxCzK,KAAKimC,WACRjmC,KAAKmiC,UAAU+H,GAAG,aAAc,KAC/B,MAAMI,EAAOtqC,KAAKmiC,UAAUmG,aAC5BtoC,KAAK0gC,OAAS4J,EAAKnnC,IAAIglC,GAAOA,EAAIM,YAClCzoC,KAAK0hC,eAAiB4I,EAAKnhC,OAAOg/B,GAAOA,EAAIoC,aAAapnC,IAAIglC,GAAOA,EAAIM,YACrEzoC,KAAKmiC,UAAUxjB,QAAQkpB,YAAYC,cACtC9nC,KAAKwqC,qBAKRxqC,KAAKmiC,UAAU+H,GAAG,eAAgB1J,IACjCxgC,KAAKgnC,aAAexG,EAAQ1f,OAAS,EACrC9gB,KAAK2vB,MAAM,iBAAkB3vB,KAAKgnC,eAEpC,EACAyD,eAAAA,GACKzqC,KAAKmiC,YACJniC,KAAK0nC,WACR1nC,KAAK0qC,mBAEL1qC,KAAKmiC,UAAU+H,GAAG,aAAclqC,KAAK0qC,kBAExC,EACAA,gBAAAA,GACC1qC,KAAK2nC,qBAAuB3nC,KAAK+lC,iBAAiBgE,YAAc/pC,KAAK+lC,iBAAiBiE,gBAAkBhqC,KAAKkoC,gBAAgB/+B,OAAOqgB,GAAsB,gBAAhBA,EAAGsZ,WAA6BhiB,OAC1K9gB,KAAKmiC,UAAUwI,WAAW3qC,KAAKkoC,iBAC/BloC,KAAKmiC,UAAU4G,QAAQ/oC,KAAKioC,cAC5BjoC,KAAKwqC,kBACN,EACAI,YAAAA,GAEuB5qC,KAAKmiC,UAAU0I,mBACrB7pB,QAAQ7X,IACvBnJ,KAAKmiC,UAAU2I,qBAAqB3hC,EAAO8hB,MAAO,MAEnDjrB,KAAKmiC,UAAU4I,cACf/qC,KAAKgnC,cAAe,CACrB,EACAwD,gBAAAA,GAEyBxqC,KAAKmiC,UAAU0I,mBACvB7pB,QAAQ7X,IACvBnJ,KAAKmiC,UAAU2I,qBAAqB3hC,EAAO8hB,MAAO9hB,EAAOxD,QAE3D,EACA1D,SAAAA,GAC6B,OAAxBjC,KAAKonC,eACRpnC,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAUvjC,UAAUZ,IAC/C,KACArB,KAAKgrC,QAGNhrC,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAUxjC,cAAcX,IACnD,CACCK,SAAU1B,KAAKonC,gBAEhBpnC,KAAKgrC,OAER,EACA1B,aAAAA,CAAcjlC,GACbrE,KAAKynC,YAAcpjC,EACnBrE,KAAK+mC,WAAa1iC,EAAK0iC,WACvB/mC,KAAKinC,QAAU5iC,EAAK4iC,QACpBjnC,KAAKknC,gBAAkB7iC,EAAK6iC,gBAE5BlnC,KAAK0gC,OAASr8B,EAAKq8B,OACnB1gC,KAAK0hC,eAAiBr9B,EAAKq9B,eAC3B1hC,KAAK4B,aAAe,GAEpB,IAAK,IAAIye,EAAI,EAAGA,EAAIhc,EAAK6iC,gBAAgBpmB,OAAQT,IAEhD,IAAK,IAAI4qB,EAAI,EAAGA,EAAI5mC,EAAKm8B,QAAQ1f,OAAQmqB,IAExC,GAAI5mC,EAAK6iC,gBAAgB7mB,GAAGiF,MAAQjhB,EAAKm8B,QAAQyK,GAAG3lB,KACpD,CACC,IAAInc,EAAS9E,EAAKm8B,QAAQyK,GAC1B9hC,EAAO2M,KAAOzR,EAAK6iC,gBAAgB7mB,GAAGvK,KAEtC9V,KAAK4B,aAAaopB,KAAK7hB,EAExB,CAGH,EAIA6hC,MAAAA,CAAO7gC,GACN,IAAI9F,EAAO8F,EAEXnK,KAAKspC,cAAcjlC,IAGG,IAAlBrE,KAAK8lC,SAER9lC,KAAKkrC,YAAY7mC,GAIjBrE,KAAKmrC,gBAAgB9mC,GAEtBrE,KAAKyqC,iBACN,EAIAS,WAAAA,CAAY7mC,GACX,IAAIm8B,EAAUn8B,EAAKyhC,SAAStF,QACxB4K,EAAkB/mC,EAAKyhC,SAASsF,gBAChCC,EAAe,GAEnB,IAAK,IAAIC,EAAe,EAAGA,EAAe9K,EAAQ1f,OAAQwqB,IAC1D,CACC,IAAIC,EAAO/K,EAAQ8K,GAAcC,KAErB,MAARA,IAAcA,EAAO,KAEzBF,EAAaA,EAAavqB,QAAU,CACnC3Z,GAAIq5B,EAAQ8K,GAAcE,UAC1BD,KAAMA,EAAO/K,EAAQ8K,GAAcE,UACnC3F,YAAarF,EAAQ8K,GAAcG,KACnCtgB,KAAMmgB,EACNI,YAAa1rC,KAAK2rC,qBAEpB,CAEA,IAAK,IAAIL,EAAe,EAAGA,EAAeF,EAAgBtqB,OAAQwqB,IAClE,CACC,IAAIC,EAAOH,EAAgBE,GAAcC,KAE7B,MAARA,IAAcA,EAAO,KAEzBF,EAAaA,EAAavqB,QAAU,CACnC3Z,GAAIikC,EAAgBE,GAAcE,UAClCD,KAAMA,EAAOH,EAAgBE,GAAcE,UAC3C3F,YAAauF,EAAgBE,GAAcG,KAC3CG,qBAAsBR,EAAgBE,GAAcM,qBACpDC,mBAAoBT,EAAgBE,GAAcO,mBAClDC,mBAAoBV,EAAgBE,GAAcQ,mBAClD3gB,KAAMmgB,EACNI,YAAa1rC,KAAK2rC,qBAClBI,qBAAsB/rC,KAAKgsC,0BAE7B,CAEAhsC,KAAKmnC,iBAAmBkE,EAExBrrC,KAAK2vB,MACJ,aACA,CACC4b,KAAM,IACN1F,YAAa,UACbjD,KAAM,SACNqJ,SAAUZ,GAGb,EAIAF,eAAAA,CAAgB9mC,GACf,IAAIm8B,EAAUn8B,EAAKyhC,SAAStF,QACxB4K,EAAkB/mC,EAAKyhC,SAASsF,gBAChCC,EAAe,GAEnB,IAAK,IAAIC,EAAe,EAAGA,EAAe9K,EAAQ1f,OAAQwqB,IAE9C9K,EAAQ8K,GAAcC,KAIjCF,EAAaA,EAAavqB,QAAU,CACnC3Z,GAAIq5B,EAAQ8K,GAAcE,UAC1B7S,OAAQ6H,EAAQ8K,GAAcE,UAC9B3F,YAAarF,EAAQ8K,GAAcG,MAIrC,IAAK,IAAIH,EAAe,EAAGA,EAAeF,EAAgBtqB,OAAQwqB,IAEtDF,EAAgBE,GAAcC,KAIzCF,EAAaA,EAAavqB,QAAU,CACnC3Z,GAAIikC,EAAgBE,GAAcE,UAClC7S,OAAQyS,EAAgBE,GAAcE,UACtC3F,YAAauF,EAAgBE,GAAcG,MAI7CzrC,KAAKmnC,iBAAmBkE,CACzB,EAIA9B,cAAAA,CAAe7J,EAAaE,EAAuBsM,GAElDlsC,KAAKsnC,qBAAuB5H,EAGC,MAAzBE,IAA+BA,EAAwB,CAAA,GAG3DA,EAAsBt+B,eAAiBiE,2BAA2BugB,YAAc,IAAMvgB,2BAA2BwgB,cACjH6Z,EAAsBr+B,WAAavB,KAAKuB,WAEpCvB,KAAKymC,WACR7G,EAAsBt+B,gBAAkB,IAAMtB,KAAKymC,UAGpDzmC,KAAKunC,2BAA6B3H,EAElC5/B,KAAKwnC,qBAAuB0E,GAGF,IAA1BlsC,KAAKqnC,iBAA4BrnC,KAAKqnC,kBAAmB,EAAQrnC,KAAKqnC,kBAAmB,CAC1F,EAQA8E,uBAAAA,CAAwB3qC,GACvBxB,KAAKonC,eAAiB,KAEtBpnC,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAUpkC,iBAAiBC,IACtD,CACCG,oBAEDxB,KAAKiC,UAEP,EAIA+pC,yBAAAA,CAA0Bx1B,GACzB,IAAI9U,EAAW8U,EAAMyqB,cAAc3a,aAAa,QAAQ8lB,UAAU,GAC9D1qC,IAAa1B,KAAKonC,iBACrBpnC,KAAKonC,eAAiB,MAEvBpnC,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAU/jC,mBAAmBJ,IACxD,CACCK,SAAUA,GAEX1B,KAAKiC,UAEP,EAKA0pC,qBAAsB,SAASn1B,GAE9B,IAAI9U,EAAW,KAGX2qC,EAAO71B,EAAMyqB,cAAc3a,aAAa,QAK3C5kB,EAFW,MAAR2qC,EAEQ71B,EAAMyqB,cAAct7B,MAIpB0mC,EAAKD,UAAU,GAG3BpsC,KAAK2gC,aAAaj/B,EACnB,EACAi/B,YAAAA,CAAaj/B,GACZ1B,KAAKonC,eAAiB1lC,EACtB1B,KAAKiC,WACN,EACA2+B,iBAAAA,CAAkBh/B,GACjB5B,KAAKonC,eAAiB,KACtBpnC,KAAKupC,eACJloC,GAAYrB,KAAKoqB,KAAKoC,KAAKgZ,GAAU7jC,kBAAkBN,IACvD,CACCO,gBAED5B,KAAKiC,UAEP,EAGAklB,WAAAA,CAAY9iB,EAAMgmC,GAEjB,IAAIiC,EAAWjC,EAAMrqC,KAAK2mC,eAG1B,IAAK,IAAI4F,EAAY,EAAGA,EAAYloC,EAAKyc,OAAQyrB,IACjD,CACC,IAAIC,EAASnoC,EAAKkoC,GAGlB,GAAIC,EAAOxsC,KAAK0mC,UAAY4F,EAS3B,OANKE,EAAOC,YAAWD,EAAOC,UAAY,IAGrCD,EAAOC,UAAUrgB,SAASie,IAAQmC,EAAOC,UAAUzhB,KAAKqf,IAGtD,EAGCmC,EAAOC,WAAWzsC,KAAKmnB,YAAYqlB,EAAOC,UAAWpC,EAC/D,CAGA,OAAO,CACR,GAEDqC,YAAAA,IACM1sC,KAAKimC,YAAcjmC,KAAKuB,YAC5BumB,MAAM,qDACR,EACAyS,OAAAA,IACKv6B,KAAK8lC,UAAc9lC,KAAK2sC,OAAO/G,cAAkB5lC,KAAK2sC,OAAO/G,wBAAwBjG,UACxF7X,MAAM,4DACP9nB,KAAK8mC,KAAOrB,KACZzlC,KAAK2vB,MAAM,cAAe3vB,KAAK8mC,KAChC,EACArV,OAAAA,GACCzxB,KAAKgpC,gBAAgB7kC,KAAK,KACpBnE,KAAKimC,YACTjmC,KAAKonC,eAAiBpP,OAAOkR,SAASC,KAAOnR,OAAOkR,SAASC,KAAKC,MAAM,GAAK,KAC7EppC,KAAKgrC,OAAOhrC,KAAKynC,eAIpB,EACA5gB,SAAU,4wIChqBE+lB,GAA0B,CACtCtnB,KAAM,0BACNC,WAAY,CACX+K,UACA8E,YAAarD,SAASsD,YACtBC,SAAUvD,SAASwD,SACnBC,SAAUzD,SAAS0D,SACnBC,SAAU3D,SAAS4D,SACnBkX,UAAW9a,SAAS+a,UACpBlX,UAAW7D,SAAS8D,UACpBC,aAAc/D,SAASgE,aACvBC,QAASjE,SAASrQ,QAClByU,iBAEDxH,MAAO,CAAC,aACRyH,OAAQ,CACP,oBACA,sBACA,sBACA,uBACA,gBACA,+BAEDxH,MAAO,CACNyH,cAAe,CACdvgB,KAAMkK,OACNqP,QAAS,MAEV0d,aAAc,CACbj3B,KAAMoZ,QACNG,SAAS,GAEV2d,cAAe,CACdl3B,KAAMoZ,QACNG,SAAS,IAGXhrB,IAAAA,GACC,MAAO,CACN4oC,0BAA0B,EAC1BzW,eAAe,EACfC,gBAAiB,KACjBC,mBAAoBnxB,2BAA2B+nB,iBAC/C4f,eAAgB,CAAC,CAChBrK,MAAOzd,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,iCACpC6gB,KAAM,aACNuK,QAASntC,KAAKotC,yBACd9d,SAAUlK,IAAIuB,SAAS,KAAO3mB,KAAKqtC,8BAEpC,CACCxK,MAAOzd,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,yBACpC6gB,KAAM,mBACNuK,QAASntC,KAAKstC,aACdhe,SAAUlK,IAAIuB,SAAS,IAA2B,GAAtB3mB,KAAKgtC,gBAElC,CACCnK,MAAOzd,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,mCACpC6gB,KAAM,wBACNuK,QAASntC,KAAKutC,kBAEf,CACC1K,MAAOzd,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,qCACpC6gB,KAAM,YACNuK,QAASntC,KAAKwtC,kBAEfC,UAAW,KACXpjC,KAAM+a,IAAI6H,SAAS,CAClBjU,QAAS,GACT2d,SAAU,GACVC,YAAa,GACbC,cAAe,GACfC,iBAAkB,GAClBC,sBAAuB,GACvBC,aAAc,IAGjB,EACAtR,QAAS,CACRuR,kBAAAA,CAAmB5D,GAClB,OAAGA,EAAOqa,aAAa5Z,YACfT,EAAOqa,aAAarW,QAAUr3B,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gCAAkC,KAAO/hB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gCAAkC,MAC5H,IAAjCsR,EAAOS,aAAayD,UAAsBlE,EAAOqa,YAGnD,GAFA1tC,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,6BAIpC,EACA4rB,oBAAAA,CAAqBta,GACpB,OAAOA,GAAQS,YAAc9zB,KAAK8hB,GAAGC,EAAE,sBAAwBsR,EAAOQ,oBAAsB7zB,KAAK8hB,GAAGC,EAAE,kCACvG,EACA6rB,UAAAA,CAAWva,GAOV,OANoBA,EAAOO,YAC3BP,EAAOU,QAAUV,EAAOjiB,MAAMA,MAAQ,KACtCiiB,EAAOgB,mBAAqBr0B,KAAKq2B,cAAchC,mBAG/ChB,EAAOa,WAAab,EAAOwa,kBACpB7tC,KAAKoqB,KAAKoC,KAAKiG,EAAUW,wBAAwBC,IAASlvB,KAAOC,IACvE,GAAwB,WAArBA,GAAKob,MAAMxR,OAAqB,CAClChO,KAAKwhB,UAAU8F,aAAatnB,KAAK8hB,GAAGC,EAAE,mBAEtC,MAAMmV,EAAUl3B,KAAKs/B,oBAAoB/R,KAAK6J,GAAOA,EAAIhmB,MAAQhN,EAAIC,KAAK,GAAG+M,MACvE08B,EAAe,CACpBC,eAAiB,EACjBC,iBAAmB,KAChB5pC,EAAIC,KAAK,IAEVypC,EAAa18B,OACf08B,EAAa18B,KAAO8lB,EACpB4W,EAAaJ,YAAcxW,GAE5B4W,EAAaD,mBAAqBC,EAAa5Z,UAC/C,MAAM+Z,EAAoB7pC,EAAIC,KAAK,GAE7B6pC,EAAYluC,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,oBAAsBia,EAAaja,oBAS5F,GAPAia,EAAaha,YAAc,CAC1BA,YAAaT,EAAOS,aAAaA,YACjCD,mBAAoBR,EAAOS,aAAaD,mBACxC0D,SAAU2W,EAAU3W,UAIjB0W,EAGG,CACN,MAAME,EAAkBnuC,KAAKs/B,oBAAoB/R,KAAK6J,GAAOA,EAAIhmB,MAAQ68B,EAAkB78B,MAC3F68B,EAAkB78B,KAAO+8B,EAEzB9a,EAAOQ,mBAAqBia,EAAaja,mBACzCR,EAAOqa,YAAcxW,EACrB7D,EAAO8J,UAAYrC,EAAkBzH,EAAQrzB,KAAKm3B,aACnD,MATC2W,EAAa3Q,UAAYrC,EAAkBgT,EAAc9tC,KAAKm3B,cAC9Dn3B,KAAKq2B,cAAcoD,cAAczO,KAAK8iB,GAUvC9tC,KAAKq2B,cAAcoD,cAActO,KAAK,CAACvmB,EAAGwmB,IAAK,IAAImI,KAAK3uB,EAAE0T,OAAS,IAAIib,KAAKnI,EAAE9S,QAEhEtY,KAAKq2B,cAAcoD,cAAc2U,UAAUrsB,GAAKsR,EAAOO,aAAe7R,EAAE6R,aAMtF,MAAMya,GAAwBJ,IAAsBH,EAAa18B,MAAMimB,SAAiC,OAAtByW,EAAa18B,KAGzFk9B,EAAqDL,IAAsBH,EAAa18B,MAAMimB,SAAiC,OAAtByW,EAAa18B,OAAkB68B,EAAkB78B,MAAMimB,cAAsC70B,IAA3ByrC,EAAkB78B,MAEzJi9B,GAAwBC,GAEjEtuC,KAAKytC,UAAY,CAChB7Z,aAAe,EACfd,iBAAoB9yB,KAAKq2B,cAAcvD,iBACvCoB,WAAa,EACb2Z,mBAAqB,EACrBzZ,OAAU,GACV9b,OAAS,IAAIib,MAAOgF,cAActK,MAAM,KAAK,GAC7C7c,KAAQpR,KAAKs/B,oBAAoB/R,KAAK6J,GAAmB,GAAZA,EAAIhmB,MACjD6iB,kBAAqB,GACrBD,gBAAkB,EAClBH,mBAAsB,GACtBC,YAAe9zB,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,qBAAuBia,EAAaja,oBAC1FyE,YAAe,KACfnE,UAAan0B,KAAKy7B,UAAUn2B,KAAO,IAGpCtF,KAAKitC,0BAA2B,EAEhCjtC,KAAKunB,MAAMgnB,8BAA8Bjd,QAEzCtxB,KAAKitC,0BAA2B,EAGjCjtC,KAAK2vB,MAAM,YAAa3vB,KAAKq2B,cAC9B,KAA+B,SAArBjyB,GAAKob,MAAMxR,QACpBhO,KAAKwhB,UAAUI,cAGlB,EACA4sB,oBAAAA,GACCxuC,KAAKunB,MAAMknB,0BAA0Bnd,MACtC,EACA,qBAAMod,GACL,UAAW1uC,KAAK2uC,sBAEf,OAAO,EAGR,MAAM7R,EAAK98B,KAAKq2B,cAGVpgB,EAAW,IAAI8J,SACrB9J,EAAS4K,OAAO,mBAAoB7gB,KAAKq2B,cAAcvD,kBAEvD7c,EAAS4K,OAAO,UAAW7gB,KAAKqK,KAAc,QAAE2O,SAChD/C,EAAS4K,OAAO,WAAY7gB,KAAKqK,KAAe,UAChD4L,EAAS4K,OAAO,cAAe7gB,KAAKqK,KAAkB,aACtD4L,EAAS4K,OAAO,gBAAiB7gB,KAAKqK,KAAoB,eAC1D4L,EAAS4K,OAAO,mBAAoB7gB,KAAKqK,KAAuB,kBAChE4L,EAAS4K,OAAO,eAAgB7gB,KAAKqK,KAAmB,cAExDrK,KAAKu2B,SAAU,EACfv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUqC,oCAAoC7e,IAC3D9R,KAAKC,IACL,GAAsB,WAAnBA,EAAIob,KAAKxR,OAAqB,CAEhC,GADAhO,KAAKwhB,UAAU8F,aAAatnB,KAAK8hB,GAAGC,EAAE,oBAClC1d,MAAM2kB,SAAS,GAAI,OACvB,MAAM4lB,EAAQvqC,KAAK2kB,OAAO,GAC1B8T,EAAG9F,aAAe4X,EAAM5X,cAAgB,EACxC8F,EAAG/F,sBAAwB6X,EAAM7X,uBAAyB,GAC1D+F,EAAGjG,cAAgB+X,EAAM/X,eAAiB,GAC1CiG,EAAG9jB,QAAU41B,EAAM51B,SAAW,GAC9B8jB,EAAGhG,iBAAmB8X,EAAM9X,kBAAoB,GAChDgG,EAAGnG,SAAWiY,EAAMjY,UAAY,GAChCmG,EAAGlG,YAAcgY,EAAMhY,aAAe,EACvC,IAEEiB,QAAQ,KACX73B,KAAKu2B,SAAU,IAGhBv2B,KAAKunB,MAAMknB,0BAA0Bpd,MACtC,EACA,yBAAMsd,GAEL,OAMO,UANE3uC,KAAKwhB,UAAUjF,QAAQ,CAC/BmF,QAAS1hB,KAAK8hB,GAAGC,EAAE,0CACnBqG,YAAapoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCACxCsG,YAAa,mBACbC,YAAatoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wBACxCwG,YAAa,sBAMf,EACA,wBAAMsmB,CAAmBxb,GACxB,IAMO,UANErzB,KAAKwhB,UAAUjF,QAAQ,CAC/BmF,QAAS1hB,KAAK8hB,GAAGC,EAAE,+BACnBqG,YAAa,UACbC,YAAa,kBACbC,YAAa,SACbC,YAAa,uBAEb,OAAO,EAEPvoB,KAAK8uC,aAAazb,EAEpB,EACAyb,YAAAA,CAAazb,GACZrzB,KAAKoqB,KAAKoC,KAAKiG,EAAU6B,0BAA0BjB,EAAOO,cAAczvB,KAAOC,IAC9E,GAAwB,WAArBA,GAAKob,MAAMxR,OAAqB,CAClChO,KAAKwhB,UAAU8F,aAAatnB,KAAK8hB,GAAGC,EAAE,oBAAqB,CAAC/hB,KAAK8hB,GAAGC,EAAE,wBAEtE,MAAMgtB,EAAqB/uC,KAAKq2B,cAAcoD,cAAc2U,UAAUrsB,GAAKA,EAAE6R,cAAgBP,EAAOO,aACpG5zB,KAAKq2B,cAAcoD,cAAc6H,OAAOyN,EAAoB,GAC5D/uC,KAAK2vB,MAAM,YAAa3vB,KAAKq2B,cAC9B,KAA+B,SAArBjyB,GAAKob,MAAMxR,QACpBhO,KAAKwhB,UAAUI,cAGlB,EACA4V,SAAU,SAASnE,GAClB,QAAIA,EAAOzS,KAAKE,SACf9gB,KAAKwhB,UAAUqG,aAAa7nB,KAAK8hB,GAAGC,EAAE,8BAC/B,EAIT,EACAgW,cAAAA,CAAe1E,GACd,MAAM9wB,EAAM,yEAAyE8wB,EAAOO,2BAA2B5zB,KAAKq2B,cAAcllB,gCAAgCnR,KAAKq2B,cAAcvD,mBAE7LkF,OAAO3b,KAAK9W,2BAA2BC,SAAWD,2BAA2BE,UAAYlD,EAE1F,EACAysC,mBAAAA,CAAoBzD,GACnBvT,OAAO3b,KAAKkvB,EAAM,SACnB,EACA0D,sBAAsBtW,GACdA,EAAO3f,QAEfk2B,uBAAAA,CAAwBvW,GACvB,OAAO34B,KAAK8hB,GAAGC,EAAE,sBAAwB4W,EAAO9E,mBACjD,EACAsb,kBAAkBxW,IACTA,EAAOyW,MAEhBC,oBAAoB1W,GACZA,EAAO7E,YAEf0Z,eAAAA,GACC,MAAMjC,EAAOhmC,2BAA2BC,SAAWD,2BAA2BE,UAC3E,2BAA6BzF,KAAKq2B,eAAellB,YACpD6mB,OAAO3b,KAAKkvB,EAAM,SACnB,EACAgC,gBAAAA,GACC,MAAMhC,EAAOvrC,KAAKsvC,cAClBtX,OAAO3b,KAAKkvB,EAAM,SACnB,EACA,kBAAM+B,GAGL,GAAGttC,KAAKuvC,qBAAuBvvC,KAAKq2B,eAAeoD,cAAclM,KAAK8F,GAAuC,OAA7BA,EAAOQ,oBAAsD,OAAvBR,EAAOiF,cAAyBt4B,KAAKq2B,eAAemZ,mBAAoB,CAC7L,MAAMjE,EAAOvrC,KAAKq2B,eAAemZ,mBACjCxX,OAAO3b,KAAKkvB,EAAM,SACnB,MAAO,GAAGvrC,KAAKq2B,eAAeoD,cAAclM,KAAK8F,GAAuC,OAA7BA,EAAOQ,oBAAsD,OAAvBR,EAAOiF,cAAyBt4B,KAAKq2B,eAAeoZ,mBAAoB,CACxK,IAMO,UANEzvC,KAAKwhB,UAAUjF,QAAQ,CAC/BmF,QAAS1hB,KAAK8hB,GAAGC,EAAE,wCACnBqG,YAAapoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCACxCsG,YAAa,iBACbC,YAAatoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wBACxCwG,YAAa,8BAEb,OAAO,EAGR,MAAMgjB,EAAOvrC,KAAKq2B,eAAeoZ,mBACjCzX,OAAO3b,KAAKkvB,EAAM,SACnB,MAEC,IAMO,UANEvrC,KAAKwhB,UAAUjF,QAAQ,CAC/BmF,QAAS1hB,KAAK8hB,GAAGC,EAAE,qCACnBqG,YAAapoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCACxCsG,YAAa,iBACbC,YAAatoB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wBACxCwG,YAAa,8BAEb,OAAO,CAGV,EACA0P,UAAAA,CAAWC,GAEV,MAAM9vB,EAAO,IAAImrB,KAAK2E,GAEhBC,EAAWC,GAAQ1M,OAAO0M,GAAK1E,SAAS,EAAG,KAE3C2E,EAAQF,EAAQ/vB,EAAKqrB,WAAa,GAIxC,MAAO,GAHK0E,EAAQ/vB,EAAKurB,cAGR0E,KAFJjwB,EAAKorB,eAGnB,EACA4Z,wBAAAA,GACC,GAA6C,oBAA1CptC,KAAKq2B,eAAegI,mBAAvB,CAOA,IAAIr+B,KAAKytC,UAAW,CACnB,MAAMh1B,EAAMzY,KAAK27B,kBAAkBpO,KAAK6J,GAAkC,aAA3BA,EAAIvD,oBACnD7zB,KAAKytC,UAAY,CAChB7Z,aAAe,EACfd,iBAAoB9yB,KAAKq2B,cAAcvD,iBACvCoB,WAAa,EACb2Z,mBAAqB,EACrBzZ,OAAU,GACV9b,OAAS,IAAIib,MAAOgF,cAActK,MAAM,KAAK,GAC7C7c,KAAQpR,KAAKs/B,oBAAoB/R,KAAK6J,GAAmB,GAAZA,EAAIhmB,MACjD6iB,kBAAqB,GACrBD,eAAkBvb,EAAIi3B,uBACtB7b,mBAAsB,GACtBC,YAAerb,EACf6f,YAAe,KACfnE,UAAan0B,KAAKy7B,UAAUn2B,KAAO,GAErC,CACAtF,KAAKunB,MAAMgnB,8BAA8Bjd,MApBzC,MAFCtxB,KAAKwhB,UAAUqG,aAAa,wBAuB9B,EACA8nB,eAAetc,IAGP,EAER,yBAAMuc,CAAoBvc,GAEzB,IAAIrzB,KAAK2vC,eAAetc,GAGvB,OAFArzB,KAAKwhB,UAAUqG,aAAa,mBAErB,QAGF7nB,KAAK4tC,WAAWva,GAEtBrzB,KAAKunB,MAAMgnB,8BAA8Bld,OACzCrxB,KAAKytC,UAAY,CAChB7Z,aAAe,EACfd,iBAAoB9yB,KAAKq2B,cAAcvD,iBACvCoB,WAAa,EACb2Z,mBAAqB,EACrBzZ,OAAU,GACV9b,OAAS,IAAIib,MAAOgF,cAActK,MAAM,KAAK,GAC7C7c,KAAQpR,KAAKs/B,oBAAoB/R,KAAK6J,GAAmB,GAAZA,EAAIhmB,MACjD6iB,kBAAqB,GACrBD,gBAAkB,EAClBH,mBAAsB,GACtBC,YAAe9zB,KAAK27B,kBAAkBpO,KAAK6J,GAAkC,aAA3BA,EAAIvD,oBACtDyE,YAAe,KACfnE,UAAan0B,KAAKy7B,UAAUn2B,KAAO,GAGrC,EACAuqC,qBAAAA,CAAsBxc,GAGyB,cAA3CA,EAAOS,aAAaD,oBAAiF,cAA3CR,EAAOS,aAAaD,mBAChFR,EAAOe,OAASf,EAAOS,YAAYA,YAEnCT,EAAOe,OAAS,EAElB,GAEDzN,SAAU,CACT0mB,2BAAAA,GACC,GAAGrtC,KAAKgtC,cAAe,OAAO,EAC9B,GAA6C,oBAA1ChtC,KAAKq2B,eAAegI,mBAA0C,OAAO,EACxE,QAAgC77B,IAA7BxC,KAAKq2B,eAAejlB,MAAkD,OAA5BpR,KAAKq2B,cAAcjlB,KAAe,CAI9E,QAFYpR,KAAK8vC,qBAAqBviB,KAAK6J,GAAOA,EAAIhmB,KAKvD,CAGA,OAAO,CACR,EACAioB,wBAAAA,GACE,OAAOr5B,KAAKqK,KAAKwsB,cAAc/V,OAAS,GAAK9gB,KAAKqK,KAAKysB,iBAAiBhW,OAAS,GAAK9gB,KAAKqK,KAAKssB,SAAS7V,OAAS,GAAK9gB,KAAKqK,KAAKusB,YAAY9V,OAAS,GAAK9gB,KAAKqK,KAAK2sB,aAAe,CACtL,EACA+Y,2BAAAA,GACC,OAAG/vC,KAAKgtC,cACAhtC,KAAK27B,kBAEL37B,KAAK27B,kBAAkBxyB,OAAOiuB,GAAOp3B,KAAKgwC,oBAAoB5jB,SAASgL,EAAIvD,oBAEpF,EACAmF,kBAAiBA,KAET,CACN3V,KAAM,CACL4V,MAAO,CACNC,OAAQ,QAGV7G,QAAS,CACR4G,MAAO,CACNE,QAAS,UAKbC,MAAAA,GACC,OAAOp5B,KAAK8hB,GAAGC,EAAE,yCAClB,EACAkuB,mBAAAA,GACC,OAAQjwC,KAAKw2B,aACd,EACA+Y,mBAAAA,GACC,OAAOvvC,KAAKq2B,eAAe6Z,YAAa,CACzC,EACAC,kBAAAA,GACC,OAAOnwC,KAAKq2B,eAAeoD,cAAclM,KAAKmM,GAAwC,QAA9BA,EAAO7F,oBAAuD,OAAvB6F,EAAOpB,YACvG,EACAiB,0BAAAA,GACC,IAAIC,GAAa,EAOjB,OANAx5B,KAAKq2B,eAAeoD,cAAczY,QAAQ0Y,IACI,aAA1CA,EAAO5F,aAAaD,oBACwB,aAA3C6F,GAAQ5F,aAAaD,qBACxB2F,GAAa,KAGRA,CACR,EACA4W,kBAAiBA,IACT,+BAERC,yBAAwBA,IAEhB,gEAER1W,oBAAAA,GACC,MAAO,CACNh0B,MAAO3F,KAAK8hB,GAAGC,EAAE,kCACjBW,MAAO,iBAET,EACAkX,kBAAAA,GACC,MAAO,CACNj0B,MAAO3F,KAAK8hB,GAAGC,EAAE,gCACjBW,MAAO,iBAET,EACAmX,mBAAAA,GACC,MAAO,CACNl0B,MAAO3F,KAAK8hB,GAAGC,EAAE,iCACjBW,MAAO,iBAET,EACAoX,kBAAAA,GACC,MAAO,CACNn0B,MAAO3F,KAAK8hB,GAAGC,EAAE,kCACjBW,MAAO,iBAET,EACA0X,iCAAAA,GACC,MAAO,CACNz0B,MAAO3F,KAAK8hB,GAAGC,EAAE,+CACjBW,MAAO,iBAET,EACAqX,mBAAAA,GACC,MAAO,CACNp0B,MAAO3F,KAAK8hB,GAAGC,EAAE,iCACjBW,MAAO,iBAET,EACAsX,mBAAAA,GACC,MAAO,CACNr0B,MAAO3F,KAAK8hB,GAAGC,EAAE,iCACjBW,MAAO,iBAET,EACAuX,wBAAAA,GACC,MAAO,CACNt0B,MAAO3F,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uCAClCW,MAAO,iBAET,EACA4tB,0BAAAA,GACC,MAAO,CACN3qC,MAAO3F,KAAK8hB,GAAGC,EAAE,6CACjBW,MAAO,iBAET,EACA6tB,4BAAAA,GACC,MAAO,CACN5qC,MAAO3F,KAAK8hB,GAAGC,EAAE,+CACjBW,MAAO,iBAET,EACA2X,mBAAAA,GACC,MAAO,CACN10B,MAAO3F,KAAK8hB,GAAGC,EAAE,iCACjBW,MAAO,iBAET,EACA4X,wBAAAA,GACC,MAAO,CACN30B,MAAO3F,KAAK8hB,GAAGC,EAAE,sCACjBW,MAAO,iBAET,EACA8tB,qBAAAA,GACC,OAAGxwC,KAAKq2B,eAAe0I,MAAc/+B,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uBAAyB,KAAO/hB,KAAKq2B,cAAc0I,MAE5G,EACR,EACA0R,uBAAAA,GACC,OAAGzwC,KAAKq2B,eAAeqa,QAAgB1wC,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mBAAqB,KAAO/hB,KAAKq2B,cAAcqa,QAE1G,EACR,GAED3hB,MAAO,CACN,wBAAwB8J,GACW,cAA/BA,GAAQhF,oBAAqE,cAA/BgF,GAAQhF,qBACxD7zB,KAAKytC,UAAUrZ,OAASyE,EAAO/E,aAGhC9zB,KAAKytC,UAAUzZ,eAAiB6E,EAAO6W,sBACxC,EACA,cAAgB7W,GAIf,MAAMpgB,EAAMzY,KAAK27B,kBAAkBpO,KAAK6J,GAAkC,aAA3BA,EAAIvD,oBACnD7zB,KAAKytC,UAAY,CAChB7Z,aAAe,EACfd,iBAAoB+F,EAAO/F,iBAC3BoB,WAAa,EACb2Z,mBAAqB,EACrBzZ,OAAU,GACV9b,OAAS,IAAIib,MAAOgF,cAActK,MAAM,KAAK,GAC7C7c,KAAQpR,KAAKs/B,oBAAoB/R,KAAK6J,GAAmB,GAAZA,EAAIhmB,MACjD6iB,kBAAqB,GACrBD,eAAkBvb,EAAIi3B,uBACtB7b,mBAAsB,GACtBC,YAAerb,EACf6f,YAAe,KACfnE,UAAan0B,KAAKy7B,UAAUn2B,KAAO,IAGpCuzB,GAAQY,eAAezY,QAAQqS,GAAUA,EAAOwa,mBAAqBxa,EAAOa,WAG5El0B,KAAKqK,KAAK2O,QAAU6f,EAAO7f,QAAUhZ,KAAK02B,mBAAmBnJ,KAAKiB,GAAQA,EAAKxV,SAAW6f,EAAO7f,SAAWhZ,KAAK02B,mBAAmBnJ,KAAKiB,GAAwB,UAAhBA,EAAKxV,SACtJhZ,KAAKqK,KAAKssB,SAAWkC,EAAOlC,UAAY,GACxC32B,KAAKqK,KAAKusB,YAAciC,EAAOjC,aAAe,GAC9C52B,KAAKqK,KAAKwsB,cAAgBgC,EAAOhC,eAAiB,GAClD72B,KAAKqK,KAAKysB,iBAAmB+B,EAAO/B,kBAAoB,GACxD92B,KAAKqK,KAAK0sB,sBAAwB8B,EAAO9B,uBAAyB,GAClE/2B,KAAKqK,KAAK2sB,aAAe6B,EAAO7B,cAAgB,CACjD,GAEDuD,OAAAA,GAEA,EACA9I,OAAAA,GAEA,EACA5K,SAAU,s2nBC9kBX,SAAS8pB,GAAWnT,EAAMoT,EAAYnmB,GACrC,IAAIomB,EAAM5rB,SAASC,cAAc,OAE7B4rB,EAAe,KAEf5iB,EAAMsP,EAAKC,WAEf,GAAI16B,MAAMC,QAAQkrB,GAClB,CACC,MAAM6iB,EAAQ7iB,EAAI,GAAK,IAAIqF,KAAKrF,EAAI,IAAM,KACpC8iB,EAAQ9iB,EAAI,GAAK,IAAIqF,KAAKrF,EAAI,IAAM,KAC1C4iB,EAAe,CAACC,EAAOC,EACxB,CA0BA,OAxBA5rB,IAAIC,UAAU,CACbE,WAAY,CACX0rB,iBAAkBlf,SAASmf,UAE5B7sC,KAAIA,KACI,CACN6pB,IAAK4iB,IAGP/hB,MAAO,CACNb,GAAAA,CAAI3C,GACHd,EAAQc,EACT,GAED1E,SAAU,kPAQRhH,IAAIkS,SAAShyB,OAAOsvB,SAASpI,MAAM4pB,GAE/BA,CACR,CCtEOhmB,eAAesmB,GAAiBC,EAAO56B,EAAO66B,EAASC,EAAgBC,GAC7E,IACIC,EAAWJ,EAAMtuB,KADL,KAEZ2uB,EAAS,GAEb,MAAMC,EAAgBL,GAA8B,iBAAZA,EAAuBA,EAAQvwB,OAAS,EAAI,EACpF,GAAI0wB,EAAS1wB,OAAS,OAEwE,UAAnFwwB,EAAe/0B,QAAQ,CAACmF,QAAS6vB,EAAiBxvB,EAAE,MAAO,mBACpE,OAGF,IAAI4vB,GAAW,EACXC,EAASp7B,GAAOq7B,SAAWr7B,GAAOs7B,QACtC,KAAON,EAAS1wB,OAAS,GACzB,CACC,GAAI0wB,EAAS1wB,OAAS4wB,EAAgB,KACtC,CACC,IAAIK,EAAgBP,EAASQ,YAjBf,IAiBsC,MACpDP,EAASD,EAASpF,UAAU,EAAG2F,GAC/BP,EAAWA,EAASpF,UAAU2F,EAAgB,EAC/C,MAGCN,EAASD,EACTA,EAAW,GAGZ,IAAIS,EAAWL,EAAS,eAAeH,IAAW,UAAUA,IACzDJ,GAA8B,iBAAZA,IAAsBY,GAAY,YAAYZ,KAC/DM,GAEH3Z,OAAOkR,SAASgJ,KAAOD,EACvBN,GAAW,IAIgF,UAAjFL,EAAe/0B,QAAQ,CAACmF,QAAS6vB,EAAiBxvB,EAAE,MAAO,oBAEpEiW,OAAOkR,SAASgJ,KAAOD,EAI1B,CACD,CD5CKlgB,UACJjT,QAAQvU,MAAM,wBAIfy5B,UAAUC,aAAa,SAAU,UAAW,CAC3CkO,MAASA,CAACC,EAAaC,KACtB,IAAKD,EACJ,OAAO,EAER,IAAIE,EAAU,IAAI/e,KAAK8e,GAEvB,GAAItvC,MAAMC,QAAQovC,GAClB,CACC,IAAIG,EAAY,IAAIhf,KAAK6e,EAAY,IACrC,GAAIA,EAAY,GAChB,CACC,IAAII,EAAU,IAAIjf,KAAK6e,EAAY,IAInC,OAFAI,EAAQC,SAAS,GAAI,GAAI,GAAI,KAEtBH,GAAWC,GAAaD,GAAWE,CAC3C,CAEA,OAAOF,EAAQI,iBAAmBH,EAAUG,cAC7C,CACA,IAAIC,EAAa,IAAIpf,KAAK6e,GAC1B,OAAOE,EAAQI,iBAAmBC,EAAWD,kBEjBxC,MAAME,GAAwB,CACpCttB,KAAM,wBACNC,WAAY,CACX+K,UACAoV,+BACAnK,GACAjG,SAAUvD,SAASwD,SACnBC,SAAUzD,SAAS0D,SACnBC,SAAU3D,SAAS4D,SACnBkd,WAAY9gB,SAAS+gB,WACrB3c,gBACAlB,cAEDvR,OAAAA,GACC,MAAO,CACNiY,kBAAmBvW,IAAIuB,SAAS,IAAM3mB,KAAK27B,mBAC3CqU,oBAAqB5qB,IAAIuB,SAAS,IAAM3mB,KAAKgwC,qBAC7C1Q,oBAAqBla,IAAIuB,SAAS,IAAM3mB,KAAKs/B,qBAC7CwQ,qBAAsB1qB,IAAIuB,SAAS,IAAM3mB,KAAK8vC,sBAC9CR,cAAelqB,IAAIuB,SAAS,IAAM3mB,KAAKsvC,eACvCyD,4BAA6B3tB,IAAIuB,SAAS,IAAM3mB,KAAK+yC,6BAEvD,EACAnkB,MAAO,CACN6M,SAAU,CACT3lB,KAAMkK,OACN6O,UAAU,EACVQ,QAASA,KAAAA,CAAQ/J,KAAM,GAAIhgB,IAAK,KAChCorB,UAAU/qB,GACFA,GAASA,EAAML,MAIzBjB,IAAAA,GACC,MAAO,CACN2uC,UAAW,KACXhD,oBAAqB,KACrBiD,oBAAoB,EACpBrX,eAAgB,KAChBC,iBAAiB,EACjByT,cAAe,KACfyD,4BAA6B,KAC7BG,mCAAoC,KACpCC,QAAQ,EACR5c,SAAS,EACToF,kBAAmB,KACnBxE,aAAc,KACdmI,oBAAqB,KACrBwQ,qBAAsB,KACtBsD,aAAchuB,IAAI6H,SAAS,CAC1B3U,MAAO,IAAIib,KACXO,YAAa,CACZD,mBAAoB,WACpBC,YAAa,kBAEdM,OAAQ,GACRJ,gBAAgB,IAEjBqf,SAAS,EACTC,cAAeluB,IAAIgI,IAAI,GACvBwa,aAAc,GACd2L,OAAQ,GACRpiC,YAAa,KACb6U,OAAQ,KACRwtB,aAAc,EACd1X,gBAAiB,KACjBC,sBAAuB,KACvB0X,kBAAmB,KACnBC,kBAAmB,KACnBC,mBAAoB,CACnB9J,UAAW,IACXnd,MAAO,mBACP8c,OAAQ,iBACRP,YAAa7jB,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,2BAC1CgoB,YAAY,EACZ6J,gBAAiB5zC,KAAK6zC,eACtBC,UAAW,GACXrT,QAAS,CACR,CACCqC,UAAW,SAAUtF,EAAMuW,EAAiBnD,GAE3C,IAAIpT,EAAKwW,SAASzvB,UAAUwlB,WAAY,OACxC,IAAIxU,EAAWtQ,SAASC,cAAc,SACtCqQ,EAASzf,KAAO,WAGhByf,EAASsO,iBAAiB,QAAUh6B,IACnCA,EAAEoqC,kBAGEF,GAAmBA,EAAgBG,aACtCH,EAAgBG,YAAYrqC,EAAG2zB,KAIjCA,EAAKwW,SAASzvB,UAAUgR,SAAWA,EAEnC,IAAIlD,EAAUpN,SAASC,cAAc,OAKrC,OAJAmN,EAAQ4G,MAAMkb,QAAU,0FAExB9hB,EAAQlL,YAAYoO,GAEblD,CACR,EACA+hB,eAAgB,SAAU5W,EAAMuW,EAAiBnD,GAEhD,IAAIrb,EAAWtQ,SAASC,cAAc,SAatC,OAZAqQ,EAASzf,KAAO,WAGhByf,EAASsO,iBAAiB,QAAUh6B,IACnCA,EAAEoqC,kBAGEF,GAAmBA,EAAgBG,aACtCH,EAAgBG,YAAYrqC,EAAG2zB,KAI1BjI,CACR,EACA8e,SAAU,SACVC,YAAY,EACZP,gBAAiB,CAChBG,YAAal0C,KAAKu0C,eAEnBC,qBAAsB,CACrBN,YAAal0C,KAAKy0C,kBAEnBC,MAAO,GACPC,SAAU,cAEX,CAACz4B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,0BAA2BkJ,MAAO,UAAW6X,UAAW9iC,KAAK09B,gBAAiBoK,cAAc,EAAOwM,YAAY,EAAOM,UAAW,EAAGjL,SAAS,EAAOgL,SAAU,cACpN,CAACz4B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sCAAuC+lB,cAAc,EAAM7c,MAAO,MAAO6X,UAAW9iC,KAAK60C,iBAAkBD,UAAW,EAAGjL,SAAS,GACxL,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,0BAA2BkJ,MAAO,UAAW6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAsBqX,UAAW,GACxK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,2BAA4BkJ,MAAO,WAAY6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAC3K,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,6BAA8BkJ,MAAO,oBAAqB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAClK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,MAAO6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACjK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,yBAA0B6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACpL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wBAAyBkJ,MAAO,QAAS6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBuX,SAAU,IAAKF,UAAW,GACpL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,gCAAiCkJ,MAAO,2BAA2B6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAC3K,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mCAAoCkJ,MAAO,aAChG6c,aAAc6I,GACdoE,iBAAkB/0C,KAAKg1C,sBACvBC,OAAQj1C,KAAKk1C,kBACbpS,UAAW9iC,KAAKm1C,qBAAsBP,UAAW,EAAGF,MAAO,IAAK/K,SAAS,GAC1E,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mCAAoCkJ,MAAO,aAChG6c,aAAc6I,GACdoE,iBAAkB/0C,KAAKg1C,sBACvBC,OAAQj1C,KAAKk1C,kBACbpS,UAAW9iC,KAAKm1C,qBAAsBP,UAAW,EAAGF,MAAO,IAAK/K,SAAS,GAC1E,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,+BACrD+lB,aAAc,OACdsN,mBAAoB,CAAEC,aAAcr1C,KAAKs1C,oBACzCrqB,MAAO,eAAgB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAGF,MAAO,IAAK/K,SAAS,GAClG,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,+BACrD+lB,aAAc,OACdsN,mBAAoB,CAAEC,aAAcr1C,KAAKs1C,oBACzCrqB,MAAO,eAAgB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAGF,MAAO,IAAK/K,SAAS,IAEnG9B,aAAa,EACb0N,cAAe,iCAEhBC,yBAA0B,CAAC,CAC1Bh/B,MAAO,aACPoU,QAASC,UACR7qB,KAAKyzC,sBAGP,CACCj9B,MAAO,YACPoU,QAASC,MAAOhhB,EAAG2zB,KACiB,YAAhCA,EAAKiY,YAAYhN,YACnBzoC,KAAK48B,mBAAmBY,EAAKC,YAC7Bz9B,KAAK01C,cAAclY,IACuB,SAAhCA,EAAKiY,YAAYhN,YAC3BzoC,KAAK01C,cAAclY,KAItB,CACChnB,MAAO,sBACPoU,QAASC,UACR7qB,KAAK4nC,aAAaz+B,OAAOwsC,IAAOtxC,EAAK+nB,SAASupB,IAAK30B,QAAQ40B,IACvDA,EAAIrgB,WAAUqgB,EAAIrgB,SAASsgB,SAAU,KAGzCxxC,EAAK2c,QAAQ80B,IACTA,EAAEvgB,WAAUugB,EAAEvgB,SAASsgB,SAAU,KAGrC71C,KAAK4nC,aAAevjC,KAIxB,EACAqhB,QAAS,CACRqwB,eAAAA,CAAgB1f,GACfr2B,KAAKg2C,gCAAgC3f,GACrCr2B,KAAKunB,MAAM0uB,YAAY9T,UAAU+T,QAAO,EACzC,EACAC,iBAAAA,CAAkBC,GAEjB,MAAMC,EAAgB,GACtBr2C,KAAK4nC,aAAa5mB,QAAQ80B,IACzBO,EAAcrrB,KAAK,GAAG8qB,EAAE3kC,eAAenR,KAAKuzC,YAI7CpC,GAFyB,IAAI,IAAImF,IAAID,IAEFD,EAAMG,cADzB,GACiDv2C,KAAKwhB,UAAWxhB,KAAK8hB,GACvF,EACAwzB,kBAAAA,GACC,MAAO,CACNt1C,KAAK8hB,GAAGC,EAAE,oCACV/hB,KAAK8hB,GAAGC,EAAE,+BACV/hB,KAAK8hB,GAAGC,EAAE,+BACV/hB,KAAK8hB,GAAGC,EAAE,6BACV/hB,KAAK8hB,GAAGC,EAAE,6BACV/hB,KAAK8hB,GAAGC,EAAE,+BAEZ,EACAmzB,kBAAiBA,CAACtwC,EAAGwmB,EAAGorB,EAAMC,EAAM7R,EAAQ8R,EAAKxyC,IAC5CU,QAA+C,EAC/CwmB,SAA+C,EAIxB,cAAxBwZ,EAAO+R,QAAQ1rB,MACV2rB,KAAKC,IAAIzrB,EAAE0rB,QAAUF,KAAKC,IAAIjyC,EAAEkyC,QACL,cAAxBlS,EAAO+R,QAAQ1rB,MAClB2rB,KAAKC,IAAIjyC,EAAEkyC,QAAUF,KAAKC,IAAIzrB,EAAE0rB,QAIjCF,KAAKC,IAAIzrB,EAAE0rB,QAAUF,KAAKC,IAAIjyC,EAAEkyC,QAExC9B,qBAAAA,CAAsB+B,EAAWC,GAChC,IAAKA,IAAWA,EAAOC,YAAcD,EAAOC,UAAUC,QACrD,OAAO,EAGR,MAAM5E,EAAU0E,EAAOC,UAEjBE,EAAWjpB,IAChB,IAAKA,EAAK,OAAO,KACjB,IAAI2B,EASJ,OAPCA,EADG3B,aAAeqF,KACbmH,MAAMC,SAASyc,WAAWlpB,GACN,iBAARA,EACZwM,MAAMC,SAASI,QAAQ7M,GAEvBwM,MAAMC,SAAS0c,WAAWC,OAAOppB,IAGhC2B,EAAGqnB,QAAUrnB,EAAK,MAGpBtX,EAAM4+B,EAAQJ,EAAU,IACxBv+B,EAAM2+B,EAAQJ,EAAU,IAG9B,OAAIx+B,IAAQC,EACJ85B,EAAQiF,QAAQh/B,EAAK,UAIzBA,IAAOC,KACH85B,GAAW/5B,EAAIi/B,QAAQ,QAAUlF,GAAW95B,EAAIwiB,MAAM,OAI/D,EACAyc,SAAAA,GACC,OAAOx2B,KAAK+N,MAAM0oB,aAAaC,QAAQ33C,KAAK2zC,mBAAmB4B,gBAAkB,OAClF,EACAqC,SAAAA,CAAUtT,GAET,IAAItkC,KAAK63C,cAAe,OACxB,MACMC,EAAQ,CACbrX,QAFiB6D,EAAMyT,kBAEJ50C,IAAIglC,IAAG,CACzBld,MAAOkd,EAAIld,MACXia,QAASiD,EAAIjD,QACbwP,MAAOvM,EAAIuM,SAEZvpB,KAAMmZ,EAAM0T,aAAa70C,IAAI80C,IAAC,CAC7BhtB,MAAOgtB,EAAEhtB,MACTyrB,IAAKuB,EAAEvB,OAERlW,QAAS8D,EAAM4T,aACfC,cAAe7T,EAAMuG,oBAGtB6M,aAAaU,QAAQp4C,KAAK2zC,mBAAmB4B,cAAet0B,KAAKC,UAAU42B,GAC5E,EACAO,gBAAAA,GACC,MAAM/T,EAAQtkC,KAAKunB,MAAM0uB,YAAY9T,UAErCniC,KAAKyzC,oBAELnP,EAAM4F,GAAG,cAAe,KACvBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,gBAAiB,KACzBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,0BAA2B,KACnClqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,gBAAiB,KACzBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,sBAAuB,KAC/BlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,aAAc,KACtBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,eAAgB,KACxBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,iBAAkB,KAC1BlqC,KAAK43C,UAAUtT,KAGhB,MAAMgU,EAAQt4C,KAAKy3C,YAEnBnT,EAAM4F,GAAG,iBAAkB,KAC1B,IAAIlqC,KAAK63C,cAAe,CAEvB,GAAIS,GAAO7X,UAAYzgC,KAAKu4C,kBAAmB,CAC9C,MAAM/O,EAAS8O,EAAM7X,QAAQt9B,IAAIglC,IAAG,CACnCld,MAAOkd,EAAIld,MACXypB,MAAOvM,EAAIuM,MACXxP,QAASiD,EAAIjD,WAIdZ,EAAMkU,gBAAgBhP,GAEtBxpC,KAAKu4C,mBAAoB,CAC1B,CAMA,GAJID,GAAO9X,UAAYxgC,KAAKy4C,kBAC3Bz4C,KAAKy4C,iBAAkB,EACvBnU,EAAMoU,UAAUJ,EAAM9X,UAEnB8X,GAAOH,gBAAkBn4C,KAAK24C,sBAAuB,CACxD34C,KAAK24C,uBAAwB,EAC7B,IAAK,IAAIC,KAAMN,EAAMH,cACpB7T,EAAMwG,qBAAqB8N,EAAG3tB,MAAO2tB,EAAGjzC,MAE1C,CAEI2yC,GAAOntB,MAAMrK,SAAW9gB,KAAK64C,eAChC74C,KAAK64C,cAAe,EAEpBC,WAAW,KACV,MAAMC,EAAWT,EAAMntB,KAAKhoB,IAAI80C,IAC/B,MAAM9P,EAAM7D,EAAM0U,cAAcC,WAAWhB,EAAEhtB,OAC7C,OAAKkd,EAGE,CAAEvD,OAAQuD,EAAKuO,IAAKuB,EAAEvB,KAFrB,OAGNvtC,OAAO+lB,SAEVoV,EAAM4U,QAAQH,IACZ,MAEJ/4C,KAAK63C,eAAgB,CAEtB,GAGF,EACAsB,sBAAAA,CAAuBxiC,GACtB,MAAMyiC,EAAgB,GAChBC,EAAgB,GAEtB1iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,oCACjCpL,EAAQ4iC,iBAAmB,EAC3B5iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,oCACjCpL,EAAQ8iC,iBAAmB,EAE3B9iC,EAAQ8iB,cAAczY,QAAQqS,IACG,aAA7BA,EAAOQ,oBAAmCulB,EAAcpuB,KAAKqI,GAChC,aAA7BA,EAAOQ,oBAAmCwlB,EAAcruB,KAAKqI,KAOjE+lB,EAAcp4B,QAAQ04B,IACrB,GAAiB,MAAdA,EAAMtoC,MAAgBuF,EAAQ4iC,kBAAoB,EAAG,EACjB,iBAAfG,EAAMtoC,KAAoBpR,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQsoC,EAAMtoC,MAAQsoC,EAAMtoC,MACpGimB,SACV1gB,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ4iC,iBAAmB,IAE3B5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ4iC,iBAAmB,EAE7B,MAAyB,MAAdG,EAAMtoC,MAAgBuF,EAAQ4iC,kBAAoB,GAC5D5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ4iC,iBAAmB,GACM,GAAxBG,EAAM1lB,gBAA+C,MAArB0lB,EAAMphB,aAAuB3hB,EAAQ4iC,kBAAoB,GAClG5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ4iC,iBAAmB,GACO,GAAxBG,EAAM1lB,gBAA2B0lB,EAAM5C,QAAU,GAAKngC,EAAQ4iC,kBAAoB,IAC5F5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ4iC,iBAAmB,KAI7BF,EAAcr4B,QAAQ04B,IACrB,GAAiB,MAAdA,EAAMtoC,MAAgBuF,EAAQ4iC,kBAAoB,EAAG,EACjB,iBAAfG,EAAMtoC,KAAoBpR,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQsoC,EAAMtoC,MAAQsoC,EAAMtoC,MACpGimB,SACV1gB,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ8iC,iBAAmB,IAE3B9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ8iC,iBAAmB,EAE7B,MAAyB,MAAdC,EAAMtoC,MAAgBuF,EAAQ8iC,kBAAoB,GAC5D9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ8iC,iBAAmB,GACM,GAAxBC,EAAM1lB,gBAA+C,MAArB0lB,EAAMphB,aAAuB3hB,EAAQ8iC,kBAAoB,GAClG9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ8iC,iBAAmB,GACO,GAAxBC,EAAM1lB,gBAA2B0lB,EAAM5C,QAAU,GAAKngC,EAAQ8iC,kBAAoB,IAC5F9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ8iC,iBAAmB,IAG9B,EACAzD,+BAAAA,CAAgCr/B,GAC/B,MAAMikB,EAAMF,MAAMC,SAASC,MAE3BjkB,EAAQ8iB,cAAczY,QAAQqS,IAG7BA,EAAO8J,UAAYrC,EAAkBzH,EAAQrzB,KAAKm3B,cAElD,MAAM/uB,EAAOsyB,MAAMC,SAASI,QAAQ1H,EAAO/a,OAAO0iB,MAAM,OACxD3H,EAAO4jB,UAAY7uC,EACnBirB,EAAOyjB,OAAS1uC,EAAKuxC,WAAa/e,EAAI+e,WAElCtmB,EAAOyjB,OAAS,IACdngC,EAAQijC,YACZvmB,EAAOyjB,OAASngC,EAAQijC,WAAW9C,UAEnCngC,EAAQijC,WAAavmB,GAEZA,EAAOyjB,OAAS,KACrBngC,EAAQkjC,YACZxmB,EAAOyjB,OAASngC,EAAQkjC,WAAW/C,UAEnCngC,EAAQkjC,WAAaxmB,KAMxBrzB,KAAKm5C,uBAAuBxiC,EAC7B,EACAw+B,oBAAAA,CAAqB3X,GACpB,MAAMtP,EAAMsP,EAAKC,WAEjB,GAAGvP,EAAK,CACP,IAAI0U,EAAO,GACX,OAAO1U,EAAIiP,WACV,IAAK,aACJyF,EAAO,mDACP,MACD,IAAK,WACJA,EAAO,6CACP,MACD,IAAK,YACJA,EAAO,6CACP,MACD,IAAK,WACJA,EAAO,oCACP,MACD,IAAK,YACJA,EAAO,wCACP,MACD,IAAK,0BACJA,EAAO,yCACP,MACD,IAAK,YACJA,EAAO,oCACP,MACD,IAAK,iBACJA,EAAO,iDAIT,MAAM9O,EAAc5F,EAAI4F,aAAaA,aAAe5F,EAAI4F,YAExD,MAAO,uDACU5F,EAAIiP,UADd,wHAENyF,EAFM,gHAKqE9O,EAAY,MAAO9zB,KAAKi4B,WAAW/J,EAAI5V,OAL5G,kBASR,CACC,MAAO,EAGT,EACAi8B,aAAAA,CAAc1qC,EAAG2zB,GAChB,MAAM9P,EAAM8P,EAAKwW,SAUjB,OARGtmB,EAAIosB,aACNpsB,EAAIqsB,WAEJrsB,EAAIssB,SAILnwC,EAAEoqC,mBACK,CACR,EACAQ,gBAAAA,CAAiB5qC,EAAG2zB,GACnB,MAIM5Q,EAJQ4Q,EAAKyc,WACAC,UAGE/wC,OAAOgxC,GAAKA,EAAE51B,UAAUwlB,YAW7C,OAViBnd,EAAQ1M,MAAMi6B,GAAKA,EAAEL,cAGrCltB,EAAQ5L,QAAQm5B,GAAKA,EAAEJ,YAEvBntB,EAAQ5L,QAAQm5B,GAAKA,EAAEH,UAIxBnwC,EAAEoqC,mBACK,CACR,EACAmG,4BAAAA,GACCp6C,KAAKizC,oBAAsBjzC,KAAKizC,kBACjC,EACA/D,wBAAwBvW,GAChBA,EAAO7E,YAEfmE,UAAAA,CAAWC,GACV,MAAM9vB,EAAO,IAAImrB,KAAK2E,GAEhBC,EAAWC,GAAQ1M,OAAO0M,GAAK1E,SAAS,EAAG,KAE3C2E,EAAQF,EAAQ/vB,EAAKqrB,WAAa,GAIxC,MAAO,GAHK0E,EAAQ/vB,EAAKurB,cAGR0E,KAFJjwB,EAAKorB,eAGnB,EACAkiB,aAAAA,CAAclY,GAIb,MAAM9P,EAAM8P,EAAKwW,SACdtmB,EAAIosB,cACNpsB,EAAIqsB,UAEN,EACAlG,cAAAA,CAAenmB,GACd,MAAMrpB,EAAOqpB,EAAInJ,UACjB,MAA+B,oBAA5BlgB,GAAMg6B,kBAEV,EACAgc,aAAAA,GACC,MAAM9O,EAAOhmC,2BAA2BC,SAAWD,2BAA2BE,UAC3E,4BACHuyB,OAAO3b,KAAKkvB,EAAM,SACnB,EACA+O,aAAAA,CAAcnnB,GACbnzB,KAAKqzC,QAAUlgB,EACfnzB,KAAKu2B,SAAU,EACfv2B,KAAKg/B,oBAAoB7L,EAAS,KACjCnzB,KAAKunB,MAAM0uB,aAAa9T,UAAU+T,QAAO,GACzCl2C,KAAKunB,MAAM0uB,aAAa9T,UAAU+W,QAAQ,IAC1Cl5C,KAAKu2B,SAAU,GAEjB,EACAgkB,kBAAAA,GACCv6C,KAAKunB,MAAMizB,wBAAwBlpB,MACpC,EACAmpB,SAAAA,GACCz6C,KAAKmzC,QAAS,EACdnzC,KAAKoqB,KAAKoC,KAAKiG,EAAU8B,iBACxBv0B,KAAKozC,aAAa96B,MAAMigB,cACxBv4B,KAAKozC,aAAatf,YAAYD,mBAC9B7zB,KAAKozC,aAAatf,YAAYA,YAC9B9zB,KAAKozC,aAAahf,OAClBp0B,KAAKozC,aAAapf,eAClBh0B,KAAK4nC,cAAczkC,IAAIwT,GAAWA,EAAQmc,mBAC1C,IACE3uB,KAAKC,IACP,GAAwB,YAApBA,EAAIob,KAAKxR,QAAwB5J,EAAIC,KAAM,CAC9CrE,KAAKwhB,UAAU8F,aAAatnB,KAAK8hB,GAAGC,EAAE,uCAEtC,MAAM24B,EAAgB16C,KAAKunB,MAAM0uB,aAAa9T,UAAUoC,WAAWoW,WAC7DC,EAAe56C,KAAKunB,MAAM0uB,aAAa9T,UAAUoC,WAAWsW,UAClE76C,KAAKu2B,SAAU,EACfv2B,KAAKg/B,oBAAoBh/B,KAAKqzC,QAAS,KACtCrzC,KAAKunB,MAAM0uB,aAAa9T,UAAU+T,QAAO,GACzCl2C,KAAKunB,MAAM0uB,aAAa9T,UAAU+W,QAAQ,IAC1Cl5C,KAAKu2B,SAAU,EAEfnR,IAAI01B,SAAS,KACZ,MAAMxW,EAAQtkC,KAAKunB,MAAM0uB,aAAa9T,UAAUqC,QAAQxa,cAAc,0BACnEsa,IACFA,EAAMqW,WAAaD,EACnBpW,EAAMuW,UAAYD,MAKtB,MACC56C,KAAKwhB,UAAUI,WAAW5hB,KAAK8hB,GAAGC,EAAE,4CAEnC8V,QAAQ,KACV73B,KAAKmzC,QAAS,IAGfnzC,KAAKunB,MAAMizB,wBAAwBnpB,MACpC,EACA0pB,gBAAAA,CAAiB12C,GAChB,IAAI22C,EAAM,GAOV,OALA32C,EAAK2c,QAAQsE,IACZ01B,GAAO11B,EACP01B,GAAO,OAGDA,CACR,EACAte,UAAAA,CAAWt0B,GACV,MAAMu0B,EAAWjC,MAAMC,SAASI,QAAQ3yB,EAAM,CAAEoyB,KAAM,kBAAmBQ,MAAM,OAE/E,OADoBN,MAAMC,SAASC,MAAMC,QAAQ,iBAC5B8B,CACtB,EACAC,kBAAAA,CAAmBjuB,GAClB3O,KAAKu2B,SAAQ,EAEb,MAAMuG,EAAK98B,KAAK87B,iBAAiB9S,QAAQuE,KAAKwP,GAAgBA,EAAajK,kBAAoBnkB,EAAQmkB,kBAEvG,IAAIkK,GAAc,EAClB,QAAex6B,IAAZs6B,EAAG1rB,MAAkC,OAAZ0rB,EAAG1rB,KAAe,CAEjCpR,KAAK8vC,qBAAqBviB,KAAK6J,GAAOA,EAAIhmB,QAE9C4rB,GAAc,GAEtBA,GAAc,CACf,CAEGF,GAAIrD,eAAe3Y,QACrB9gB,KAAKoqB,KAAKoC,KAAKiG,EAAUsC,yCAAyC+H,EAAGrD,cAAct2B,IAAIkwB,GAAUA,EAAOO,aAAckJ,EAAG3rB,cACvHhN,KAAKC,IACkB,YAApBA,EAAIob,KAAKxR,QACX5J,EAAIC,KAAK2c,QAAQi6B,IAChB,MAAM5nB,EAASyJ,EAAGrD,cAAclM,KAAKmM,GAAUA,EAAO9F,aAAeqnB,EAASrnB,aAC3EP,QAAgC7wB,IAAtBy4C,EAASziB,WAAwBnF,EAAOmF,SAAWyiB,EAASziB,cAM9EsE,EAAGrD,cAAczY,QAAQqS,IACxB,MAAM6D,EAAUl3B,KAAKs/B,oBAAoB/R,KAAK6J,GAAOA,EAAIhmB,MAAQiiB,EAAOjiB,MACrE8lB,IAAS7D,EAAOjiB,KAAQ8lB,GAC3B7D,EAAOzS,KAAO,IAGVyS,EAAOqa,aAAexW,IACzB7D,EAAOqa,YAAcxW,GAOtB7D,EAAO0a,eAAgB/Q,EAGvB3J,EAAO2a,gBAAkB3a,EAAO0a,gBAAkB1a,EAAOiF,YAEzDjF,EAAOS,YAAc9zB,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,qBAAuBR,EAAOQ,sBAI3FiJ,EAAG3rB,YAAcxC,EAAQwC,YACzB2rB,EAAG4T,QAAU,GAAG5T,EAAGoe,WAAWpe,EAAGqe,WAEjCn7C,KAAK+7B,sBAAwBe,EAC7B98B,KAAKunB,MAAM+V,2BAA2BhM,OAGtCtxB,KAAKu2B,SAAU,CAEhB,EACAgH,qBAAAA,CAAsBC,GACrB,MAAMtP,EAAMsP,EAAKC,WACjB,GAAIvP,EAEJ,MAAO,2OAC8IA,EAAI,YAC1J,EACAwP,gBAAgBF,GACR,8JAGRK,qBAAqBL,GACRA,EAAKC,WAET,2JAEM,IAEfoX,iBAAiBrX,GAGT,kKAFKA,EAAKC,WAG+D,aAEjF2d,YAAAA,CAAapzB,GACZhoB,KAAKyzC,kBAAoBzrB,CAC1B,EACA8V,eAAAA,CAAgBpE,GACf,MAAO,UAAYA,EAAOp0B,IAAK,IAAKtF,KAAKuzC,MAC1C,EACA8H,SAAS1kC,GACD,GAAGA,EAAQrR,SAASqR,EAAQ2kC,aAEpCC,SAAS5kC,IACAA,EAAQ8B,IAAM9B,EAAQyd,SAASnL,cAExCmV,SAAAA,CAAU/5B,GAGTrE,KAAK87B,gBAAkBz3B,EAAK,GAC5BrE,KAAKuzC,OAASlvC,EAAK,GAEnBrE,KAAKgzC,UAAY3uC,EAAK,IAAI2kB,QAAQ7lB,IAAIwT,IACrC3W,KAAKg2C,gCAAgCr/B,GACrCA,EAAQozB,WAA4C,qBAA/BpzB,EAAQ0nB,mBAEtB,IACH1nB,EACHhI,QAAS,CACRwC,YAAawF,EAAQrR,IACrBwtB,iBAAkBnc,EAAQmc,kBAE3B0oB,IAAKx7C,KAAKq7C,SAAS1kC,GACnB8kC,YAAa9kC,EAAQ+kC,iBAAmB,KACxChd,IAAK/nB,EAAQ/N,uBACb+1B,IAAK3+B,KAAKu7C,SAAS5kC,GACnBkoB,KAAM7+B,KAAK89B,gBAAgBnnB,GAC3B8B,IAAK9B,EAAQglC,kBACb5c,MAAOpoB,EAAQooB,SAIjB/+B,KAAKunB,MAAM0uB,YAAY9T,UAAUwI,WAAW3qC,KAAK2zC,mBAAmBlT,SACpEzgC,KAAKunB,MAAM0uB,YAAY9T,UAAU4G,QAAQ/oC,KAAKgzC,UAC/C,EACAhU,mBAAAA,CAAoB1iB,GAAM,EAAOs/B,GAChC57C,KAAKoqB,KAAKoC,KAAKiG,EAAUS,8BAA8B5W,IACrDnY,KAAKC,IACFA,GAAKC,MAAMrE,KAAKo+B,UAAUh6B,EAAIC,QAC/BwzB,QAAQ,KACP+jB,GACFA,KAGJ,EACA/e,WAAAA,CAAYluB,GACX,OAAO,IAAI1L,QAAS+kB,IACnBhoB,KAAKoqB,KAAKoC,KAAKiG,EAAUI,yBAAyBlkB,IAChDxK,KAAKC,IACL4jB,EAAQ5jB,MAGZ,EACAy3C,iBAAAA,CAAkB/U,GACjB9mC,KAAKszC,cAAgBxM,CACtB,EACAgV,kBAAAA,GACC,MAAMC,EAAU/7C,KAAKszC,cAAiB,IAAMtzC,KAAKszC,cAAiB,GAC5D0I,EAAe/2B,SAASg3B,eAAe,qBAAuBF,GACpE,IAAIC,EAAc,OAClB,MAAME,EAAOF,EAAaG,wBAE1Bn8C,KAAK2zC,mBAAmB/J,OAAS5R,OAAOokB,eAAexS,OAASsS,EAAKG,IAAM,GAC3Er8C,KAAKunB,MAAM0uB,YAAY9T,UAAUma,UAAUt8C,KAAK2zC,mBAAmB/J,OACpE,EACA,kBAAM3K,GACLj/B,KAAK0zC,kBAAoB,IAAIzwC,QAAQjD,KAAKo7C,oBACpCp7C,KAAK0zC,kBAEX1zC,KAAKg/B,sBAELh/B,KAAK87C,oBAEN,GAED/sB,MAAO,CACN,2BAA2B8J,GACQ,cAA/BA,GAAQhF,oBAAqE,cAA/BgF,GAAQhF,qBACxD7zB,KAAKozC,aAAahf,OAASyE,EAAO/E,aAGnC9zB,KAAKozC,aAAapf,eAAiB6E,EAAO6W,sBAC3C,GAED/oB,SAAU,CACT41B,UAAAA,GACC,MAAM5/B,EAAO,GASb,OAPG3c,KAAKkzC,oCACPv2B,EAAKqO,KAAK,CACT6X,MAAO7iC,KAAK8hB,GAAGC,EAAE,sCAAuC,CAAC/hB,KAAKw8C,0BAC9DrP,QAASntC,KAAKm2C,oBAITx5B,CACR,EACA6/B,uBAAAA,GACC,MAAMC,EAAS,IAAInG,IAQnB,OANAt2C,KAAK4nC,aAAa5mB,QAAQ0M,IACrBA,EAAIvc,aACPsrC,EAAOh1B,IAAIiG,EAAIvc,eAIVsrC,EAAOviC,IACf,EACA61B,2BAAAA,GACC,OAAO/vC,KAAK27B,kBAAkBxyB,OAAOiuB,GAAOp3B,KAAKgwC,oBAAoB5jB,SAASgL,EAAIvD,oBACnF,GAED0G,OAAAA,GACCv6B,KAAK47B,eAAiB57B,KAAK8hB,GAAGxhB,aAAa,CAAC,aAAc,WAC1DN,KAAK47B,eAAez3B,KAAK,KAAMnE,KAAK67B,iBAAkB,IAEtD77B,KAAKoqB,KAAKoC,KAAKiG,EAAUC,aAAavuB,KAAKC,IAC1CpE,KAAKsvC,cAAgBlrC,EAAIC,MAAMirC,cAC/BtvC,KAAK+yC,4BAA8B3uC,EAAIC,MAAM0uC,4BAC7C/yC,KAAKgwC,oBAAsB5rC,EAAIC,MAAM2rC,oBACrChwC,KAAKkzC,mCAAqC9uC,EAAIC,MAAM6uC,qCAClD3T,MAAM11B,IACR7J,KAAKu2B,SAAU,IAKhBv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUjjB,YAAYrL,KAAKC,IACnB,WAAnBA,EAAIob,KAAKxR,SACXhO,KAAKm3B,aAAe/yB,EAAIC,KAAK,GAE7BrE,KAAKs/B,oBAAsBt/B,KAAKm3B,aAAahuB,OAC5CiuB,GAAOhzB,EAAIC,KAAK,GAAG+nB,SAASgL,EAAIhmB,OAGjCpR,KAAK8vC,qBAAuB9vC,KAAKm3B,aAAahuB,OAC7CiuB,GAAOhzB,EAAIC,KAAK,GAAG+nB,SAASgL,EAAIhmB,UAIhCmuB,MAAM11B,IACR7J,KAAKu2B,SAAU,IAIhBv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUiC,oBAAoBvwB,KAAKC,IACjDpE,KAAK27B,kBAAoBv3B,EAAIC,OAC3Bk7B,MAAM11B,IACR7J,KAAKu2B,SAAU,GAEjB,EACA9E,OAAAA,GACCzxB,KAAKi/B,cACN,EACApY,SAAU,27JC94BX,IAAA61B,GAAe,CACdp3B,KAAM,qBACNjhB,KAAMA,KAAAA,CACLs4C,UAAW,OAEZ/tB,MAAO,CACN6B,SAAU,CACT3a,KAAM,CAACoZ,QAASxD,QAChB2D,SAAS,EACTqB,UAAU/qB,GACF,CAAC,UAAU,GAAM,GAAOymB,SAASzmB,IAG1CirB,SAAU,CACT9a,KAAMoZ,QACNG,SAAS,GAEVutB,OAAQ,CACP9mC,KAAMoZ,QACNG,SAAS,GAEVwtB,UAAW,CACV/mC,KAAM4V,OACN2D,QAAS,QACTqB,UAAU/qB,GACF,CAAC,QAAS,MAAO,MAAO,UAAUymB,SAASzmB,IAGpDkrB,WAAY3B,QACZ6B,YAAa,CACZjb,KAAM,CAAC4V,OAAQ3oB,MAAOid,QACtBqP,QAAS,IAEV2B,UAAW,CACVlb,KAAM,CAAC4V,OAAQ3oB,MAAOid,QACtBqP,QAAS,OAEV4B,YAAa,CACZnb,KAAM,CAAC4V,OAAQ3oB,MAAOid,QACtBqP,QAAS,IAEVyB,YAAa,CAACpF,OAAQ3oB,MAAOid,SAE9B2O,MAAO,CACN,kBACA,oBACA,2BACA,kBACA,oBAEDjJ,QAAS,CACRyL,OAAAA,GACC,OAAOnxB,KAAK28C,WAAWxrB,SACxB,EACAE,IAAAA,GACC,OAAOrxB,KAAK28C,WAAWtrB,MACxB,EACAC,IAAAA,CAAKC,GACJ,OAAOvxB,KAAK28C,WAAWrrB,KAAKC,EAC7B,EACAhL,MAAAA,GACC,OAAOvmB,KAAK28C,WAAWp2B,QACxB,EACAoL,KAAAA,CAAMzK,EAAMvI,EAASzC,EAAO0V,GAC3B,MAAM8qB,EAAc18C,KACnB6xB,EAAQ,CAAA,OAEIrvB,IAAT0kB,IACH2K,EAAMxC,QAAU,IAAMnI,QACT1kB,IAAV0Z,IACH2V,EAAM3V,MAAQ,IAAMA,QACN1Z,IAAXovB,IACHC,EAAMD,OAAS,IAAMA,GAEtB,IAAIE,GAAmB,EAIvB,MAHwB,oBAAbC,WACVD,GAAmB,GAEb,IAAI7uB,QAAQ,CAAC+kB,EAASnjB,KAC5B,MAAMmtB,EAAW5M,IAAIC,UAAU,CAC9BC,KAAM,kBACN2M,MAAKA,IACG,IACN7M,IAAI8M,EAAEwqB,EAAa,CAClBh6B,MAAO,oBACP0K,IAAK,eACFzO,GACDkT,GAELJ,OAAAA,GACCzxB,KAAKunB,MAAMo1B,UAAUrrB,MACtB,EACAc,aAAAA,GACKpyB,KAAKunB,MAAMo1B,aACkB,IAAhC38C,KAAKunB,MAAMo1B,UAAUp9B,OAAmByI,EAAQhoB,KAAKunB,MAAMo1B,UAAUp9B,QAAU1a,IACjF,EACA2hB,SAAAA,GACC6L,EAAQ5L,cAAcC,YAAY2L,EACnC,IAEKA,EAAUpN,SAASC,cAAc,OAEnC4M,GACHE,EAASnS,IAAIkS,SAAShyB,OAAOsvB,QAAS,CAAEiD,OAAQ,CAAEC,QAAS,QAG5DtvB,QAAA+kB,UAAA7jB,KAAA,WAAA,OAAAquB,CAAA,GAAmCruB,KAAMquB,IACxCR,EAASnS,IAAI2S,EAAQnD,SACrB2C,EAAS/K,MAAMoL,GACfpN,SAASiC,KAAKC,YAAYkL,MAG7B,GAEDZ,OAAAA,GACKzxB,KAAKunB,MAAMo1B,YACd38C,KAAK28C,UAAY,IAAIz2B,UAAU42B,UAAU98C,KAAKunB,MAAMo1B,UAAW,CAC9DlsB,SAAUzwB,KAAKywB,SACfG,SAAU5wB,KAAK4wB,SACfgsB,OAAQ58C,KAAK48C,SAGhB,EACA/1B,SAAU,mhCC1GXk2B,GAAe,CACdC,kCAAiCA,KACzB,CACNl9B,OAAQ,MACRvd,IAAK,oFAGPgc,OAAMA,CAAC0+B,EAAQ,KAAMlM,EAAQ,QAErB,CACNjxB,OAAQ,MACRvd,IAAK,sDACL2B,OAAQ,CAAE+4C,QAAOlM,YC7Bb,MCaMmM,GAAsB,CAClC53B,KAAM,sBACNC,WAAY,CACX43B,0BDhBuC,CACxC73B,KAAM,4BACNuB,SAAU,q/HCeTyJ,UACAosB,eACAhX,+BACAnK,GACAjG,SAAUvD,SAASwD,SACnBC,SAAUzD,SAAS0D,SACnBQ,QAASlE,SAASmE,QAClBR,SAAU3D,SAAS4D,SACnBynB,SAAUrrB,SAASsrB,SACnBxK,WAAY9gB,SAAS+gB,WACrB3c,gBACAlB,cAEDvR,OAAAA,GACC,MAAO,CACNiY,kBAAmBvW,IAAIuB,SAAS,IAAM3mB,KAAK27B,mBAC3C2D,oBAAqBla,IAAIuB,SAAS,IAAM3mB,KAAKs/B,qBAC7CwQ,qBAAsB1qB,IAAIuB,SAAS,IAAM3mB,KAAK8vC,sBAC9CR,cAAelqB,IAAIuB,SAAS,IAAM3mB,KAAKsvC,eACvCyD,4BAA6B3tB,IAAIuB,SAAS,IAAM3mB,KAAK+yC,6BACrD/C,oBAAqB5qB,IAAIuB,SAAS,IAAM3mB,KAAK27B,mBAE/C,EACA/M,MAAO,CACN0uB,YAAa,CACZjuB,QAAS,MAEVoM,SAAU,CACT3lB,KAAMkK,OACN6O,UAAU,EACVQ,QAASA,KAAAA,CAAQ/J,KAAM,GAAIhgB,IAAK,KAChCorB,UAAU/qB,GACFA,GAASA,EAAML,MAIzBjB,IAAAA,GACC,MAAO,CACN2uC,UAAW,KACXuK,uBAAwB,KACxBC,OAAQ,KACRC,OAAQ,KACRC,kBAAmB,KACnBC,eAAe,EACfhF,uBAAuB,EACvBF,iBAAiB,EACjBF,mBAAmB,EACnBM,cAAc,EACdhB,eAAe,EACf+F,gBAAiB,KACjBC,0BAA2B,KAC3BC,qBAAsB,KACtB7K,oBAAoB,EACpB8K,iBAAkB,KAClBniB,eAAgB,KAChBC,iBAAiB,EACjByT,cAAe,KACfyD,4BAA6B,KAC7BiL,oCAAqC,KACrCC,qCAAsC,KACtC9K,QAAQ,EACR5c,SAAS,EACToF,kBAAmB,KACnBxE,aAAc,KACd+mB,0BAA2B,KAC3B5e,oBAAqB,KACrBwQ,qBAAsB,KACtBsD,aAAchuB,IAAI6H,SAAS,CAC1B3U,MAAO,IAAIib,KACXO,YAAa,CACZD,mBAAoB,WACpBC,YAAa,kBAEdM,OAAQ,GACRF,WAAW,EACX2Z,mBAAmB,EACnB7Z,gBAAgB,IAEjBqf,SAAS,EACTC,cAAeluB,IAAIgI,IAAI,GACvBwa,aAAc,GACd2L,OAAQ,GACRpiC,YAAa,KACb6U,OAAQ,KACRwtB,aAAc,EACd1X,gBAAiB,KACjBC,sBAAuB,KACvB0X,kBAAmB,KACnBC,kBAAmB,KACnBC,mBAAoB,CACnB9J,UAAW,IACXnd,MAAO,mBACP8c,OAAQ,UACRP,YAAa7jB,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,4BAC3DgoB,YAAY,EACZ6J,gBAAiB5zC,KAAK6zC,eACtBC,UAAW,GACXqK,qBAAsB,IACtB1d,QAAS,CACR,CACCqC,UAAW,SAAUtF,EAAMuW,EAAiBnD,GAE3C,IAAIpT,EAAKwW,SAASzvB,UAAUwlB,WAAY,OACxC,IAAIxU,EAAWtQ,SAASC,cAAc,SACtCqQ,EAASzf,KAAO,WAGhByf,EAASsO,iBAAiB,QAAUh6B,IACnCA,EAAEoqC,kBAGEF,GAAmBA,EAAgBG,aACtCH,EAAgBG,YAAYrqC,EAAG2zB,KAIjCA,EAAKwW,SAASzvB,UAAUgR,SAAWA,EAEnC,IAAIlD,EAAUpN,SAASC,cAAc,OAKrC,OAJAmN,EAAQ4G,MAAMkb,QAAU,0FAExB9hB,EAAQlL,YAAYoO,GAEblD,CACR,EACA+hB,eAAgB,SAAU5W,EAAMuW,EAAiBnD,GAEhD,IAAIrb,EAAWtQ,SAASC,cAAc,SAatC,OAZAqQ,EAASzf,KAAO,WAGhByf,EAASsO,iBAAiB,QAAUh6B,IACnCA,EAAEoqC,kBAGEF,GAAmBA,EAAgBG,aACtCH,EAAgBG,YAAYrqC,EAAG2zB,KAI1BjI,CACR,EACA8e,SAAU,SACVC,YAAY,EACZP,gBAAiB,CAChBG,YAAal0C,KAAKu0C,eAEnBC,qBAAsB,CACrBN,YAAal0C,KAAKy0C,kBAEnBC,MAAO,GACPC,SAAU,cAcX,CAACz4B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,0BAA2BkJ,MAAO,UAAW6c,cAAc,EAAOwM,YAAY,EAAOxR,UAAW9iC,KAAKo+C,WAAYzU,SAAQ,EAAO0U,SAAU,IAAK1J,SAAU,cAC/M,CAACz4B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sCAAuC+lB,cAAc,EAAM7c,MAAO,MAAO6X,UAAW9iC,KAAK60C,iBAAkBD,UAAW,EAAGjL,SAAS,GACxL,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,0BAA2BkJ,MAAO,kBAAmB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAsBqX,UAAW,GAChL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,2BAA4BkJ,MAAO,mBAAoB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACnL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,6BAA8BkJ,MAAO,gBAAiB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAsBqX,UAAW,GACjL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,0BAA2BkJ,MAAO,UAAW6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAsBqX,UAAW,GACxK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,6BAA8BkJ,MAAO,oBAAqB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAClK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,MAAO6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACjK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uBAAwBkJ,MAAO,WAAY6c,cAAc,EAC7GhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACpD,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,yBAA0B6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACpL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wBAAyBkJ,MAAO,QAAS6c,cAAc,EAAOhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACtK,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,iCAAkCkJ,MAAO,eAAgB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAErL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uCAAwCkJ,MAAO,oBAAqB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAC5M,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sCAAuCkJ,MAAO,mBAAoB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAC1M,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uCAAwCkJ,MAAO,oBAAqB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAC5M,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wCAAyCkJ,MAAO,qBAAsB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAE9M,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,kCAAmCkJ,MAAO,gBAAiB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAEvL,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wCAAyCkJ,MAAO,yBAA0B6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAClN,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,uCAAwCkJ,MAAO,wBAAyB6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAChN,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,wCAAyCkJ,MAAO,yBAA0B6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAClN,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,yCAA0CkJ,MAAO,0BAA2B6c,cAAc,EAAMhF,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAG1P,SAAS,GAEpN,CAAChpB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mCACrD+lB,aAAc6I,GACdoE,iBAAkB/0C,KAAKg1C,sBACvBC,OAAQj1C,KAAKk1C,kBACbjqB,MAAO,aAAc6X,UAAW9iC,KAAKm1C,qBAAsBP,UAAW,EAAGF,MAAO,IAAK/K,SAAS,GAC/F,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,mCAAoCkJ,MAAO,aAChG6c,aAAc6I,GACdoE,iBAAkB/0C,KAAKg1C,sBACvBC,OAAQj1C,KAAKk1C,kBACbpS,UAAW9iC,KAAKm1C,qBAAsBP,UAAW,EAAGF,MAAO,IAAK/K,SAAS,GAC1E,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,+BACrD+lB,aAAc,OACdsN,mBAAoB,CAAEC,aAAcr1C,KAAKs1C,oBACzCrqB,MAAO,eAAgB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAGF,MAAO,IAAK/K,SAAS,GAClG,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,+BACrD+lB,aAAc,OACdsN,mBAAoB,CAAEC,aAAcr1C,KAAKs1C,oBACzCrqB,MAAO,eAAgB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAGF,MAAO,IAAK/K,SAAS,IAEnG9B,aAAa,EACb0N,cAAe,yBAEhBC,yBAA0B,CAC1B,CACCh/B,MAAO,sBACPoU,QAASC,UAER7qB,KAAK4nC,aAAaz+B,OAAOwsC,IAAOtxC,EAAK+nB,SAASupB,IAAK30B,QAAQ40B,IACvDA,EAAIrgB,WAAUqgB,EAAIrgB,SAASsgB,SAAU,KAGzCxxC,EAAK2c,QAAQ80B,IACTA,EAAEvgB,WAAUugB,EAAEvgB,SAASsgB,SAAU,KAGrC71C,KAAK4nC,aAAevjC,KAIxB,EACAqhB,QAAS,CACRqwB,eAAAA,CAAgB1f,GACfr2B,KAAKg2C,gCAAgC3f,GACrCr2B,KAAKunB,MAAM0uB,YAAY9T,UAAU+T,QAAO,EACzC,EACAZ,kBAAAA,GACC,MAAO,CACNt1C,KAAK8hB,GAAGC,EAAE,oCACV/hB,KAAK8hB,GAAGC,EAAE,+BACV/hB,KAAK8hB,GAAGC,EAAE,+BACV/hB,KAAK8hB,GAAGC,EAAE,6BACV/hB,KAAK8hB,GAAGC,EAAE,6BACV/hB,KAAK8hB,GAAGC,EAAE,+BAEZ,EACAmzB,kBAAiBA,CAACtwC,EAAGwmB,EAAGorB,EAAMC,EAAM7R,EAAQ8R,EAAKxyC,IAC5CU,QAA+C,EAC/CwmB,SAA+C,EAIxB,cAAxBwZ,EAAO+R,QAAQ1rB,MACV2rB,KAAKC,IAAIzrB,EAAE0rB,QAAUF,KAAKC,IAAIjyC,EAAEkyC,QACL,cAAxBlS,EAAO+R,QAAQ1rB,MAClB2rB,KAAKC,IAAIjyC,EAAEkyC,QAAUF,KAAKC,IAAIzrB,EAAE0rB,QAIjCF,KAAKC,IAAIzrB,EAAE0rB,QAAUF,KAAKC,IAAIjyC,EAAEkyC,QAExC9B,qBAAAA,CAAsB+B,EAAWC,GAChC,IAAKA,IAAWA,EAAOC,YAAcD,EAAOC,UAAUC,QACrD,OAAO,EAGR,MAAM5E,EAAU0E,EAAOC,UAEjBE,EAAWjpB,IAChB,IAAKA,EAAK,OAAO,KACjB,IAAI2B,EASJ,OAPCA,EADG3B,aAAeqF,KACbmH,MAAMC,SAASyc,WAAWlpB,GACN,iBAARA,EACZwM,MAAMC,SAASI,QAAQ7M,GAEvBwM,MAAMC,SAAS0c,WAAWC,OAAOppB,IAGhC2B,EAAGqnB,QAAUrnB,EAAK,MAGpBtX,EAAM4+B,EAAQJ,EAAU,IACxBv+B,EAAM2+B,EAAQJ,EAAU,IAG9B,OAAIx+B,IAAQC,EACJ85B,EAAQiF,QAAQh/B,EAAK,UAIzBA,IAAOC,KACH85B,GAAW/5B,EAAIi/B,QAAQ,QAAUlF,GAAW95B,EAAIwiB,MAAM,OAI/D,EACAmb,iBAAAA,CAAkBC,GAEjB,MAAMC,EAAgB,GACtBr2C,KAAK4nC,aAAa5mB,QAAQ80B,IACzBO,EAAcrrB,KAAK,GAAG8qB,EAAE3kC,eAAenR,KAAKuzC,YAG7C,MAAM+K,EAAmB,IAAI,IAAIhI,IAAID,IAC/BhF,EAAUrxC,KAAK8hB,GAAGC,EAAE,wCAAyC,CAAC/hB,KAAK69C,2BAA2B/pB,cACpGqd,GAAiBmN,EAAkBlI,EAAMG,cAAelF,EAASrxC,KAAKwhB,UAAWxhB,KAAK8hB,GACvF,EACAy8B,kBAAAA,CAAmBnI,GAElB,MAAMC,EAAgB,GACtBr2C,KAAK4nC,aAAa5mB,QAAQ0M,IACrBA,EAAI8wB,eAAenI,EAAcrrB,KAAK0C,EAAI8wB,eAC1C9wB,EAAI+wB,oBAAoBpI,EAAcrrB,KAAK0C,EAAI+wB,sBAIpD,MAAMH,EAAmB,IAAI,IAAIhI,IAAID,IAC/BhF,EAAUrxC,KAAK8hB,GAAGC,EAAE,yCAA0C,CAAC/hB,KAAK69C,2BAA2B/pB,cACrGqd,GAAiBmN,EAAkBlI,EAAMG,cAAelF,EAASrxC,KAAKwhB,UAAWxhB,KAAK8hB,GACvF,EACAyyB,aAAAA,CAAc1qC,EAAG2zB,GAChB,MAAM9P,EAAM8P,EAAKwW,SAUjB,OARGtmB,EAAIosB,aACNpsB,EAAIqsB,WAEJrsB,EAAIssB,SAILnwC,EAAEoqC,mBACK,CACR,EACAQ,gBAAAA,CAAiB5qC,EAAG2zB,GACnB,MAIM5Q,EAJQ4Q,EAAKyc,WACAC,UAGE/wC,OAAOgxC,GAAKA,EAAE51B,UAAUwlB,YAW7C,OAViBnd,EAAQ1M,MAAMi6B,GAAKA,EAAEL,cAGrCltB,EAAQ5L,QAAQm5B,GAAKA,EAAEJ,YAEvBntB,EAAQ5L,QAAQm5B,GAAKA,EAAEH,UAIxBnwC,EAAEoqC,mBACK,CACR,EACAkF,sBAAAA,CAAuBxiC,GACtB,MAAMyiC,EAAgB,GAChBC,EAAgB,GAEtB1iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,oCACjCpL,EAAQ4iC,iBAAmB,EAC3B5iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,oCACjCpL,EAAQ8iC,iBAAmB,EAE3B9iC,EAAQ8iB,cAAczY,QAAQqS,IACG,aAA7BA,EAAOQ,oBAAmCulB,EAAcpuB,KAAKqI,GAChC,aAA7BA,EAAOQ,oBAAmCwlB,EAAcruB,KAAKqI,KAOjE+lB,EAAcp4B,QAAQ04B,IACrB,GAAiB,MAAdA,EAAMtoC,MAAgBuF,EAAQ4iC,kBAAoB,EAAG,EACjB,iBAAfG,EAAMtoC,KAAoBpR,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQsoC,EAAMtoC,MAAQsoC,EAAMtoC,MACpGimB,SACV1gB,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ4iC,iBAAmB,IAE3B5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ4iC,iBAAmB,EAE7B,MAAyB,MAAdG,EAAMtoC,MAAgBuF,EAAQ4iC,kBAAoB,GAC5D5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ4iC,iBAAmB,GACM,GAAxBG,EAAM1lB,gBAA+C,MAArB0lB,EAAMphB,aAAuB3hB,EAAQ4iC,kBAAoB,GAClG5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ4iC,iBAAmB,GACO,GAAxBG,EAAM1lB,gBAA2B0lB,EAAM5C,QAAU,GAAKngC,EAAQ4iC,kBAAoB,IAC5F5iC,EAAQ2iC,aAAet5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ4iC,iBAAmB,KAI7BF,EAAcr4B,QAAQ04B,IACrB,GAAiB,MAAdA,EAAMtoC,MAAgBuF,EAAQ4iC,kBAAoB,EAAG,EACjB,iBAAfG,EAAMtoC,KAAoBpR,KAAKm3B,aAAa5J,KAAK6J,GAAOA,EAAIhmB,MAAQsoC,EAAMtoC,MAAQsoC,EAAMtoC,MACpGimB,SACV1gB,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ8iC,iBAAmB,IAE3B9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ8iC,iBAAmB,EAE7B,MAAyB,MAAdC,EAAMtoC,MAAgBuF,EAAQ8iC,kBAAoB,GAC5D9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ8iC,iBAAmB,GACM,GAAxBC,EAAM1lB,gBAA+C,MAArB0lB,EAAMphB,aAAuB3hB,EAAQ8iC,kBAAoB,GAClG9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,6BACjCpL,EAAQ8iC,iBAAmB,GACO,GAAxBC,EAAM1lB,gBAA2B0lB,EAAM5C,QAAU,GAAKngC,EAAQ8iC,kBAAoB,IAC5F9iC,EAAQ6iC,aAAex5C,KAAK8hB,GAAGC,EAAE,+BACjCpL,EAAQ8iC,iBAAmB,IAG9B,EACAiF,mBAAmBv+B,GACdA,EAAK2T,YAEF3T,GAAM2T,aAAaA,aAAe3T,GAAM2T,YAFlB,GAI9B6qB,WAAAA,CAAYx+B,GAGX,IAAIA,GAAM/O,KAAM,MAAO,GACvB,GAAG+O,EAAK/O,MAAM0iB,YAAa,OAAO3T,EAAK/O,KAAK0iB,YAE5C,MAAM8qB,EAAc5+C,KAAKm3B,aAAa5J,KAAKnc,GAAQA,EAAKA,MAAQ+O,EAAK/O,MACrE,OAAIwtC,EAEGA,EAAY9qB,YAFK3T,EAAK/O,IAG9B,EACAytC,iCAAAA,CAAkCxrB,GAGa,cAA3CA,EAAOS,aAAaD,oBAAiF,cAA3CR,EAAOS,aAAaD,mBAChFR,EAAOe,OAASf,EAAOS,YAAYA,YAEnCT,EAAOe,OAAS,EAElB,EACA0qB,eAAAA,CAAgBj1C,GACf,GAAG7J,KAAKunB,MAAM0uB,YAAY9T,UAAW,CACpC,MAAMmC,EAAQtkC,KAAKunB,MAAM0uB,YAAY9T,UAG/B4c,EAAWza,EAAM4T,aAAa/uC,OAAO61C,GAAgB,0BAAXA,EAAE/zB,OAE5Cg0B,EAAUp1C,EAAElE,MAAMiD,wBAA0B5I,KAAK8hB,GAAGC,EAAE,oBAAsB,GAAKlY,EAAElE,MAAMiD,uBAEzFs2C,EAAY,CAAEj0B,MAAO,yBAA0BnV,KADpCjM,EAAElE,MAAMiD,wBAA0B5I,KAAK8hB,GAAGC,EAAE,oBAAsB,KAAO,IACrBpc,MAAOs5C,GAG5E3a,EAAMoU,UAAU,IAAIqG,EAAUG,GAC/B,CAED,EACAlJ,+BAAAA,CAAgCr/B,GAC/B,MAAMikB,EAAMF,MAAMC,SAASC,MAG3BjkB,EAAQ8iB,cAAczY,QAAQqS,IAE7BA,EAAOS,YAAc9zB,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,qBAAuBR,EAAOQ,oBAG1FR,EAAO8J,UAAYrC,EAAkBzH,EAAQrzB,KAAKm3B,cAElD,MAAM/uB,EAAOsyB,MAAMC,SAASI,QAAQ1H,EAAO/a,OAAO0iB,MAAM,OACxD3H,EAAO4jB,UAAY7uC,EACnBirB,EAAOyjB,OAAS1uC,EAAKuxC,WAAa/e,EAAI+e,WAElCtmB,EAAOyjB,OAAS,IACdngC,EAAQijC,YACZvmB,EAAOyjB,OAASngC,EAAQijC,WAAW9C,UAEnCngC,EAAQijC,WAAavmB,GAEZA,EAAOyjB,OAAS,KACrBngC,EAAQkjC,YACZxmB,EAAOyjB,OAASngC,EAAQkjC,WAAW/C,UAEnCngC,EAAQkjC,WAAaxmB,KAMxBrzB,KAAKm5C,uBAAuBxiC,EAC7B,EACA8gC,SAAAA,GACC,OAAOx2B,KAAK+N,MAAM0oB,aAAaC,QAAQ33C,KAAK2zC,mBAAmB4B,gBAAkB,OAClF,EACAqC,SAAAA,CAAUtT,GAET,IAAItkC,KAAK63C,cAAe,OACxB,MACMC,EAAQ,CACbrX,QAFiB6D,EAAMyT,kBAEJ50C,IAAIglC,IAAG,CACzBld,MAAOkd,EAAIld,MACXia,QAASiD,EAAIjD,QACbwP,MAAOvM,EAAIuM,SAEZvpB,KAAMmZ,EAAM0T,aAAa70C,IAAI80C,IAAC,CAC7BhtB,MAAOgtB,EAAEhtB,MACTyrB,IAAKuB,EAAEvB,OAERlW,QAAS8D,EAAM4T,aACfC,cAAe7T,EAAMuG,oBAGtB6M,aAAaU,QAAQp4C,KAAK2zC,mBAAmB4B,cAAet0B,KAAKC,UAAU42B,GAC5E,EACAO,gBAAAA,GACC,MAAM/T,EAAQtkC,KAAKunB,MAAM0uB,YAAY9T,UAErCniC,KAAKyzC,oBAELnP,EAAM4F,GAAG,cAAe,KACvBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,gBAAiB,KACzBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,0BAA2B,KACnClqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,gBAAiB,KACzBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,sBAAuB,KAC/BlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,aAAc,KACtBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,eAAgB,KACxBlqC,KAAK43C,UAAUtT,KAGhBA,EAAM4F,GAAG,iBAAkB,KAC1BlqC,KAAK43C,UAAUtT,KAGhB,MAAMgU,EAAQt4C,KAAKy3C,YAEnBnT,EAAM4F,GAAG,iBAAkB,KAC1B,IAAIlqC,KAAK63C,cAAe,CAEvB,GAAIS,GAAO7X,UAAYzgC,KAAKu4C,kBAAmB,CAC9C,MAAM/O,EAAS8O,EAAM7X,QAAQt9B,IAAIglC,IAAG,CACnCld,MAAOkd,EAAIld,MACXypB,MAAOvM,EAAIuM,MACXxP,QAASiD,EAAIjD,WAIdZ,EAAMkU,gBAAgBhP,GAEtBxpC,KAAKu4C,mBAAoB,CAC1B,CAMA,GAJID,GAAO9X,UAAYxgC,KAAKy4C,kBAC3Bz4C,KAAKy4C,iBAAkB,EACvBnU,EAAMoU,UAAUJ,EAAM9X,UAEnB8X,GAAOH,gBAAkBn4C,KAAK24C,sBAAuB,CACxD34C,KAAK24C,uBAAwB,EAC7B,IAAK,IAAIC,KAAMN,EAAMH,cACpB7T,EAAMwG,qBAAqB8N,EAAG3tB,MAAO2tB,EAAGjzC,MAE1C,CAEI2yC,GAAOntB,MAAMrK,SAAW9gB,KAAK64C,eAChC74C,KAAK64C,cAAe,EAEpBC,WAAW,KACV,MAAMC,EAAWT,EAAMntB,KAAKhoB,IAAI80C,IAC/B,MAAM9P,EAAM7D,EAAM0U,cAAcC,WAAWhB,EAAEhtB,OAC7C,OAAKkd,EAGE,CAAEvD,OAAQuD,EAAKuO,IAAKuB,EAAEvB,KAFrB,OAGNvtC,OAAO+lB,SAEVoV,EAAM4U,QAAQH,IACZ,MAEJ/4C,KAAK63C,eAAgB,CAEtB,GAGF,EACAuC,4BAAAA,GACCp6C,KAAKizC,oBAAsBjzC,KAAKizC,kBACjC,EACA/D,wBAAwBvW,GAChBA,EAAO7E,YAEfqrB,kBAAkBxmB,GACVA,EAAOiG,WAAa,IAAMjG,EAAO7E,YAEzCsrB,8BAA8BzmB,GACtBA,EAAO/vB,uBAEfy2C,0BAA0B1mB,GAClBA,EAAO7E,YAEfmE,UAAAA,CAAWC,GACV,GAAiB,OAAdA,EAAoB,MAAO,GAC9B,MAAM9vB,EAAO,IAAImrB,KAAK2E,GAEhBC,EAAWC,GAAQ1M,OAAO0M,GAAK1E,SAAS,EAAG,KAE3C2E,EAAQF,EAAQ/vB,EAAKqrB,WAAa,GAIxC,MAAO,GAHK0E,EAAQ/vB,EAAKurB,cAGR0E,KAFJjwB,EAAKorB,eAGnB,EACA4qB,UAAAA,CAAW5gB,GACV,MAAM8hB,EAAgBr6B,SAASC,cAAc,OAC7Co6B,EAAcC,UAAY,eAC1BD,EAAcrmB,MAAMumB,QAAU,OAC9BF,EAAcrmB,MAAMwmB,WAAa,UACjCH,EAAcrmB,MAAMymB,eAAiB,SACrCJ,EAAcrmB,MAAM2Q,OAAS,OAE7B,MAAM1b,EAAMsP,EAAKC,WAEXkiB,EAAeA,CAACvd,EAAWwd,EAAUC,KAC1C,MAAMC,EAAM76B,SAASC,cAAc,UAgBnC,OAfA46B,EAAIP,UAAY,4BAChBO,EAAI7mB,MAAMumB,QAAU,OACpBM,EAAI7mB,MAAMwmB,WAAa,SACvBK,EAAI7mB,MAAMymB,eAAiB,SAC3BI,EAAI7mB,MAAM2Q,OAAS,OACnBkW,EAAI7mB,MAAM8mB,YAAc,QACxBD,EAAI7mB,MAAME,QAAU,IACJ,kBAAbiJ,IAA+B0d,EAAI7mB,MAAM+mB,UAAY,iBACxDF,EAAIG,UAAY,aAAa7d,mDAC7B0d,EAAI5jC,MAAQlc,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE69B,IACvCE,EAAIjc,iBAAiB,QAAUh6B,IAC9BA,EAAEoqC,kBACFpqC,EAAEq2C,2BACFL,MAEMC,GAQR,OALAR,EAAcz+B,OACb8+B,EAAa,oBAAqB,uBAAwB,IAAM3/C,KAAK48B,mBAAmB1O,IACxFyxB,EAAa,iBAAkB,+BAAgC,IAAM3/C,KAAKmgD,aAAajyB,KAGjFoxB,CACR,EAEA5J,aAAAA,CAAclY,GAIb,MAAM9P,EAAM8P,EAAKwW,SACdtmB,EAAIosB,cACNpsB,EAAIqsB,UAEN,EACAlG,cAAAA,CAAenmB,GACd,MAAMrpB,EAAOqpB,EAAInJ,UACjB,MAA+B,oBAA5BlgB,GAAMg6B,kBAEV,EACAgc,aAAAA,GACC,MAAM9O,EAAOhmC,2BAA2BC,SAAWD,2BAA2BE,UAC3E,4BACHuyB,OAAO3b,KAAKkvB,EAAM,SACnB,EACAgP,kBAAAA,GACCv6C,KAAKunB,MAAMizB,wBAAwBlpB,MACpC,EACAmpB,SAAAA,GACC,MAAM2F,EAAOpgD,KAAK4nC,cAAczkC,IAAIwT,GAAWA,EAAQmc,kBAEjDutB,EAAmB,IAAIrgD,KAAK4nC,cAElC5nC,KAAKmzC,QAAS,EACdnzC,KAAKozC,aAAalf,WAAal0B,KAAKozC,aAAavF,kBACjD7tC,KAAKoqB,KAAKoC,KAAKiG,EAAU8B,iBACxBv0B,KAAKozC,aAAa96B,MAAMigB,cACxBv4B,KAAKozC,aAAatf,YAAYD,mBAC9B7zB,KAAKozC,aAAatf,YAAYA,YAC9B9zB,KAAKozC,aAAahf,OAClBp0B,KAAKozC,aAAapf,eAClBosB,EACApgD,KAAKozC,aAAalf,YAChB/vB,KAAKC,IAEiB,YAApBA,EAAIob,KAAKxR,QAAwB5J,EAAIC,KACxCrE,KAAKwhB,UAAU8F,aAAatnB,KAAK8hB,GAAGC,EAAE,uCAEtC/hB,KAAKwhB,UAAUI,WAAW5hB,KAAK8hB,GAAGC,EAAE,0CAIrC,MAAMu+B,EAAal8C,EAAIC,KACvB+7C,EAAKp/B,QAAQu/B,IACZ,MAAM7mB,EAAS4mB,EAAW/yB,KAAKmM,GAAUA,EAAO5G,kBAAoBytB,GAE9DzjB,EAAK98B,KAAK87B,gBAAgBvO,KAAKuP,GAAMA,EAAGhK,kBAAoBytB,GAElE7mB,EAAO5F,YAAc9zB,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,oBAAsB6F,EAAO7F,oBAEzFiJ,EAAGrD,cAAczO,KAAK0O,GACtBoD,EAAGrD,cAActO,KAAK,CAACvmB,EAAGwmB,IAAM,IAAImI,KAAK3uB,EAAE0T,OAAS,IAAIib,KAAKnI,EAAE9S,UAKhE,MAAMgsB,EAAQtkC,KAAKunB,MAAM0uB,YAAY9T,UAC/Bqe,EAAUlc,EAAMC,WAAWoW,WAC3B8F,EAAUnc,EAAMC,WAAWsW,UAE3B6F,EAAa1gD,KAAK2gD,uBAAuB3gD,KAAK87B,iBAEpDwI,EAAMyE,QAAQ2X,GACdpc,EAAM4R,QAAO,GAEb9wB,IAAI01B,SAAS,KACZ,MAAMxW,EAAQtkC,KAAKunB,MAAM0uB,aAAa9T,UAAUqC,QAAQxa,cAAc,0BACnEsa,IACFA,EAAMqW,WAAa6F,EACnBlc,EAAMuW,UAAY4F,OAIlB5oB,QAAQ,KACV73B,KAAKmzC,QAAS,EACdnzC,KAAK4nC,aAAeyY,IAGrBrgD,KAAKunB,MAAMizB,wBAAwBnpB,MACpC,EACAsvB,sBAAAA,CAAuBC,GAEtB,OAAOA,EAASz9C,IAAIwT,IAUnB,GAPAA,EAAQozB,YAAa,EAErBpzB,EAAQijC,WAAa,KACrBjjC,EAAQkjC,WAAa,KAErB75C,KAAKg2C,gCAAgCr/B,GAElC3W,KAAKm3B,cAAgBxgB,EAAQvF,KAAM,CACrC,MAAMgmB,EAAMp3B,KAAKm3B,aAAa5J,KAAKhC,GAAKA,EAAEna,MAAQuF,EAAQvF,MAG1DuF,EAAQkqC,SAAWzpB,EAAItD,WACxB,CAEA,MAAO,IACHnd,EACH8iB,cAAe9iB,EAAQ8iB,cACvB9qB,QAAS,CACRwC,YAAawF,EAAQxF,YACrB2hB,iBAAkBnc,EAAQmc,kBAE3B0oB,IAAKx7C,KAAKq7C,SAAS1kC,GACnB8kC,YAAa9kC,EAAQ+kC,iBAAmB,KACxChd,IAAK/nB,EAAQ/N,uBACb+1B,IAAK3+B,KAAKu7C,SAAS5kC,GACnBkoB,KAAM7+B,KAAK89B,gBAAgBnnB,GAC3BmqC,aAAc9gD,KAAK+gD,kBAAkBpqC,GACrCqqC,cAAehhD,KAAKihD,mBAAmBtqC,GACvC8B,IAAK9B,EAAQglC,kBACb5c,MAAOpoB,EAAQooB,QAGlB,EACAgc,gBAAAA,CAAiB12C,GAChB,IAAI22C,EAAM,GAOV,OALA32C,EAAK2c,QAAQsE,IACZ01B,GAAO11B,EACP01B,GAAO,OAGDA,CACR,EACAte,UAAAA,CAAWt0B,GACV,MAAMu0B,EAAWjC,MAAMC,SAASI,QAAQ3yB,EAAM,CAAEoyB,KAAM,kBAAmBQ,MAAM,OAE/E,OADoBN,MAAMC,SAASC,MAAMC,QAAQ,iBAC5B8B,CACtB,EACAC,kBAAAA,CAAmBjuB,GAClB,MAAMmuB,EAAK98B,KAAK87B,gBAAgBvO,KAAK8I,GAAiBA,EAAcvD,kBAAoBnkB,EAAQmkB,kBAE7FgK,GAAIrD,eAAe3Y,QACrB9gB,KAAKoqB,KAAKoC,KAAKiG,EAAUsC,yCAAyC+H,EAAGrD,cAAct2B,IAAIkwB,GAAUA,EAAOO,aAAckJ,EAAG3rB,cACvHhN,KAAKC,IACkB,YAApBA,EAAIob,KAAKxR,QACX5J,EAAIC,KAAK2c,QAAQi6B,IAChB,MAAM5nB,EAASyJ,EAAGrD,cAAclM,KAAKmM,GAAUA,EAAO9F,aAAeqnB,EAASrnB,aAC3EP,QAAgC7wB,IAAtBy4C,EAASziB,WAAwBnF,EAAOmF,SAAWyiB,EAASziB,cAM9E,MAAMwE,EAA0B,OAAZF,EAAG1rB,KAEvB0rB,EAAGrD,cAAczY,QAAQqS,IACE,iBAAhBA,EAAOjiB,OAChBiiB,EAAOjiB,KAAOpR,KAAKs/B,oBAAoB/R,KAAK6J,GAAOA,EAAIhmB,MAAQiiB,EAAOjiB,QAInEiiB,EAAOqa,aAAera,EAAOjiB,OAChCiiB,EAAOqa,YAAcra,EAAOjiB,MAG7BiiB,EAAOzS,KAAO,GAIdyS,EAAO0a,eAAgB/Q,EAGvB3J,EAAO2a,iBAAkBhR,IAAuB3J,EAAOiF,cAIxD,MAAM4iB,EAAUpe,EAAGoe,SAAWpe,EAAGokB,gBAC3B/F,EAAWre,EAAGqe,UAAYre,EAAGqkB,iBACnCrkB,EAAG4T,QAAU,GAAGwK,KAAWC,IAE3Bn7C,KAAK+7B,sBAAwBe,EAC7B98B,KAAKunB,MAAM+V,2BAA2BhM,MACvC,EACA6uB,YAAAA,CAAajyB,GACZ,MAAMvX,EAAU3W,KAAK87B,gBAAgBvO,KAAK6zB,GAAKA,EAAEtuB,kBAAoB5E,EAAI4E,kBACrEnc,GAMJA,EAAQ8iB,cAAczY,QAAQqS,IAE7B,MAAMguB,EAAerhD,KAAK27B,kBAAkBpO,KAAK6J,GAAOA,EAAIvD,oBAAsBR,EAAOQ,oBACzFR,EAAOkE,SAAW8pB,EAAa9pB,WAEhCv3B,KAAK49C,gBAAkBjnC,EACvB3W,KAAKunB,MAAM+5B,OAAOhwB,QAVjBtxB,KAAKwhB,UAAUoG,UAAU,+BAW3B,EACA2V,qBAAAA,CAAsBC,GACrB,MAAMtP,EAAMsP,EAAKC,WACjB,GAAIvP,EAEJ,MAAO,8NACiIA,EAAI,YAC7I,EACAwP,gBAAgBF,GACR,8JAGRI,cAAcJ,GAEN,kGADKA,EAAKC,WAED,kEAEjB8jB,kBAAiBA,IACT,2JAGR1jB,qBAAqBL,GACRA,EAAKC,WAET,2JAEM,IAEfoX,iBAAiBrX,GAGT,kKAFKA,EAAKC,WAG+D,aAEjF0X,oBAAAA,CAAqB3X,GACpB,MAAMtP,EAAMsP,EAAKC,WAEjB,GAAGvP,EAAK,CACP,IAAI0U,EAAO,GACX,OAAO1U,EAAIiP,WACV,IAAK,aACJyF,EAAO,mDACP,MACD,IAAK,WACJA,EAAO,6CACP,MACD,IAAK,YACJA,EAAO,6CACP,MACD,IAAK,WACJA,EAAO,oCACP,MACD,IAAK,YACJA,EAAO,wCACP,MACD,IAAK,0BACJA,EAAO,yCACP,MACD,IAAK,YACJA,EAAO,oCACP,MACD,IAAK,iBACJA,EAAO,iDAIT,MAAM9O,EAAc5F,EAAI4F,aAAaA,aAAe5F,EAAI4F,YAExD,MAAO,uDACU5F,EAAIiP,UADd,wHAELyF,EAFK,gHAKsE9O,EAAY,MAAO9zB,KAAKi4B,WAAW/J,EAAI5V,OAL7G,kBASR,CACC,MAAO,EAGT,EACA8iC,YAAAA,CAAapzB,GACZhoB,KAAKyzC,kBAAoBzrB,CAC1B,EACA8V,eAAAA,CAAgBnnB,GACf,MAAO,UAAYA,EAAQxF,YAAa,IAAKnR,KAAKuzC,MACnD,EACA8H,SAAS1kC,GACD,GAAGA,EAAQxF,iBAAiBwF,EAAQ2kC,aAE5CC,SAAS5kC,IACAA,EAAQ8B,IAAM9B,EAAQyd,SAASnL,cAExC83B,kBAAkBpqC,GACdA,EAAQ6qC,uBAA+B7qC,EAAQ6qC,uBAC3C7qC,EAAQ8qC,iBAAmB,IAAM9qC,EAAQ+qC,kBAEjDT,mBAAmBtqC,GACXA,EAAQgrC,yBAA2B,GAE3C,eAAMvjB,CAAU/5B,GACfrE,KAAK87B,gBAAkBz3B,EAAK,GAC5BrE,KAAKuzC,OAASlvC,EAAK,GAEnBrE,KAAKgzC,UAAYhzC,KAAK2gD,uBAAuB3gD,KAAK87B,uBAE5C97B,KAAK0zC,kBAEX1zC,KAAKunB,MAAM0uB,YAAY9T,UAAU4G,QAAQ/oC,KAAKgzC,UAC/C,EACAhU,mBAAAA,CAAoB1iB,GAAM,EAAOs/B,GAChC57C,KAAKu2B,SAAU,EACfv2B,KAAKoqB,KAAKoC,KAAKiG,EAAUkC,iCACxB30B,KAAK69C,0BAA0Bv0C,eAC/BtJ,KAAK09C,mBAAmB9oB,SAAW,IAElCzwB,KAAKC,IACFA,GAAKC,MAAMrE,KAAKo+B,UAAUh6B,EAAIC,QAC/BwzB,QAAQ,KACR+jB,GACFA,MAEC/jB,QAAQ,KACV73B,KAAKu2B,SAAQ,GAEf,EACAsG,WAAAA,CAAYluB,GACX,OAAO,IAAI1L,QAAS+kB,IACnBhoB,KAAKoqB,KAAKoC,KAAKiG,EAAUI,yBAAyBlkB,IAChDxK,KAAKC,IACL4jB,EAAQ5jB,MAGZ,EACAy3C,iBAAAA,CAAkB/U,GACjB9mC,KAAKszC,cAAgBxM,CACtB,EACAgV,kBAAAA,GACC,MAAMC,EAAU/7C,KAAKszC,cAAiB,IAAMtzC,KAAKszC,cAAiB,GAC5D0I,EAAe/2B,SAASg3B,eAAe,qBAAuBF,GACpE,IAAIC,EAAc,OAClB,MAAME,EAAOF,EAAaG,wBAE1Bn8C,KAAK2zC,mBAAmB/J,OAAS5R,OAAOokB,eAAexS,OAASsS,EAAKG,IAAM,GAC3Er8C,KAAKunB,MAAM0uB,YAAY9T,UAAUma,UAAUt8C,KAAK2zC,mBAAmB/J,OACpE,EACA,kBAAM3K,GACLj/B,KAAK0zC,kBAAoB,IAAIzwC,QAAQjD,KAAKo7C,oBACpCp7C,KAAK0zC,wBAEL1zC,KAAK+9C,iBAKX/9C,KAAK87C,oBACN,EACA3M,kBAAkBxW,IACTA,EAAOyW,OAGjBzoB,SAAU,CACT41B,UAAAA,GACC,MAAM5/B,EAAO,GAgBb,OAdG3c,KAAKg+C,qCACPrhC,EAAKqO,KAAK,CACT6X,MAAO7iC,KAAK8hB,GAAGC,EAAE,sCAAuC,CAAC/hB,KAAKw8C,0BAC9DrP,QAASntC,KAAKm2C,oBAIbn2C,KAAKi+C,sCACPthC,EAAKqO,KAAK,CACT6X,MAAO7iC,KAAK8hB,GAAGC,EAAE,mCAAoC,CAAC/hB,KAAK4hD,2BAC3DzU,QAASntC,KAAKu+C,qBAIT5hC,CACR,EACAilC,wBAAAA,GACC,MAAMnF,EAAS,IAAInG,IAOnB,OALAt2C,KAAK4nC,aAAa5mB,QAAQ0M,IACrBA,EAAI8wB,eAAe/B,EAAOh1B,IAAIiG,EAAI8wB,eAClC9wB,EAAI+wB,oBAAoBhC,EAAOh1B,IAAIiG,EAAI+wB,sBAGrChC,EAAOviC,IACf,EACAsiC,uBAAAA,GACC,MAAMC,EAAS,IAAInG,IAQnB,OANAt2C,KAAK4nC,aAAa5mB,QAAQ0M,IACrBA,EAAIvc,aACPsrC,EAAOh1B,IAAIiG,EAAIvc,eAIVsrC,EAAOviC,IACf,GAED6U,MAAO,CACN,2BAA2B8J,GACQ,cAA/BA,GAAQhF,oBAAqE,cAA/BgF,GAAQhF,qBACxD7zB,KAAKozC,aAAahf,OAASyE,EAAO/E,aAGnC9zB,KAAKozC,aAAapf,eAAiB6E,EAAO6W,sBAC3C,EACAmO,yBAAAA,CAA0BhlB,EAAQgpB,GAGH,OAA3B7hD,KAAK09C,mBAAiE,OAAnC19C,KAAK69C,2BAC1C79C,KAAKg/B,qBAEP,EACA0e,iBAAAA,CAAkB7kB,GAGa,OAA3B74B,KAAK09C,mBAAiE,OAAnC19C,KAAK69C,2BAC1C79C,KAAKg/B,qBAEP,EACA4I,YAAAA,CAAa/O,GACZ,MAAMyL,EAAQtkC,KAAKunB,MAAM0uB,aAAa9T,UACtC,IAAImC,EAAO,OAEX,MAAMwd,EAAUxd,EAAM4V,UAEtBrhB,EAAO7X,QAAQwgB,IACd,MAAM9T,EAAMo0B,EAAQv0B,KAAK4sB,IAExB,GADaA,EAAE51B,UACNuO,kBAAoB0O,EAAS1O,iBAAkB,OAAOqnB,IAGhEzsB,EAAIssB,SACJ,MAAM+H,EAAKr0B,EAAIs0B,aAAa/V,SAAS,IAAIA,SAAS,IAAIA,SAAS,GAC5D8V,IAAIA,EAAGlM,SAAU,IAGtB,GAEDtb,OAAAA,GACCv6B,KAAKu2B,SAAU,EACfv2B,KAAK47B,eAAiB57B,KAAK8hB,GAAGxhB,aAAa,CAAC,aAAc,WAC1DN,KAAK47B,eAAez3B,KAAK,KAAMnE,KAAK67B,iBAAkB,IAGtD,MAAMomB,EAAW,CAChBjiD,KAAKoqB,KAAKoC,KAAKiG,EAAUC,aACzB1yB,KAAKoqB,KAAKoC,KAAKiG,EAAUoC,oBACzB70B,KAAKoqB,KAAKoC,KAAKuwB,GAAmBC,qCAClCh9C,KAAKoqB,KAAKoC,KAAKiG,EAAUjjB,YACzBxP,KAAKoqB,KAAKoC,KAAKiG,EAAUiC,qBAG1B10B,KAAK+9C,iBAAmB96C,QAAQC,WAAW++C,GACzC99C,KAAM+9C,IAIN,GAA0B,cAAtBA,EAAQ,GAAGl0C,OAAwB,CACtC,MAAM5J,EAAM89C,EAAQ,GAAGv8C,MACvB3F,KAAKsvC,cAAgBlrC,EAAIC,MAAMirC,cAC/BtvC,KAAK+yC,4BAA8B3uC,EAAIC,MAAM0uC,4BAC7C/yC,KAAKg+C,oCAAsC55C,EAAIC,MAAM25C,oCACrDh+C,KAAKi+C,qCAAuC75C,EAAIC,MAAM45C,oCACvD,CAGA,GAA0B,cAAtBiE,EAAQ,GAAGl0C,OAAwB,CACtC,MAAM5J,EAAM89C,EAAQ,GAAGv8C,MACvB3F,KAAK89C,qBAAuB15C,EAAIC,KAC5BrE,KAAK89C,sBAAsBh9B,SAC9B9gB,KAAK69C,0BAA4B79C,KAAKs9C,YACnCl5C,EAAIC,KAAKkpB,KAAK40B,GAAUA,EAAO74C,gBAAkBtJ,KAAKs9C,aACtDl5C,EAAIC,KAAK,GAEd,CAGA,GAA0B,cAAtB69C,EAAQ,GAAGl0C,OAAwB,CACtC,MAAM5J,EAAM89C,EAAQ,GAAGv8C,MACvB3F,KAAKw9C,OAASp5C,EAAIC,KAAK,GACvB,MAAMiY,EAAM,CAAE1T,uBAAwB5I,KAAK8hB,GAAGC,EAAE,qBAChD/hB,KAAKy9C,OAASnhC,EACdtc,KAAKu9C,uBAAyB,CAACjhC,KAAQtc,KAAKw9C,OAC7C,CAGA,GAA0B,cAAtB0E,EAAQ,GAAGl0C,OAAwB,CACtC,MAAM5J,EAAM89C,EAAQ,GAAGv8C,MACE,YAArBvB,EAAIob,MAAMxR,SACbhO,KAAKm3B,aAAe/yB,EAAIC,KAAK,GAC7BrE,KAAKs/B,oBAAsBt/B,KAAKm3B,aAAahuB,OAC5CiuB,GAAOhzB,EAAIC,KAAK,GAAG+nB,SAASgL,EAAIhmB,OAGjCpR,KAAK8vC,qBAAuB9vC,KAAKm3B,aAAahuB,OAC7CiuB,GAAOhzB,EAAIC,KAAK,GAAG+nB,SAASgL,EAAIhmB,QAIlCpR,KAAKk+C,0BAA4B,CAChC,CAAEpqB,YAAa1O,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,oCAAqC6S,QAAS,GAC1F,CAAEd,YAAa1O,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,yBAA0B6S,QAAS,GAC/E,CAAEd,YAAa1O,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,uBAAwB6S,SAAS,IAE9E50B,KAAK09C,kBAAoB19C,KAAKk+C,0BAA0B,EACzD,CAGA,GAA0B,cAAtBgE,EAAQ,GAAGl0C,OAAwB,CACtC,MAAM5J,EAAM89C,EAAQ,GAAGv8C,MACvB3F,KAAK27B,kBAAoBv3B,EAAIC,IAC9B,IAEAwzB,QAAQ,KACR73B,KAAKu2B,SAAU,GAElB,EACA9E,OAAAA,GACCzxB,KAAKi/B,cACN,EACApY,SAAU,2uVCjrCEu7B,GAAmB,CAC/B98B,KAAM,mBACNC,WAAY,CACXmgB,mBAED9W,MAAO,CACNyzB,gBAAiB,CAChBhzB,QAAS,MAEVoM,SAAU,CACT3lB,KAAMkK,OACN6O,UAAU,EACVQ,QAASA,KAAAA,CAAQ/J,KAAM,GAAIhgB,IAAK,KAChCorB,UAAU/qB,GACFA,GAASA,EAAM2f,MAAQ3f,EAAML,MAIvCjB,IAAAA,GACC,MAAO,CACNi+C,SAAU,KACVC,UAAW,KACXjP,cAAeluB,IAAIgI,IAAI,GACvBqmB,kBAAmB,KACnBC,kBAAmB,KACnB9X,eAAgB,KAChBC,iBAAiB,EACjB2mB,qBAAsB,CACrB5Y,OAAQ,IACRld,MAAO,mBACP8c,OAAQ,aACRP,YAAa7jB,IAAIuB,SAAS,IAAM3mB,KAAK8hB,GAAGC,EAAE,2BAC1C0e,QAAS,CACR,CAACvkB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,8BAA+BkJ,MAAO,QAAS6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAGjL,SAAS,GACnK,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,8BAA+BkJ,MAAO,kBAAmB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,EAAGjL,SAAS,GAC7K,CAACztB,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,4BAA6BkJ,MAAO,kBAAmB6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAC/J,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,iCAAkCkJ,MAAO,SAAU6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GAC3J,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,UAAW6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,GACjJ,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,MAAO6X,UAAW9iC,KAAKu9B,sBAAsBqX,UAAW,GAC5I,CAAC14B,MAAOkJ,IAAIuB,SAAS,IAAM3mB,KAAKs3B,YAAYt3B,KAAK8hB,GAAGC,EAAE,sBAAuBkJ,MAAO,WAAY6X,UAAW9iC,KAAKu9B,sBAAuBqX,UAAW,IAEnJ/M,aAAa,GAEd4a,2BAA4B,CAAC,CAC5BjsC,MAAO,aACPoU,QAASC,UACR7qB,KAAKyzC,sBAGN,CACCj9B,MAAO,YACPoU,QAASC,MAAOhhB,EAAG2zB,KAElB,GAAmC,YAAhCA,EAAKiY,YAAYhN,WAA0B,CAC7C,MAAMva,EAAMsP,EAAKC,WAEjB,GAAgB,kBAAbvP,EAAIyP,KACN39B,KAAK48B,mBAAmBY,EAAKC,iBACvB,GAAiB,wBAAbvP,EAAIyP,KAAgC,CAC9C,MAAM+kB,EAAgBn9C,2BAA2BC,SAAW,6GAA6G0oB,EAAImQ,mBAAmB,qBAAqBnQ,EAAI4E,iBAAiB,cAAgB5E,EAAImG,mBAE9P2D,OAAO3b,KAAKqmC,EAAe,SAC5B,CAED,MAAO,GAAoC,gBAAhCllB,EAAKiY,YAAYhN,WAA8B,CACzD,MAAMva,EAAMsP,EAAKC,WAEP,KAAPvP,GAAY8J,OAAO3b,KAAK6R,EAAK,SACjC,CACArkB,EAAEoqC,qBAKP,EACAvuB,QAAS,CACR6X,sBAAsBC,GAGd,kKAFKA,EAAKC,WAG+D,aAEjF2d,YAAAA,CAAapzB,GACZhoB,KAAKyzC,kBAAoBzrB,CAC1B,EACA26B,aAAAA,GACC3iD,KAAKoqB,KAAKoC,KAAKiG,EAAUgC,eAAez0B,KAAKqiD,iBAAoB,OAC/Dl+C,KAAKC,IACFA,GAAKC,MAAMrE,KAAKo+B,UAAUh6B,EAAIC,OAEpC,EACA+5B,SAAAA,CAAU/5B,GACTrE,KAAKuiD,UAAYl+C,EAEjBrE,KAAKuiD,UAAUvhC,QAAQ4hC,IACtBA,EAAGlS,SAAWkS,EAAGC,cAAiBD,EAAGC,cAAgB,IAAM,IAAMD,EAAGE,aAAe,IAAMF,EAAGG,eAAiBH,EAAGI,eAAkB,IAAMJ,EAAGI,eAAiB,IAC5JJ,EAAGK,gBAAkBL,EAAG1uB,UAAYl0B,KAAK8hB,GAAGC,EAAE,oBAAsB/hB,KAAK8hB,GAAGC,EAAE,qBAG/E/hB,KAAKunB,MAAM27B,cAAc/gB,UAAUwI,WAAW3qC,KAAKwiD,qBAAqB/hB,SACxEzgC,KAAKunB,MAAM27B,cAAc/gB,UAAU4G,QAAQ/oC,KAAKuiD,UACjD,EACA1G,iBAAAA,CAAkB/U,GACjB9mC,KAAKszC,cAAgBxM,CACtB,EACAgV,kBAAAA,GACC,MAAMC,EAAU/7C,KAAKszC,cAAiB,IAAMtzC,KAAKszC,cAAiB,GAC5D0I,EAAe/2B,SAASg3B,eAAe,qBAAuBF,GACpE,IAAIC,EAAc,OAClB,MAAME,EAAOF,EAAaG,wBAE1Bn8C,KAAKwiD,qBAAqB5Y,OAAS5R,OAAOokB,eAAexS,OAASsS,EAAKG,IAAM,GAC7Er8C,KAAKunB,MAAM27B,cAAc/gB,UAAUma,UAAUt8C,KAAKwiD,qBAAqB5Y,OACxE,EACA,kBAAM3K,GACLj/B,KAAK0zC,kBAAoB,IAAIzwC,QAAQjD,KAAKo7C,oBACpCp7C,KAAK0zC,kBAEX1zC,KAAK2iD,gBACL3iD,KAAK87C,oBACN,GAED/sB,MAAO,CAAA,EAGPpI,SAAU,CAAA,EAGV4T,OAAAA,GACCv6B,KAAK47B,eAAiB57B,KAAK8hB,GAAGxhB,aAAa,CAAC,aAAc,WAC1DN,KAAK47B,eAAez3B,KAAK,KAAMnE,KAAK67B,iBAAkB,GACvD,EACApK,OAAAA,GACCzxB,KAAKi/B,cACN,EACApY,SAAU,2YCnIX,MAAMnI,GAAM0G,IAAIC,UAAU,CACzBC,KAAM,gBACNC,WAAY,CACX+V,qBACAsX,yBACAsK,uBACAkF,qBAED/9C,KAAM,WACL,MAAO,CACN8+C,KAAM,KACN79C,IAAK,KACL6L,YAAa,KACbnH,OAAQ,KAEV,EACA0b,QAAS,CAAA,EAGTiB,SAAU,CACT8U,QAAAA,GACC,MAAO,CAAEn2B,IAAKtF,KAAKsF,IACpB,EACA89C,oBAAAA,GACC,OAAOpjD,KAAKmR,aAAenR,KAAKsF,GACjC,EACA+9C,eAAAA,GACC,OAAOrjD,KAAKgK,QAAU,IACvB,GAEDuwB,OAAAA,GACA,EACA9I,OAAAA,GAEC,MAAMpO,EAAO4B,SAASg3B,eAAe,kBAC/BqH,EAAQjgC,EAAKiD,aAAa,SAChCtmB,KAAKmjD,KAAOG,EAEZ,MAAMh+C,EAAM+d,EAAKiD,aAAa,OAC9BtmB,KAAKsF,IAAMA,EAEX,MAAM0E,EAASqZ,EAAKiD,aAAa,eACjCtmB,KAAKgK,OAASA,EAEd,MAAMmH,EAAckS,EAAKiD,aAAa,oBACtCtmB,KAAKmR,YAAcA,CAEpB,EACA0V,SAAU,yjBASXnI,GAAI3e,OAAO6e,iBAAiB0Y,YChErB,SAAoBisB,GAC1B,OAAKA,EACEA,EAAO,GAAGt6B,cAAgBs6B,EAAOna,MAAM,GAD1B,EAErB,ED8DA1qB,GAAImB,IAAIkS,SAAShyB,OAAOsvB,QAAS,CAChCiD,OAAQ,CACPC,QAAS,IACToX,QAAS,OAGXjrB,GAAI8kC,UAAU,UAAWzxB,SAAS4X,SAClCjrB,GAAImB,IAAIyO,GACR5P,GAAIuI,MAAM"} \ No newline at end of file diff --git a/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js b/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js index 11ecaa734..1d4bcd285 100644 --- a/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js +++ b/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js @@ -1,4 +1,4 @@ -import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";const r=function(t){return t.replace(/(.*)-(.*)-(.*)/,"$3.$2.$1")},s={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},a="Filter Component New Filter";var o={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=a);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:a})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},l={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const d={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},p={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var u={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let r=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?r.push({icon:"fa-solid "+d[n],label:i===e?p[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+d[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+d[n],label:p[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=p[n]),void 0===i.icon&&(i.icon=d[n]),r.push(i)):(void 0===i.label&&(i.label=e),r.push(i)))}t=r}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+d[e],label:p[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const c=new WeakMap;var f={mounted(t,e){let n=!1;c.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",c.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",c.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,r=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(r=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),r>0?s.setWidth(r):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var h={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},g=0;const v={components:{CoreFetchCmpt:s,FilterConfig:o,FilterColumns:l,TableDownload:u},directives:{collapseAutoClose:f},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(h.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(h.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(h.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(h.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(h.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(h.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(h.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var m={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const A={components:{CoreFetchCmpt:s},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(m.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(m.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t\n\t\t\x3c!-- Load side menu --\x3e\n\t\t\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t\n\t'},b="error",_="retval",y={get:function(t,e,n=null){return y._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return y._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(b)||!t.hasOwnProperty(_)||0!=t.error)},isError:function(t){return!y.isSuccess(t)},hasData:function(t){return!(!y.isSuccess(t)||!("object"==typeof t[_]&&Object.keys(t[_]).length>0||"array"==typeof t[_]&&t[_].length>0||"string"==typeof t[_]&&""!=t[_].trim()||"number"==typeof t[_]))},getData:function(t){return y.hasData(t)?t[_]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(_)?t[_]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(b)?t[b]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let r={method:n,url:y._generateRouterURI(t),timeout:5e3};if("get"==n?r.params=e:r.data=e,"object"==typeof i)for(var s in i)r[s]=i[s];return axios(r)}},$=2e3,F={getStudiensemester:function(){return y.get("codex/Bismeldestichtag/getStudiensemester",null,{timeout:$})},getBismeldestichtage:function(){return y.get("codex/Bismeldestichtag/getBismeldestichtage",null,{timeout:$})},addBismeldestichtag:function(t){return y.post("codex/Bismeldestichtag/addBismeldestichtag",{meldestichtag:t.meldestichtag,studiensemester_kurzbz:t.studiensemester_kurzbz},{timeout:$})},deleteBismeldestichtag:function(t){return y.post("codex/Bismeldestichtag/deleteBismeldestichtag",{meldestichtag_id:t.meldestichtag_id},{timeout:$})}};var C={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},S={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},E={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},z={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},T={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,i,r){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:i,attachment:r},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},k={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},P={ +import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";const r=function(t){return t.replace(/(.*)-(.*)-(.*)/,"$3.$2.$1")},s={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},a="Filter Component New Filter";var o={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=a);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:a})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},l={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const d={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},p={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var u={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let r=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?r.push({icon:"fa-solid "+d[n],label:i===e?p[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+d[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+d[n],label:p[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=p[n]),void 0===i.icon&&(i.icon=d[n]),r.push(i)):(void 0===i.label&&(i.label=e),r.push(i)))}t=r}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+d[e],label:p[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const c=new WeakMap;var f={mounted(t,e){let n=!1;c.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",c.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",c.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,r=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(r=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),r>0?s.setWidth(r):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var h={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},g=0;const v={components:{CoreFetchCmpt:s,FilterConfig:o,FilterColumns:l,TableDownload:u},directives:{collapseAutoClose:f},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(h.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(h.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.selectableRows||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.tabulatorOptions.selectableRows||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(h.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(h.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(h.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(h.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(h.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var m={getHeader:t=>({method:"get",url:"/api/frontend/v1/navigation/header",params:{navigation_page:t}}),getMenu:t=>({method:"get",url:"/api/frontend/v1/navigation/menu",params:{navigation_page:t}})};const A={components:{CoreFetchCmpt:s},props:{addHeaderMenuEntries:Object,addSideMenuEntries:Object,hideTopMenu:Boolean,leftNavCssClasses:{type:String,default:"navbar navbar-left-side"}},data:()=>({headerMenu:{},sideMenu:{}}),computed:{headerMenuEntries(){let t=this.headerMenu?{...this.headerMenu}:{};return null!=this.headerMenu&&null!=this.addHeaderMenuEntries&&Object.keys(this.addHeaderMenuEntries).length>0&&(t[this.addHeaderMenuEntries.description]=this.addHeaderMenuEntries),t},sideMenuEntries(){let t=this.sideMenu?{...this.sideMenu}:{};return null!=this.sideMenu&&null!=this.addSideMenuEntries&&Object.keys(this.addSideMenuEntries).length>0&&(t[this.addSideMenuEntries.description]=this.addSideMenuEntries),t}},methods:{getNavigationPage:()=>FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,fetchCmptApiFunctionHeader(){return this.$api.call(m.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(m.getMenu(this.getNavigationPage()))},fetchCmptDataFetchedHeader(t){this.headerMenu=t||{}},fetchCmptDataFetchedMenu(t){this.sideMenu=t||{}},getDataBsToggle:t=>t.children?"dropdown":null},template:'\n\t\t\x3c!-- Load head menu --\x3e\n\t\t\n\t\t\x3c!-- Load side menu --\x3e\n\t\t\n\n\t\t\x3c!-- Top menu --\x3e\n\t\t\n\n\t\t\x3c!-- Left side menu --\x3e\n\t\t\n\t'},b="error",_="retval",y={get:function(t,e,n=null){return y._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return y._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(b)||!t.hasOwnProperty(_)||0!=t.error)},isError:function(t){return!y.isSuccess(t)},hasData:function(t){return!(!y.isSuccess(t)||!("object"==typeof t[_]&&Object.keys(t[_]).length>0||"array"==typeof t[_]&&t[_].length>0||"string"==typeof t[_]&&""!=t[_].trim()||"number"==typeof t[_]))},getData:function(t){return y.hasData(t)?t[_]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(_)?t[_]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(b)?t[b]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let r={method:n,url:y._generateRouterURI(t),timeout:5e3};if("get"==n?r.params=e:r.data=e,"object"==typeof i)for(var s in i)r[s]=i[s];return axios(r)}},$=2e3,F={getStudiensemester:function(){return y.get("codex/Bismeldestichtag/getStudiensemester",null,{timeout:$})},getBismeldestichtage:function(){return y.get("codex/Bismeldestichtag/getBismeldestichtage",null,{timeout:$})},addBismeldestichtag:function(t){return y.post("codex/Bismeldestichtag/addBismeldestichtag",{meldestichtag:t.meldestichtag,studiensemester_kurzbz:t.studiensemester_kurzbz},{timeout:$})},deleteBismeldestichtag:function(t){return y.post("codex/Bismeldestichtag/deleteBismeldestichtag",{meldestichtag_id:t.meldestichtag_id},{timeout:$})}};var C={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},S={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},E={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},z={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},T={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,i,r){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:i,attachment:r},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},k={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},P={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},O={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:r},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+r,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let r="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,r,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:r})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const r=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},r)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},w={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},N={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},B={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},L={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},H={person:w,prestudent:N,mitarbeiter:B,anrechnung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:L,projektphase:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},M={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},R={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},x={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,r=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:r})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},j={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},J={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},I={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},U={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},G={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},q={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},V={search:C,phrasen:S,navigation:E,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:z,studstatus:T,profil:k,profilUpdate:P,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:O,notiz:H,betriebsmittel:M,checkperson:R,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:x,cms:j,lehre:J,addons:I,messages:U,vorlagen:G,addons:I,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+n.person_id)},getAllContractsNotAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+n.person_id)},getAllContractsAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+n.person_id+"/"+n.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+n.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:q,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const r=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});r.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),r.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),r.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),r.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),r.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,r)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,r)),post:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,r))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(V);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const Z=document.createElement("div"),K=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){Z.parentElement.removeChild(Z)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});K.use(t),K.use(i);const X=K.mount(Z);document.body.appendChild(Z);var Q={install:(t,e)=>{t.config.globalProperties.$p||t.use(at);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);X.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);X.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);X.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);X.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);X.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{X.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{X.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,r=!1){let s={severity:t,summary:e,detail:n,html:r};i||(s.life=3e3),X.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,r=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,r)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=y.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const r=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&r.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:r})):r.forEach(n.alertError))}if(400==t?.response?.status){let e=y.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},Y={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(Q);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let r,s;Array.isArray(e)?({counter:r,msgs:s}=await i(e)):({counter:r,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const r=await t,{counter:s,msgs:a}=await i(n);return r.counter+=s,r.msgs.push("
    "+e+"
    "+a.join("")+"
    "),r},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:r});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function r(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:r,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:r,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var r of i){let i=r.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(i=a);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(r)?n[i].push(...r):n[i].push(r)):e.push(r)}return n}void 0!==e?.errorHandling&&(i=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var r in i)e.handler[r](i[r]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),n&&(i?i.params=n:i={params:n}),p.get(e,i)),post:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),p.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=r(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const n=d(s,l(e));for(var u in n)a[u]?a[u][e.config.errorHeader]=n[u]:a[u]={[e.config.errorHeader]:n[u]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,a,p,u):"post"==s?this.post(i,a,p,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},tt={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const et=Vue.reactive({}),nt={};let it=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),rt=Vue.computed(()=>it.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==it.value).LC_Time:null);const st={user_language:it,user_locale:rt,setLanguage(t){const e=Object.keys(et);return this.config.globalProperties.$api.call(tt.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{et[t.category][t.phrase]=t.text}),it.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(nt[t]||(nt[t]=this.config.globalProperties.$api.call(tt.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{et[t]=e})),nt[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>et[t]?function(t,e,n){let i=et[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return et[t]||this.loadCategory(t),i.value}};var at={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(Y),t.config.globalProperties.$p={t:st.t,loadCategory:e=>st.loadCategory.call(t,e),setLanguage:e=>st.setLanguage.call(t,e),user_language:it,user_locale:rt,t_ref:st.t_ref},t.provide("$p",t.config.globalProperties.$p)}};const ot=Vue.createApp({data:function(){return{bismeldestichtagTabulatorOptions:{maxHeight:"100%",minHeight:50,layout:"fitColumns",index:"meldestichtag_id",initialSort:[{column:"meldestichtag",dir:"desc"}],columns:[{title:"Meldestichtag",field:"meldestichtag",headerFilter:!0,formatter:function(t){return r(t.getValue())}},{title:"Studiensemester",field:"studiensemester_kurzbz",headerFilter:!0,sorter:function(t,e,n,i,r,s,a){return new Date(n.getData().semester_start)-new Date(i.getData().semester_start)}},{title:"Semesterstart",field:"semester_start",headerFilter:!0,visible:!1,formatter:function(t){return r(t.getValue())}},{title:"ID",field:"meldestichtag_id",headerFilter:!0,visible:!1},{title:"Insertamum",field:"insertamum",headerFilter:!0,visible:!1},{title:"Insertvon",field:"insertvon",headerFilter:!0,visible:!1},{title:"Löschen",field:"loeschen",headerFilter:!1,formatter:function(t){return''}}]},bismeldestichtagTabulatorEventHandlers:[{event:"rowClick",handler:function(t,e){if("DIV"==t.target.nodeName){let t=e.getData();alert(t.studiensemester_kurzbz+": "+r(t.meldestichtag))}}},{event:"tableBuilt",handler:()=>{this.handlerStudiensemester()}}],meldestichtag:null,semList:null,currSem:null,fetchCmptApiFunction:{},fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchCmptRefresh:!0}},components:{CoreNavigationCmpt:A,CoreFilterCmpt:v,BismeldestichtagAPIs:F,CoreFetchCmpt:s,datepicker:VueDatePicker},methods:{handlerStudiensemester:function(){this.startFetchCmpt(F.getStudiensemester,null,this.fetchCmptDataFetchedStudiensemester)},handlerBismeldestichtage:function(){this.startFetchCmpt(F.getBismeldestichtage,null,this.fetchCmptDataFetchedBismeldestichtage)},handlerAddBismeldestichtag:function(t){this.startFetchCmpt(F.addBismeldestichtag,{meldestichtag:this.meldestichtag,studiensemester_kurzbz:this.currSem},this.fetchCmptDataFetchedAddBismeldestichtag)},handlerDeleteBismeldestichtag:function(t){this.startFetchCmpt(F.deleteBismeldestichtag,{meldestichtag_id:t},this.fetchCmptDataFetchedDeleteBismeldestichtag)},fetchCmptDataFetchedStudiensemester:function(t){if(y.isError(t)&&alert(y.getError(t)),y.hasData(t)){let e=y.getData(t);this.semList=e.semList,this.currSem=e.currSem,this.handlerBismeldestichtage()}else alert("No Studiensemester data")},fetchCmptDataFetchedBismeldestichtage:function(t){if(y.isError(t)&&alert(y.getError(t)),y.hasData(t)){this.$refs.bismeldestichtageTable.tabulator.setData(y.getData(t));let e=this.handlerDeleteBismeldestichtag,n=document.getElementsByClassName("delete-btn");for(let t in n)n[t].addEventListener&&n[t].addEventListener("click",function(){e(n[t].getAttribute("data-meldestichtag-id"))})}else this.$refs.bismeldestichtageTable.tabulator.setData([])},fetchCmptDataFetchedAddBismeldestichtag:function(t){y.isError(t)?alert(y.getError(t)):y.hasData(t)?this.handlerBismeldestichtage():alert("No response data")},fetchCmptDataFetchedDeleteBismeldestichtag:function(t){y.isError(t)?alert(y.getError(t)):y.hasData(t)?this.handlerBismeldestichtage():alert("No response data")},startFetchCmpt:function(t,e,n){this.fetchCmptApiFunction=t,null==e&&(e={}),this.fetchCmptApiFunctionParams=e,this.fetchCmptDataFetched=n,!0===this.fetchCmptRefresh?this.fetchCmptRefresh=!1:this.fetchCmptRefresh=!0}}});FhcApps.makeExtendable(ot),ot.use(at).mount("#main"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},O={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:r},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+r,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let r="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,r,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:r})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const r=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},r)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},w={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},N={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},B={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},L={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},H={person:w,prestudent:N,mitarbeiter:B,anrechnung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:L,projektphase:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},R={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},M={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},x={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,r=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:r})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},j={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},J={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},I={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},U={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},G={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},q={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},V={search:C,phrasen:S,navigation:E,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:z,studstatus:T,profil:k,profilUpdate:P,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:O,notiz:H,betriebsmittel:R,checkperson:M,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:x,cms:j,lehre:J,addons:I,messages:U,vorlagen:G,addons:I,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+n.person_id)},getAllContractsNotAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+n.person_id)},getAllContractsAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+n.person_id+"/"+n.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+n.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:q,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const r=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});r.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),r.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),r.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),r.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),r.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,r)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,r)),post:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,r))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(V);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const Z=document.createElement("div"),K=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){Z.parentElement.removeChild(Z)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});K.use(t),K.use(i);const X=K.mount(Z);document.body.appendChild(Z);var Q={install:(t,e)=>{t.config.globalProperties.$p||t.use(at);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);X.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);X.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);X.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);X.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);X.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{X.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{X.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,r=!1){let s={severity:t,summary:e,detail:n,html:r};i||(s.life=3e3),X.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,r=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,r)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=y.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const r=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&r.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:r})):r.forEach(n.alertError))}if(400==t?.response?.status){let e=y.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},Y={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(Q);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let r,s;Array.isArray(e)?({counter:r,msgs:s}=await i(e)):({counter:r,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const r=await t,{counter:s,msgs:a}=await i(n);return r.counter+=s,r.msgs.push("
    "+e+"
    "+a.join("")+"
    "),r},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:r});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function r(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:r,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:r,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var r of i){let i=r.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(i=a);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(r)?n[i].push(...r):n[i].push(r)):e.push(r)}return n}void 0!==e?.errorHandling&&(i=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var r in i)e.handler[r](i[r]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),n&&(i?i.params=n:i={params:n}),p.get(e,i)),post:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),p.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=r(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const n=d(s,l(e));for(var u in n)a[u]?a[u][e.config.errorHeader]=n[u]:a[u]={[e.config.errorHeader]:n[u]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,a,p,u):"post"==s?this.post(i,a,p,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},tt={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const et=Vue.reactive({}),nt={};let it=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),rt=Vue.computed(()=>it.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==it.value).LC_Time:null);const st={user_language:it,user_locale:rt,setLanguage(t){const e=Object.keys(et);return this.config.globalProperties.$api.call(tt.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{et[t.category][t.phrase]=t.text}),it.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(nt[t]||(nt[t]=this.config.globalProperties.$api.call(tt.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{et[t]=e})),nt[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>et[t]?function(t,e,n){let i=et[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return et[t]||this.loadCategory(t),i.value}};var at={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(Y),t.config.globalProperties.$p={t:st.t,loadCategory:e=>st.loadCategory.call(t,e),setLanguage:e=>st.setLanguage.call(t,e),user_language:it,user_locale:rt,t_ref:st.t_ref},t.provide("$p",t.config.globalProperties.$p)}};const ot=Vue.createApp({data:function(){return{bismeldestichtagTabulatorOptions:{maxHeight:"100%",minHeight:50,layout:"fitColumns",index:"meldestichtag_id",initialSort:[{column:"meldestichtag",dir:"desc"}],columns:[{title:"Meldestichtag",field:"meldestichtag",headerFilter:!0,formatter:function(t){return r(t.getValue())}},{title:"Studiensemester",field:"studiensemester_kurzbz",headerFilter:!0,sorter:function(t,e,n,i,r,s,a){return new Date(n.getData().semester_start)-new Date(i.getData().semester_start)}},{title:"Semesterstart",field:"semester_start",headerFilter:!0,visible:!1,formatter:function(t){return r(t.getValue())}},{title:"ID",field:"meldestichtag_id",headerFilter:!0,visible:!1},{title:"Insertamum",field:"insertamum",headerFilter:!0,visible:!1},{title:"Insertvon",field:"insertvon",headerFilter:!0,visible:!1},{title:"Löschen",field:"loeschen",headerFilter:!1,formatter:function(t){return''}}]},bismeldestichtagTabulatorEventHandlers:[{event:"rowClick",handler:function(t,e){if("DIV"==t.target.nodeName){let t=e.getData();alert(t.studiensemester_kurzbz+": "+r(t.meldestichtag))}}},{event:"tableBuilt",handler:()=>{this.handlerStudiensemester()}}],meldestichtag:null,semList:null,currSem:null,fetchCmptApiFunction:{},fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchCmptRefresh:!0}},components:{CoreNavigationCmpt:A,CoreFilterCmpt:v,BismeldestichtagAPIs:F,CoreFetchCmpt:s,datepicker:VueDatePicker},methods:{handlerStudiensemester:function(){this.startFetchCmpt(F.getStudiensemester,null,this.fetchCmptDataFetchedStudiensemester)},handlerBismeldestichtage:function(){this.startFetchCmpt(F.getBismeldestichtage,null,this.fetchCmptDataFetchedBismeldestichtage)},handlerAddBismeldestichtag:function(t){this.startFetchCmpt(F.addBismeldestichtag,{meldestichtag:this.meldestichtag,studiensemester_kurzbz:this.currSem},this.fetchCmptDataFetchedAddBismeldestichtag)},handlerDeleteBismeldestichtag:function(t){this.startFetchCmpt(F.deleteBismeldestichtag,{meldestichtag_id:t},this.fetchCmptDataFetchedDeleteBismeldestichtag)},fetchCmptDataFetchedStudiensemester:function(t){if(y.isError(t)&&alert(y.getError(t)),y.hasData(t)){let e=y.getData(t);this.semList=e.semList,this.currSem=e.currSem,this.handlerBismeldestichtage()}else alert("No Studiensemester data")},fetchCmptDataFetchedBismeldestichtage:function(t){if(y.isError(t)&&alert(y.getError(t)),y.hasData(t)){this.$refs.bismeldestichtageTable.tabulator.setData(y.getData(t));let e=this.handlerDeleteBismeldestichtag,n=document.getElementsByClassName("delete-btn");for(let t in n)n[t].addEventListener&&n[t].addEventListener("click",function(){e(n[t].getAttribute("data-meldestichtag-id"))})}else this.$refs.bismeldestichtageTable.tabulator.setData([])},fetchCmptDataFetchedAddBismeldestichtag:function(t){y.isError(t)?alert(y.getError(t)):y.hasData(t)?this.handlerBismeldestichtage():alert("No response data")},fetchCmptDataFetchedDeleteBismeldestichtag:function(t){y.isError(t)?alert(y.getError(t)):y.hasData(t)?this.handlerBismeldestichtage():alert("No response data")},startFetchCmpt:function(t,e,n){this.fetchCmptApiFunction=t,null==e&&(e={}),this.fetchCmptApiFunctionParams=e,this.fetchCmptDataFetched=n,!0===this.fetchCmptRefresh?this.fetchCmptRefresh=!1:this.fetchCmptRefresh=!0}}});FhcApps.makeExtendable(ot),ot.use(at).mount("#main"); //# sourceMappingURL=Bismeldestichtag.js.map diff --git a/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js.map b/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js.map index 527f13d86..19ff2901e 100644 --- a/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js.map +++ b/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js.map @@ -1 +1 @@ -{"version":3,"file":"Bismeldestichtag.js","sources":["../../../../js/apps/Bismeldestichtag/BismeldestichtagHelper.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/api/factory/navigation.js","../../../../js/components/navigation/Navigation.js","../../../../js/RESTClient.js","../../../../js/apps/Bismeldestichtag/API.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Bismeldestichtag/Bismeldestichtag.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport const BismeldestichtagHelper = {\n\tformatDate: function(date) {\n\t\treturn date.replace(/(.*)-(.*)-(.*)/, '$3.$2.$1');\n\t}\n}\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/header',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t},\n\tgetMenu(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/menu',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport ApiNavigation from '../../api/factory/navigation.js';\n\n/**\n *\n */\nexport const CoreNavigationCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt\n\t},\n\tprops: {\n\t\taddHeaderMenuEntries: Object, // property used to add new header menu entries from another app/component\n\t\taddSideMenuEntries: Object, // property used to add new side menu entries from another app/component\n\t\thideTopMenu: Boolean,\n\t\tleftNavCssClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: 'navbar navbar-left-side'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theaderMenu: {}, // header menu entries\n\t\t\tsideMenu: {} // side menu entries\n\t\t};\n\t},\n\tcomputed: {\n\t\t/**\n\t\t *\n\t\t */\n\t\theaderMenuEntries() {\n\t\t\t//\n\t\t\tlet hm = this.headerMenu ? {...this.headerMenu} : {};\n\t\t\tif (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\thm[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;\n\t\t\t}\n\t\t\treturn hm;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsideMenuEntries() {\n\t\t\t//\n\t\t\tlet sm = this.sideMenu ? {...this.sideMenu} : {};\n\t\t\tif (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\tsm[this.addSideMenuEntries.description] = this.addSideMenuEntries;\n\t\t\t}\n\t\t\treturn sm;\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetNavigationPage() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionHeader() {\n\t\t\treturn this.$api.call(ApiNavigation.getHeader(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionSideMenu() {\n\t\t\treturn this.$api.call(ApiNavigation.getMenu(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedHeader(data) {\n\t\t\tthis.headerMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedMenu(data) {\n\t\t\tthis.sideMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetDataBsToggle(header) {\n\t\t\treturn !header.children ? null : 'dropdown';\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreRESTClient} from '../../RESTClient.js';\n\n//\nconst CORE_BISMELDESTICHTAG_CMPT_TIMEOUT = 2000;\n\n/**\n *\n */\nexport const BismeldestichtagAPIs = {\n\t/**\n\t *\n\t */\n\tgetStudiensemester: function() {\n\t\treturn CoreRESTClient.get(\n\t\t\t'codex/Bismeldestichtag/getStudiensemester',\n\t\t\tnull,\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t},\n\tgetBismeldestichtage: function() {\n\t\treturn CoreRESTClient.get(\n\t\t\t'codex/Bismeldestichtag/getBismeldestichtage',\n\t\t\tnull,\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t},\n\taddBismeldestichtag: function(wsParams) {\n\t\treturn CoreRESTClient.post(\n\t\t\t'codex/Bismeldestichtag/addBismeldestichtag',\n\t\t\t{\n\t\t\t\tmeldestichtag: wsParams.meldestichtag,\n\t\t\t\tstudiensemester_kurzbz: wsParams.studiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t},\n\tdeleteBismeldestichtag: function(wsParams) {\n\t\treturn CoreRESTClient.post(\n\t\t\t'codex/Bismeldestichtag/deleteBismeldestichtag',\n\t\t\t{\n\t\t\t\tmeldestichtag_id: wsParams.meldestichtag_id\n\t\t\t},\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {BismeldestichtagHelper} from './BismeldestichtagHelper.js';\n\nimport {CoreFilterCmpt} from '../../components/filter/Filter.js';\nimport {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';\nimport {CoreRESTClient} from '../../RESTClient.js';\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport {BismeldestichtagAPIs} from './API.js';\n\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\n\nconst bismeldestichtagApp = Vue.createApp({\n\tdata: function() {\n\t\treturn {\n\t\t\tbismeldestichtagTabulatorOptions: {\n\t\t\t\tmaxHeight: \"100%\",\n\t\t\t\tminHeight: 50,\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tindex: 'meldestichtag_id',\n\t\t\t\tinitialSort:[\n\t\t\t\t\t{column:\"meldestichtag\", dir:\"desc\"}\n\t\t\t\t],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: 'Meldestichtag', field: 'meldestichtag', headerFilter: true, formatter: function(cell){\n\t\t\t\t\t\t\treturn BismeldestichtagHelper.formatDate(cell.getValue());\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{title: 'Studiensemester', field: 'studiensemester_kurzbz', headerFilter: true, sorter:function(a, b, aRow, bRow, column, dir, sorterParams) {\n\n\t\t\t\t\t\t\t//aRow, bRow - the row components for the values being compared\n\t\t\t\t\t\t\tlet semesterStartA = new Date(aRow.getData().semester_start);\n\t\t\t\t\t\t\tlet semesterStartB = new Date(bRow.getData().semester_start);\n\n\t\t\t\t\t\t\treturn semesterStartA - semesterStartB; // difference between studiensemester start dates\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{title: 'Semesterstart',field: 'semester_start', headerFilter: true, visible: false, formatter: function(cell){\n\t\t\t\t\t\t\treturn BismeldestichtagHelper.formatDate(cell.getValue());\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{title: 'ID', field: 'meldestichtag_id', headerFilter: true, visible: false},\n\t\t\t\t\t{title: 'Insertamum', field: 'insertamum', headerFilter: true, visible: false},\n\t\t\t\t\t{title: 'Insertvon', field: 'insertvon', headerFilter: true, visible: false},\n\t\t\t\t\t{title: 'Löschen', field: 'loeschen', headerFilter: false, formatter:function(cell){\n\t\t\t\t\t\t\treturn\t'';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tbismeldestichtagTabulatorEventHandlers: [\n\t\t\t\t{\n\t\t\t\t\tevent: \"rowClick\",\n\t\t\t\t\thandler: function(e, row) {\n\t\t\t\t\t\tif (e.target.nodeName == 'DIV') {\n\t\t\t\t\t\t\tlet data = row.getData();\n\t\t\t\t\t\t\talert(data.studiensemester_kurzbz + ': ' + BismeldestichtagHelper.formatDate(data.meldestichtag));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\t\thandler: () => {\n\t\t\t\t\t\tthis.handlerStudiensemester();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tmeldestichtag: null, // date of Meldestichtag\n\t\t\tsemList: null, // all Studiensemester for dropdown\n\t\t\tcurrSem: null, // selected Studiensemester\n\t\t\tfetchCmptApiFunction: {}, // api function call\n\t\t\tfetchCmptApiFunctionParams: null, // parameters for api function call\n\t\t\tfetchCmptDataFetched: null, // function to execute after call\n\t\t\tfetchCmptRefresh: true // for refreshing\n\t\t};\n\t},\n\tcomponents: {\n\t\tCoreNavigationCmpt,\n\t\tCoreFilterCmpt,\n\t\tBismeldestichtagAPIs,\n\t\tCoreFetchCmpt,\n\t\t\"datepicker\": VueDatePicker\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Define Studiensemester call and method to be executed after the call\n\t\t */\n\t\thandlerStudiensemester: function() {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.getStudiensemester,\n\t\t\t\tnull,\n\t\t\t\tthis.fetchCmptDataFetchedStudiensemester\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Define Studiensemester call and method to be executed after the call\n\t\t */\n\t\thandlerBismeldestichtage: function() {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.getBismeldestichtage,\n\t\t\t\tnull,\n\t\t\t\tthis.fetchCmptDataFetchedBismeldestichtage\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Define add Bismeldestichtag call and method to be executed after the call\n\t\t */\n\t\thandlerAddBismeldestichtag: function(event) {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.addBismeldestichtag,\n\t\t\t\t{\n\t\t\t\t\tmeldestichtag: this.meldestichtag,\n\t\t\t\t\tstudiensemester_kurzbz: this.currSem\n\t\t\t\t},\n\t\t\t\tthis.fetchCmptDataFetchedAddBismeldestichtag\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Define delete Bismeldestichtag call and method to be executed after the call\n\t\t */\n\t\thandlerDeleteBismeldestichtag: function(meldestichtag_id) {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.deleteBismeldestichtag,\n\t\t\t\t{\n\t\t\t\t\tmeldestichtag_id: meldestichtag_id\n\t\t\t\t},\n\t\t\t\tthis.fetchCmptDataFetchedDeleteBismeldestichtag\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Called after Studiensemester response is received\n\t\t */\n\t\tfetchCmptDataFetchedStudiensemester: function(data) {\n\t\t\tif (CoreRESTClient.isError(data)) alert(CoreRESTClient.getError(data));\n\t\t\tif (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\tlet semRes = CoreRESTClient.getData(data);\n\t\t\t\tthis.semList = semRes.semList;\n\t\t\t\tthis.currSem = semRes.currSem;\n\t\t\t\tthis.handlerBismeldestichtage();\n\t\t\t}\n\t\t\telse\n\t\t\t\talert(\"No Studiensemester data\");\n\t\t},\n\t\t/**\n\t\t * Called after Bismeldestichtage response is received\n\t\t */\n\t\tfetchCmptDataFetchedBismeldestichtage: function(data) {\n\t\t\tif (CoreRESTClient.isError(data)) alert(CoreRESTClient.getError(data));\n\t\t\tif (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\t// set the Meldestichtagedata\n\t\t\t\tthis.$refs.bismeldestichtageTable.tabulator.setData(CoreRESTClient.getData(data));\n\n\t\t\t\t// save delete Bismeldestichtag function\n\t\t\t\tlet funcDeleteBismeldestichtag = this.handlerDeleteBismeldestichtag;\n\n\t\t\t\tlet btns = document.getElementsByClassName('delete-btn');\n\n\t\t\t\t// add click events for deletion\n\t\t\t\tfor (let btn in btns)\n\t\t\t\t{\n\t\t\t\t\tif (btns[btn].addEventListener)\n\t\t\t\t\t{\n\t\t\t\t\t\tbtns[btn].addEventListener('click',\n\t\t\t\t\t\t\tfunction(){\n\t\t\t\t\t\t\t\tfuncDeleteBismeldestichtag(btns[btn].getAttribute('data-meldestichtag-id'));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.$refs.bismeldestichtageTable.tabulator.setData([]);\n\t\t},\n\t\t/**\n\t\t * Called after Add Bismeldestichtag response is received\n\t\t */\n\t\tfetchCmptDataFetchedAddBismeldestichtag: function(data) {\n\t\t\tif (CoreRESTClient.isError(data))\n\t\t\t\talert(CoreRESTClient.getError(data));\n\t\t\telse if (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\tthis.handlerBismeldestichtage();\n\t\t\t}\n\t\t\telse\n\t\t\t\talert(\"No response data\");\n\t\t},\n\t\t/**\n\t\t * Called after Add Bismeldestichtag response is received\n\t\t */\n\t\tfetchCmptDataFetchedDeleteBismeldestichtag: function(data) {\n\t\t\tif (CoreRESTClient.isError(data))\n\t\t\t\talert(CoreRESTClient.getError(data));\n\t\t\telse if (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\tthis.handlerBismeldestichtage();\n\t\t\t}\n\t\t\telse\n\t\t\t\talert(\"No response data\");\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt: function(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t}\n\t}\n});\n\nFhcApps.makeExtendable(bismeldestichtagApp);\n\nbismeldestichtagApp.use(PluginsPhrasen).mount('#main');\n"],"names":["BismeldestichtagHelper","date","replace","CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","Array","default","columns","fields","switchFilter","applyFilterConfig","saveCustomFilter","currentFields","computed","types","reduce","a","c","toLowerCase","indexOf","name","n","evt","currentTarget","value","filteredFields","filter","el","condition","length","alert","addField","push","removeField","index","splice","FilterColumns","selected","names","Object","hide","show","selectedFields","toggle","field","DEFAULT_ICONS","jsonLines","xlsx","pdf","html","json","csv","DEFAULT_LABELS","TableDownload","tabulator","config","String","iconClass","currentConfig","prototype","toString","call","split","isArray","newConfig","k","v","stringToFileFormatter","icon","label","formatter","map","validateFileFormatter","input","lcInput","includes","window","XLSX","jspdf","jsPDF","autoTable","download","file","options","elementDataMap","WeakMap","collapseAutoClose","mounted","binding","open","set","contains","target","collapse","bootstrap","Collapse","getInstance","addEventListener","document","get","beforeUnmount","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","forEach","column","i","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","update","ApiFilter","wsParams","method","url","params","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","_uuid","CoreFilterCmpt","components","directives","onNwNewEntry","title","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","sort","headerFilter","group","page","notSelectedFields","x","filteredData","JSON","parse","stringify","filteredColumns","hasOwnProperty","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","res","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","$p","loadCategory","t","resolve","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","$api","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","dataTree","$refs","on","event","handler","toDelete","childIdx","child","appendChild","counter","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","id","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","handlerSaveCustomFilter","getAttribute","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","ApiNavigation","getHeader","navigation_page","getMenu","CoreNavigationCmpt","addHeaderMenuEntries","addSideMenuEntries","hideTopMenu","leftNavCssClasses","headerMenu","headerMenuEntries","hm","keys","sideMenuEntries","sm","getNavigationPage","fetchCmptApiFunctionHeader","fetchCmptApiFunctionSideMenu","fetchCmptDataFetchedHeader","fetchCmptDataFetchedMenu","getDataBsToggle","header","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","post","isSuccess","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","uri","app_root","ci_router","_printDebug","parameters","errorThrown","axiosCallObj","timeout","prop","axios","CORE_BISMELDESTICHTAG_CMPT_TIMEOUT","BismeldestichtagAPIs","getStudiensemester","getBismeldestichtage","addBismeldestichtag","meldestichtag","studiensemester_kurzbz","deleteBismeldestichtag","meldestichtag_id","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$1","category","setLanguage","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","filter$1","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","approve","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","LvPlanEvents","lv_id","stv","verband","favorites","students","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","e","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","globalProperties","factory","console","warn","addEndpoints","_get_config","TypeError","clearValidation","setFeedback","_clean_return_value","result","meta","fhcApiAxios","baseURL","interceptors","request","use","FormData","values","every","item","FileList","File","newData","entries","nd","key","append","jsondata","errors","err","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","bind","provide","helperAppContainer","createElement","helperApp","Vue","createApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","detail","openMessagecard","getOrCreateInstance","unmounted","parentElement","removeChild","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","mount","body","FhcAlert","FhcPhrasen","alertSuccess","toast","add","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","alertMultiple","messageArray","handleSystemError","errMsg","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","querySelector","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","msgs","b","n_errors","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","obj","elem","extractCategory","t_ref","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","bismeldestichtagApp","bismeldestichtagTabulatorOptions","initialSort","dir","cell","getValue","sorter","aRow","bRow","sorterParams","Date","semester_start","getRow","getIndex","bismeldestichtagTabulatorEventHandlers","nodeName","handlerStudiensemester","semList","currSem","datepicker","VueDatePicker","fetchCmptDataFetchedStudiensemester","handlerBismeldestichtage","fetchCmptDataFetchedBismeldestichtage","handlerAddBismeldestichtag","fetchCmptDataFetchedAddBismeldestichtag","handlerDeleteBismeldestichtag","fetchCmptDataFetchedDeleteBismeldestichtag","semRes","bismeldestichtageTable","funcDeleteBismeldestichtag","btns","getElementsByClassName","btn","FhcApps","makeExtendable"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Bismeldestichtag.js","sources":["../../../../js/apps/Bismeldestichtag/BismeldestichtagHelper.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/api/factory/navigation.js","../../../../js/components/navigation/Navigation.js","../../../../js/RESTClient.js","../../../../js/apps/Bismeldestichtag/API.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Bismeldestichtag/Bismeldestichtag.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport const BismeldestichtagHelper = {\n\tformatDate: function(date) {\n\t\treturn date.replace(/(.*)-(.*)-(.*)/, '$3.$2.$1');\n\t}\n}\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || tabulatorOptions.selectableRows || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.tabulatorOptions.selectableRows || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/header',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t},\n\tgetMenu(navigation_page) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/navigation/menu',\n\t\t\tparams: { navigation_page }\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport ApiNavigation from '../../api/factory/navigation.js';\n\n/**\n *\n */\nexport const CoreNavigationCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt\n\t},\n\tprops: {\n\t\taddHeaderMenuEntries: Object, // property used to add new header menu entries from another app/component\n\t\taddSideMenuEntries: Object, // property used to add new side menu entries from another app/component\n\t\thideTopMenu: Boolean,\n\t\tleftNavCssClasses: {\n\t\t\ttype: String,\n\t\t\tdefault: 'navbar navbar-left-side'\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\theaderMenu: {}, // header menu entries\n\t\t\tsideMenu: {} // side menu entries\n\t\t};\n\t},\n\tcomputed: {\n\t\t/**\n\t\t *\n\t\t */\n\t\theaderMenuEntries() {\n\t\t\t//\n\t\t\tlet hm = this.headerMenu ? {...this.headerMenu} : {};\n\t\t\tif (this.headerMenu != null && this.addHeaderMenuEntries != null && Object.keys(this.addHeaderMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\thm[this.addHeaderMenuEntries.description] = this.addHeaderMenuEntries;\n\t\t\t}\n\t\t\treturn hm;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsideMenuEntries() {\n\t\t\t//\n\t\t\tlet sm = this.sideMenu ? {...this.sideMenu} : {};\n\t\t\tif (this.sideMenu != null && this.addSideMenuEntries != null && Object.keys(this.addSideMenuEntries).length > 0)\n\t\t\t{\n\t\t\t\tsm[this.addSideMenuEntries.description] = this.addSideMenuEntries;\n\t\t\t}\n\t\t\treturn sm;\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetNavigationPage() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionHeader() {\n\t\t\treturn this.$api.call(ApiNavigation.getHeader(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptApiFunctionSideMenu() {\n\t\t\treturn this.$api.call(ApiNavigation.getMenu(this.getNavigationPage()))\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedHeader(data) {\n\t\t\tthis.headerMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchCmptDataFetchedMenu(data) {\n\t\t\tthis.sideMenu = data || {};\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tgetDataBsToggle(header) {\n\t\t\treturn !header.children ? null : 'dropdown';\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\t\t\n\n\t\t\n\t\t\n\n\t\t\n\t\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreRESTClient} from '../../RESTClient.js';\n\n//\nconst CORE_BISMELDESTICHTAG_CMPT_TIMEOUT = 2000;\n\n/**\n *\n */\nexport const BismeldestichtagAPIs = {\n\t/**\n\t *\n\t */\n\tgetStudiensemester: function() {\n\t\treturn CoreRESTClient.get(\n\t\t\t'codex/Bismeldestichtag/getStudiensemester',\n\t\t\tnull,\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t},\n\tgetBismeldestichtage: function() {\n\t\treturn CoreRESTClient.get(\n\t\t\t'codex/Bismeldestichtag/getBismeldestichtage',\n\t\t\tnull,\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t},\n\taddBismeldestichtag: function(wsParams) {\n\t\treturn CoreRESTClient.post(\n\t\t\t'codex/Bismeldestichtag/addBismeldestichtag',\n\t\t\t{\n\t\t\t\tmeldestichtag: wsParams.meldestichtag,\n\t\t\t\tstudiensemester_kurzbz: wsParams.studiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t},\n\tdeleteBismeldestichtag: function(wsParams) {\n\t\treturn CoreRESTClient.post(\n\t\t\t'codex/Bismeldestichtag/deleteBismeldestichtag',\n\t\t\t{\n\t\t\t\tmeldestichtag_id: wsParams.meldestichtag_id\n\t\t\t},\n\t\t\t{\n\t\t\t\ttimeout: CORE_BISMELDESTICHTAG_CMPT_TIMEOUT\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {BismeldestichtagHelper} from './BismeldestichtagHelper.js';\n\nimport {CoreFilterCmpt} from '../../components/filter/Filter.js';\nimport {CoreNavigationCmpt} from '../../components/navigation/Navigation.js';\nimport {CoreRESTClient} from '../../RESTClient.js';\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport {BismeldestichtagAPIs} from './API.js';\n\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\n\nconst bismeldestichtagApp = Vue.createApp({\n\tdata: function() {\n\t\treturn {\n\t\t\tbismeldestichtagTabulatorOptions: {\n\t\t\t\tmaxHeight: \"100%\",\n\t\t\t\tminHeight: 50,\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tindex: 'meldestichtag_id',\n\t\t\t\tinitialSort:[\n\t\t\t\t\t{column:\"meldestichtag\", dir:\"desc\"}\n\t\t\t\t],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: 'Meldestichtag', field: 'meldestichtag', headerFilter: true, formatter: function(cell){\n\t\t\t\t\t\t\treturn BismeldestichtagHelper.formatDate(cell.getValue());\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{title: 'Studiensemester', field: 'studiensemester_kurzbz', headerFilter: true, sorter:function(a, b, aRow, bRow, column, dir, sorterParams) {\n\n\t\t\t\t\t\t\t//aRow, bRow - the row components for the values being compared\n\t\t\t\t\t\t\tlet semesterStartA = new Date(aRow.getData().semester_start);\n\t\t\t\t\t\t\tlet semesterStartB = new Date(bRow.getData().semester_start);\n\n\t\t\t\t\t\t\treturn semesterStartA - semesterStartB; // difference between studiensemester start dates\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{title: 'Semesterstart',field: 'semester_start', headerFilter: true, visible: false, formatter: function(cell){\n\t\t\t\t\t\t\treturn BismeldestichtagHelper.formatDate(cell.getValue());\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t{title: 'ID', field: 'meldestichtag_id', headerFilter: true, visible: false},\n\t\t\t\t\t{title: 'Insertamum', field: 'insertamum', headerFilter: true, visible: false},\n\t\t\t\t\t{title: 'Insertvon', field: 'insertvon', headerFilter: true, visible: false},\n\t\t\t\t\t{title: 'Löschen', field: 'loeschen', headerFilter: false, formatter:function(cell){\n\t\t\t\t\t\t\treturn\t'';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tbismeldestichtagTabulatorEventHandlers: [\n\t\t\t\t{\n\t\t\t\t\tevent: \"rowClick\",\n\t\t\t\t\thandler: function(e, row) {\n\t\t\t\t\t\tif (e.target.nodeName == 'DIV') {\n\t\t\t\t\t\t\tlet data = row.getData();\n\t\t\t\t\t\t\talert(data.studiensemester_kurzbz + ': ' + BismeldestichtagHelper.formatDate(data.meldestichtag));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\t\thandler: () => {\n\t\t\t\t\t\tthis.handlerStudiensemester();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tmeldestichtag: null, // date of Meldestichtag\n\t\t\tsemList: null, // all Studiensemester for dropdown\n\t\t\tcurrSem: null, // selected Studiensemester\n\t\t\tfetchCmptApiFunction: {}, // api function call\n\t\t\tfetchCmptApiFunctionParams: null, // parameters for api function call\n\t\t\tfetchCmptDataFetched: null, // function to execute after call\n\t\t\tfetchCmptRefresh: true // for refreshing\n\t\t};\n\t},\n\tcomponents: {\n\t\tCoreNavigationCmpt,\n\t\tCoreFilterCmpt,\n\t\tBismeldestichtagAPIs,\n\t\tCoreFetchCmpt,\n\t\t\"datepicker\": VueDatePicker\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Define Studiensemester call and method to be executed after the call\n\t\t */\n\t\thandlerStudiensemester: function() {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.getStudiensemester,\n\t\t\t\tnull,\n\t\t\t\tthis.fetchCmptDataFetchedStudiensemester\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Define Studiensemester call and method to be executed after the call\n\t\t */\n\t\thandlerBismeldestichtage: function() {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.getBismeldestichtage,\n\t\t\t\tnull,\n\t\t\t\tthis.fetchCmptDataFetchedBismeldestichtage\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Define add Bismeldestichtag call and method to be executed after the call\n\t\t */\n\t\thandlerAddBismeldestichtag: function(event) {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.addBismeldestichtag,\n\t\t\t\t{\n\t\t\t\t\tmeldestichtag: this.meldestichtag,\n\t\t\t\t\tstudiensemester_kurzbz: this.currSem\n\t\t\t\t},\n\t\t\t\tthis.fetchCmptDataFetchedAddBismeldestichtag\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Define delete Bismeldestichtag call and method to be executed after the call\n\t\t */\n\t\thandlerDeleteBismeldestichtag: function(meldestichtag_id) {\n\t\t\tthis.startFetchCmpt(\n\t\t\t\tBismeldestichtagAPIs.deleteBismeldestichtag,\n\t\t\t\t{\n\t\t\t\t\tmeldestichtag_id: meldestichtag_id\n\t\t\t\t},\n\t\t\t\tthis.fetchCmptDataFetchedDeleteBismeldestichtag\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Called after Studiensemester response is received\n\t\t */\n\t\tfetchCmptDataFetchedStudiensemester: function(data) {\n\t\t\tif (CoreRESTClient.isError(data)) alert(CoreRESTClient.getError(data));\n\t\t\tif (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\tlet semRes = CoreRESTClient.getData(data);\n\t\t\t\tthis.semList = semRes.semList;\n\t\t\t\tthis.currSem = semRes.currSem;\n\t\t\t\tthis.handlerBismeldestichtage();\n\t\t\t}\n\t\t\telse\n\t\t\t\talert(\"No Studiensemester data\");\n\t\t},\n\t\t/**\n\t\t * Called after Bismeldestichtage response is received\n\t\t */\n\t\tfetchCmptDataFetchedBismeldestichtage: function(data) {\n\t\t\tif (CoreRESTClient.isError(data)) alert(CoreRESTClient.getError(data));\n\t\t\tif (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\t// set the Meldestichtagedata\n\t\t\t\tthis.$refs.bismeldestichtageTable.tabulator.setData(CoreRESTClient.getData(data));\n\n\t\t\t\t// save delete Bismeldestichtag function\n\t\t\t\tlet funcDeleteBismeldestichtag = this.handlerDeleteBismeldestichtag;\n\n\t\t\t\tlet btns = document.getElementsByClassName('delete-btn');\n\n\t\t\t\t// add click events for deletion\n\t\t\t\tfor (let btn in btns)\n\t\t\t\t{\n\t\t\t\t\tif (btns[btn].addEventListener)\n\t\t\t\t\t{\n\t\t\t\t\t\tbtns[btn].addEventListener('click',\n\t\t\t\t\t\t\tfunction(){\n\t\t\t\t\t\t\t\tfuncDeleteBismeldestichtag(btns[btn].getAttribute('data-meldestichtag-id'));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.$refs.bismeldestichtageTable.tabulator.setData([]);\n\t\t},\n\t\t/**\n\t\t * Called after Add Bismeldestichtag response is received\n\t\t */\n\t\tfetchCmptDataFetchedAddBismeldestichtag: function(data) {\n\t\t\tif (CoreRESTClient.isError(data))\n\t\t\t\talert(CoreRESTClient.getError(data));\n\t\t\telse if (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\tthis.handlerBismeldestichtage();\n\t\t\t}\n\t\t\telse\n\t\t\t\talert(\"No response data\");\n\t\t},\n\t\t/**\n\t\t * Called after Add Bismeldestichtag response is received\n\t\t */\n\t\tfetchCmptDataFetchedDeleteBismeldestichtag: function(data) {\n\t\t\tif (CoreRESTClient.isError(data))\n\t\t\t\talert(CoreRESTClient.getError(data));\n\t\t\telse if (CoreRESTClient.hasData(data))\n\t\t\t{\n\t\t\t\tthis.handlerBismeldestichtage();\n\t\t\t}\n\t\t\telse\n\t\t\t\talert(\"No response data\");\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt: function(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t}\n\t}\n});\n\nFhcApps.makeExtendable(bismeldestichtagApp);\n\nbismeldestichtagApp.use(PluginsPhrasen).mount('#main');\n"],"names":["BismeldestichtagHelper","date","replace","CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","Array","default","columns","fields","switchFilter","applyFilterConfig","saveCustomFilter","currentFields","computed","types","reduce","a","c","toLowerCase","indexOf","name","n","evt","currentTarget","value","filteredFields","filter","el","condition","length","alert","addField","push","removeField","index","splice","FilterColumns","selected","names","Object","hide","show","selectedFields","toggle","field","DEFAULT_ICONS","jsonLines","xlsx","pdf","html","json","csv","DEFAULT_LABELS","TableDownload","tabulator","config","String","iconClass","currentConfig","prototype","toString","call","split","isArray","newConfig","k","v","stringToFileFormatter","icon","label","formatter","map","validateFileFormatter","input","lcInput","includes","window","XLSX","jspdf","jsPDF","autoTable","download","file","options","elementDataMap","WeakMap","collapseAutoClose","mounted","binding","open","set","contains","target","collapse","bootstrap","Collapse","getInstance","addEventListener","document","get","beforeUnmount","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","forEach","column","i","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","update","ApiFilter","wsParams","method","url","params","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","_uuid","CoreFilterCmpt","components","directives","onNwNewEntry","title","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","sort","headerFilter","group","page","notSelectedFields","x","filteredData","JSON","parse","stringify","filteredColumns","hasOwnProperty","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","res","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","$p","loadCategory","t","resolve","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","$api","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","selectableRows","dataTree","$refs","on","event","handler","toDelete","childIdx","child","appendChild","counter","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","id","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","handlerSaveCustomFilter","getAttribute","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","ApiNavigation","getHeader","navigation_page","getMenu","CoreNavigationCmpt","addHeaderMenuEntries","addSideMenuEntries","hideTopMenu","leftNavCssClasses","headerMenu","headerMenuEntries","hm","keys","sideMenuEntries","sm","getNavigationPage","fetchCmptApiFunctionHeader","fetchCmptApiFunctionSideMenu","fetchCmptDataFetchedHeader","fetchCmptDataFetchedMenu","getDataBsToggle","header","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","post","isSuccess","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","uri","app_root","ci_router","_printDebug","parameters","errorThrown","axiosCallObj","timeout","prop","axios","CORE_BISMELDESTICHTAG_CMPT_TIMEOUT","BismeldestichtagAPIs","getStudiensemester","getBismeldestichtage","addBismeldestichtag","meldestichtag","studiensemester_kurzbz","deleteBismeldestichtag","meldestichtag_id","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$1","category","setLanguage","categories","language","payload","getLanguage","getActiveDbLanguages","navigation","filter$1","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","approve","reject","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","uid","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","LvPlanEvents","lv_id","stv","verband","favorites","students","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","ajaxURL","ajaxParams","modelValue","e","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","globalProperties","factory","console","warn","addEndpoints","_get_config","TypeError","clearValidation","setFeedback","_clean_return_value","result","meta","fhcApiAxios","baseURL","interceptors","request","use","FormData","values","every","item","FileList","File","newData","entries","nd","key","append","jsondata","errors","err","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","class","db","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","bind","provide","helperAppContainer","createElement","helperApp","Vue","createApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","detail","openMessagecard","getOrCreateInstance","unmounted","parentElement","removeChild","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","mount","body","FhcAlert","FhcPhrasen","alertSuccess","toast","add","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","alertMultiple","messageArray","handleSystemError","errMsg","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","querySelector","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","msgs","b","n_errors","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","ref","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","obj","elem","extractCategory","t_ref","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","bismeldestichtagApp","bismeldestichtagTabulatorOptions","initialSort","dir","cell","getValue","sorter","aRow","bRow","sorterParams","Date","semester_start","getRow","getIndex","bismeldestichtagTabulatorEventHandlers","nodeName","handlerStudiensemester","semList","currSem","datepicker","VueDatePicker","fetchCmptDataFetchedStudiensemester","handlerBismeldestichtage","fetchCmptDataFetchedBismeldestichtage","handlerAddBismeldestichtag","fetchCmptDataFetchedAddBismeldestichtag","handlerDeleteBismeldestichtag","fetchCmptDataFetchedDeleteBismeldestichtag","semRes","bismeldestichtageTable","funcDeleteBismeldestichtag","btns","getElementsByClassName","btn","FhcApps","makeExtendable"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/Cis/ProfilUpdateRequests.js b/public/dist/js/apps/Cis/ProfilUpdateRequests.js index d6edff39b..8813a816d 100644 --- a/public/dist/js/apps/Cis/ProfilUpdateRequests.js +++ b/public/dist/js/apps/Cis/ProfilUpdateRequests.js @@ -1,6 +1,6 @@ -import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";const r={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},s="Filter Component New Filter";var a={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=s);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:s})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},o={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const l={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},d={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var p={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let r=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?r.push({icon:"fa-solid "+l[n],label:i===e?d[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+l[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+l[n],label:d[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=d[n]),void 0===i.icon&&(i.icon=l[n]),r.push(i)):(void 0===i.label&&(i.label=e),r.push(i)))}t=r}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+l[e],label:d[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const u=new WeakMap;var c={mounted(t,e){let n=!1;u.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",u.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",u.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,r=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(r=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),r>0?s.setWidth(r):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var f={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},h=0;const g={components:{CoreFetchCmpt:r,FilterConfig:a,FilterColumns:o,TableDownload:p},directives:{collapseAutoClose:c},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(f.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(f.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(f.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var v={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal","toggleFullscreen"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen,this.$emit("toggleFullscreen")}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,i){const r=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==i&&(s.footer=()=>i);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,n)=>{const i=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(r,{class:"fade",...e,ref:"modal","onHidden.bs.modal":i.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return pt}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})},template:''},m={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},A={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
    \n \n \x3c!-- column 1 in the address row --\x3e\n
    \n \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}
    \n {{data.strasse}} \n
    \n
    \n \n \x3c!-- column 2 in the address row --\x3e\n
    \n
    \n
    {{$p.t(\'global\',\'typ\')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'person\',\'zustelladresse\')}}
    \n
    \n \n
    \n
    \n
    \n
    \n'},b={ +import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";const r={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},s="Filter Component New Filter";var a={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=s);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:s})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},o={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const l={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},d={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var p={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let r=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?r.push({icon:"fa-solid "+l[n],label:i===e?d[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+l[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?r.push({icon:"fa-solid "+l[n],label:d[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=d[n]),void 0===i.icon&&(i.icon=l[n]),r.push(i)):(void 0===i.label&&(i.label=e),r.push(i)))}t=r}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+l[e],label:d[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const u=new WeakMap;var c={mounted(t,e){let n=!1;u.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",u.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",u.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,r=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(r=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),r>0?s.setWidth(r):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var f={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},h=0;const g={components:{CoreFetchCmpt:r,FilterConfig:a,FilterColumns:o,TableDownload:p},directives:{collapseAutoClose:c},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.selectableRows||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.tabulatorOptions.selectableRows||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(f.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(f.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(f.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(f.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(f.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var v={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal","toggleFullscreen"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen,this.$emit("toggleFullscreen")}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,i){const r=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==i&&(s.footer=()=>i);let a=!1;return"undefined"!=typeof primevue&&(a=!0),new Promise((t,n)=>{const i=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(r,{class:"fade",...e,ref:"modal","onHidden.bs.modal":i.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");a&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return pt}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})},template:''},m={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},A={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
    \n \n \x3c!-- column 1 in the address row --\x3e\n
    \n \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}
    \n {{data.strasse}} \n
    \n
    \n \n \x3c!-- column 2 in the address row --\x3e\n
    \n
    \n
    {{$p.t(\'global\',\'typ\')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'person\',\'zustelladresse\')}}
    \n
    \n \n
    \n
    \n
    \n
    \n'},b={ //! API calls for profil update requests getStatus:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getStatus"}),getTopic:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getTopic"}),acceptProfilRequest:({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",params:{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r}}),denyProfilRequest:({profil_update_id:t,uid:e,topic:n,status_message:i})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/denyProfilRequest",params:{profil_update_id:t,uid:e,topic:n,status_message:i}}),insertFile:(t,e=null)=>({method:"post",url:`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,params:t}),updateProfilbild:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilbild",params:t}),getProfilUpdateWithPermission:t=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission"+(""!==t?"/"+encodeURIComponent(t):"")}),getProfilRequestFiles:t=>({method:"get",url:`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`}),selectProfilRequest:(t=null,e=null)=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/selectProfilRequest",params:{...t?{uid:t}:{},...e?{id:e}:{}}}),insertProfilRequest:(t,e,n=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/insertProfilRequest",params:{topic:t,payload:e,...n?{fileID:n}:{}}}),updateProfilRequest:(t,e,n,i=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilRequest",params:{topic:t,payload:e,ID:n,...i?{fileID:i}:{}}}),deleteProfilRequest:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",params:{requestID:t}})},y={components:{BsModal:v,Kontakt:m,Adresse:A},inject:["profilUpdateStates"],mixins:[v],props:{title:{type:String},value:{type:Object},setLoading:{type:Function},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data(){return{data:this.value,loading:!1,result:!1,info:null,files:null}},methods:{getProfilStatus:async function(){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${dms_id}`},getDocumentLink:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${t}`},handleRequest:function(t){this.loading=!0,this.setLoading(!0),this.$api.call(b["accept"==t.toLowerCase()?"acceptProfilRequest":"denyProfilRequest"](this.data)).then(t=>{this.result=!0}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.setLoading(!1),this.loading=!1,this.hide()})}},computed:{getComponentView:function(){return this.data.topic.toLowerCase().includes("kontakt")?"kontakt":this.data.topic.toLowerCase().includes("adresse")?"adresse":"text_input"}},created(){this.value.attachment_id&&this.$api.call(b.getProfilRequestFiles(this.data.profil_update_id)).then(t=>{this.files=t.data})},mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return v.popup.bind(this)(null,t)},template:'\n\n \n \n \n\n\n \n \n\n \n \n '},_={components:{BsModal:v},props:{timeout:{type:Number,default:300}},data:()=>({t:null,state:0}),methods:{show(){switch(this.state){case 0:return this.timeout?(this.state=1,void(this.t=window.setTimeout(()=>this.$refs.modal.show(),this.timeout))):this.$refs.modal.show();case 4:return window.setTimeout(()=>this.show(),1)}},hide(){switch(this.state){case 1:return window.clearTimeout(this.t);case 2:return window.setTimeout(()=>this.hide(),1);case 3:this.$refs.modal.hide()}}},mounted(){this.$refs.modal.$refs.modal.addEventListener("show.bs.modal",()=>{this.state=2}),this.$refs.modal.$refs.modal.addEventListener("shown.bs.modal",()=>{this.state=3}),this.$refs.modal.$refs.modal.addEventListener("hide.bs.modal",()=>{this.state=4}),this.$refs.modal.$refs.modal.addEventListener("hidden.bs.modal",()=>{this.state=0})},template:'\n\t\n\t\tLoading...\n\t'};function $(t,e,n){let i=document.createElement("div"),r=null,s=t.getValue();if(Array.isArray(s)){const t=s[0]?new Date(s[0]):null,e=s[1]?new Date(s[1]):null;r=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:r}),watch:{val(t){n(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(i),i}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let n=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let i=new Date(t[1]);return i.setHours(23,59,59,999),n>=e&&n<=i}return n.toDateString()===e.toDateString()}let i=new Date(t);return n.toDateString()===i.toDateString()}});var F={components:{CoreFilterCmpt:g,Loading:_,AcceptDenyUpdate:y},inject:["profilUpdateStates"],props:{id:{type:String}},data(){return{categoryLoaded:!1,showModal:!1,modalData:null,loading:!1,filter:"Pending",profil_update_id:Number(this.id)}},computed:{profilUpdateEvents:function(){return[{event:"dataProcessed",handler:this.handleDataProcessed}]},profilUpdateOptions:function(){return{persistence:{columns:["width","visible","frozen"]},persistenceID:"cis-profilupdate-2025121702",ajaxURL:"dummy",ajaxRequestFunc:(t,e,n)=>this.$api.call(b.getProfilUpdateWithPermission(n.filter)),ajaxParams:()=>{let t="";switch(this.filter){case this.profilUpdateStates.Pending:t=this.profilUpdateStates.Pending;break;case this.profilUpdateStates.Accepted:t=this.profilUpdateStates.Accepted;break;case this.profilUpdateStates.Rejected:t=this.profilUpdateStates.Rejected;break;default:t=""}return{filter:t}},ajaxResponse:(t,e,n)=>(n?.data&&n.data.sort((t,e)=>((t,e,n)=>{let i=0;return i=t.status===n.profilUpdateStates.Pending||t.status===n.profilUpdateStates.Accepted&&e.status===n.profilUpdateStates.Rejected?-1:1,t.status===e.status&&(i=new Date(e.insertamum.split(".").reverse().join("-"))-new Date(t.insertamum.split(".").reverse().join("-"))),i})(t,e,this)),n.data),columnDefaults:{tooltip:(t,e,n)=>{let i=e.getData().status_message,r=e.getData().status_timestamp,s=e.getData().status;if(!i)return null;let a=document.createElement("div");a.classList.add("border","border-dark");let o=document.createElement("span");o.classList.add("d-block","mb-1"),o.innerHTML="Request was "+s+" on "+r;let l=document.createElement("span");return l.innerHTML="Status message: "+i,a.appendChild(o),a.appendChild(l),a}},rowContextMenu:(t,e)=>{let n=[];return e.getData().status===this.profilUpdateStates.Pending?n.push({label:` ${this.$p.t("profilUpdate","acceptUpdate")}`,action:(t,e)=>{this.$api.call(b.acceptProfilRequest(e.getData())).then(t=>{this.$refs.UpdatesTable.tabulator.setData()}).catch(t=>this.$fhcAlert.handleSystemError)}},{separator:!0},{label:` ${this.$p.t("profilUpdate","denyUpdate")}`,action:(t,e)=>{this.$api.call(b.denyProfilRequest(e.getData())).then(t=>{this.$refs.UpdatesTable.tabulator.setData()}).catch(t=>this.$fhcAlert.handleSystemError)}},{separator:!0},{label:` ${this.$p.t("profilUpdate","showRequest")}`,action:(t,e)=>{this.showAcceptDenyModal(e.getData())}}):n.push({label:` ${this.$p.t("profilUpdate","showRequest")}`,action:(t,e)=>{this.showAcceptDenyModal(e.getData())}}),n},height:600,layout:"fitDataStretchFrozen",columns:[{title:this.$p.t("profilUpdate","UID"),field:"uid",minWidth:100,resizable:!0,headerFilter:!0},{title:this.$p.t("profilUpdate","Name"),field:"name",minWidth:200,resizable:!0,headerFilter:!0},{title:this.$p.t("profil","stg_short")+" ("+this.$p.t("profil","studentIn")+")",field:"studiengang",minWidth:50,resizable:!0,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profil","sem_short")+" ("+this.$p.t("profil","studentIn")+")",field:"semester",headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profil","orgform_short")+" ("+this.$p.t("profil","studentIn")+")",field:"orgform",minWidth:50,resizable:!0,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profil","orgeinheit_short")+" ("+this.$p.t("profil","mitarbeiterIn")+")",field:"oezuordnung",minWidth:200,resizable:!0,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profilUpdate","Topic"),field:"topic",resizable:!0,minWidth:200,headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"}},{title:this.$p.t("profilUpdate","insertamum"),field:"insertamum_iso",resizable:!0,headerFilterFunc:"dates",headerFilter:$,minWidth:200,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:this.$p.t("profilUpdate","Status"),field:"status_translated",hozAlign:"center",headerFilter:"list",headerFilterParams:{valuesLookup:!0,listOnEmpty:!0,autocomplete:!0,sort:"asc"},formatter:(t,e)=>{let n="";switch(t.getRow().getData().status){case this.profilUpdateStates.Pending:n+="fa fa-lg fa-circle-info text-info ";break;case this.profilUpdateStates.Accepted:n+="fa fa-lg fa-circle-check text-success ";break;case this.profilUpdateStates.Rejected:n+="fa fa-lg fa-circle-xmark text-danger "}return`
    ${t.getValue()}
    `},resizable:!0,minWidth:200},{title:this.$p.t("profilUpdate","actions"),headerSort:!1,frozen:!0,formatter:(t,e)=>{let n=`
    \n \n
    `;const i=(new DOMParser).parseFromString(n,"text/html").body.firstChild;return i.querySelector("#showButton").addEventListener("click",()=>{this.showAcceptDenyModal(t.getRow().getData())}),i},minWidth:200,resizable:!0,hozAlign:"center"}]}}},methods:{denyProfilUpdate:function(t){this.$api.call(b.denyProfilRequest(t)).then(t=>{}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.$refs.UpdatesTable.tabulator.setData()})},acceptProfilUpdate:function(t){this.$api.call(b.acceptProfilRequest(t)).then(t=>{}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.$refs.UpdatesTable.tabulator.setData()})},setLoading:function(t){this.loading=t},hideAcceptDenyModal:function(){this.$refs.AcceptDenyModal.result&&this.$refs.UpdatesTable.tabulator.setData(),this.showModal=!1,this.modalData=null},showAcceptDenyModal(t){this.modalData=t,this.modalData&&(this.showModal=!0,Vue.nextTick(()=>{this.$refs.AcceptDenyModal.show()}))},updateData:function(t){this.$refs.UpdatesTable.tabulator.setData(),sessionStorage.setItem("filter",t.target.value)},handleDataProcessed:function(){if(this.profil_update_id){const t=this.$refs.UpdatesTable.tabulator.getData().filter(t=>t.profil_update_id===this.profil_update_id);t.length&&this.showAcceptDenyModal(t[0])}},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},watch:{loading:function(t,e){t?this.$refs.loadingModalRef.show():this.$refs.loadingModalRef.hide()}},created(){this.$p.loadCategory(["profilUpdate","lehre","profil","global"]).then(()=>{this.categoryLoaded=!0})},mounted(){sessionStorage.getItem("filter")&&(this.filter=sessionStorage.getItem("filter"))},template:'\n
    \n\t\t\n\t\t

    {{$p.t(\'profilUpdate\', \'profilUpdateRequests\')}}

    \n\t\t\n\n\t\t\n\t\t\t\t \n\t\t\n\n\t
    '},S={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},C={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},P={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},T={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},k={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,i,r){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:i,attachment:r},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},z={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},E={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},w={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},D={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:r},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+r,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let r="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,r,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:r})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const r=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},r)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},O={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},x={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},B={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},R={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},N={person:O,prestudent:x,mitarbeiter:B,anrechnung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:R,projektphase:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},U={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},L={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},M={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,r=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:r})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},j={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},H={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},J={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},I={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},q={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},G={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},V={search:S,phrasen:C,navigation:P,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:k,profil:z,profilUpdate:E,lvPlan:w,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:D,notiz:N,betriebsmittel:U,checkperson:L,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:M,cms:j,lehre:H,addons:J,messages:I,vorlagen:q,addons:J,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+n.person_id)},getAllContractsNotAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+n.person_id)},getAllContractsAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+n.person_id+"/"+n.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+n.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:G,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const r=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});r.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),r.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),r.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),r.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),r.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,r)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,r)),post:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,r))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(V);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const Z="error",K="retval",X={get:function(t,e,n=null){return X._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return X._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(Z)||!t.hasOwnProperty(K)||0!=t.error)},isError:function(t){return!X.isSuccess(t)},hasData:function(t){return!(!X.isSuccess(t)||!("object"==typeof t[K]&&Object.keys(t[K]).length>0||"array"==typeof t[K]&&t[K].length>0||"string"==typeof t[K]&&""!=t[K].trim()||"number"==typeof t[K]))},getData:function(t){return X.hasData(t)?t[K]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(K)?t[K]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(Z)?t[Z]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let r={method:n,url:X._generateRouterURI(t),timeout:5e3};if("get"==n?r.params=e:r.data=e,"object"==typeof i)for(var s in i)r[s]=i[s];return axios(r)}},Q=document.createElement("div"),Y=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){Q.parentElement.removeChild(Q)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Y.use(t),Y.use(i);const tt=Y.mount(Q);document.body.appendChild(Q);var et={install:(t,e)=>{t.config.globalProperties.$p||t.use(dt);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);tt.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);tt.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);tt.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);tt.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);tt.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{tt.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{tt.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,r=!1){let s={severity:t,summary:e,detail:n,html:r};i||(s.life=3e3),tt.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,r=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,r)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=X.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const r=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&r.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:r})):r.forEach(n.alertError))}if(400==t?.response?.status){let e=X.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},nt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(et);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let r,s;Array.isArray(e)?({counter:r,msgs:s}=await i(e)):({counter:r,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const r=await t,{counter:s,msgs:a}=await i(n);return r.counter+=s,r.msgs.push("
    "+e+"
    "+a.join("")+"
    "),r},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:r});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function r(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:r,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:r,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var r of i){let i=r.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(i=a);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(r)?n[i].push(...r):n[i].push(r)):e.push(r)}return n}void 0!==e?.errorHandling&&(i=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var r in i)e.handler[r](i[r]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),n&&(i?i.params=n:i={params:n}),p.get(e,i)),post:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),p.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=r(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const n=d(s,l(e));for(var u in n)a[u]?a[u][e.config.errorHeader]=n[u]:a[u]={[e.config.errorHeader]:n[u]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,a,p,u):"post"==s?this.post(i,a,p,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},it={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const rt=Vue.reactive({}),st={};let at=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),ot=Vue.computed(()=>at.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==at.value).LC_Time:null);const lt={user_language:at,user_locale:ot,setLanguage(t){const e=Object.keys(rt);return this.config.globalProperties.$api.call(it.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{rt[t.category][t.phrase]=t.text}),at.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(st[t]||(st[t]=this.config.globalProperties.$api.call(it.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{rt[t]=e})),st[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>rt[t]?function(t,e,n){let i=rt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return rt[t]||this.loadCategory(t),i.value}};var dt={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(nt),t.config.globalProperties.$p={t:lt.t,loadCategory:e=>lt.loadCategory.call(t,e),setLanguage:e=>lt.setLanguage.call(t,e),user_language:at,user_locale:ot,t_ref:lt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},pt=Object.freeze({__proto__:null,default:dt,user_locale:ot});const ut=Vue.createApp({name:"ProfilUpdateRequestsApp",components:{"profil-update-view":F},data:()=>({profilUpdateStates:null}),provide(){return{profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates)}},methods:{},created(){this.$api.call(b.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)})}});FhcApps.makeExtendable(ut),ut.use(dt).mount("#content"); +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:r})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},w={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},D={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:r},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+r,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let r="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,r,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:r})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const r=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},r)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},O={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},x={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},R={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},B={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},N={person:O,prestudent:x,mitarbeiter:R,anrechnung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:B,projektphase:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},U={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},L={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},M={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,r=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:r})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},j={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},H={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},J={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},I={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},q={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},G={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},V={search:S,phrasen:C,navigation:P,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:k,profil:z,profilUpdate:E,lvPlan:w,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:D,notiz:N,betriebsmittel:U,checkperson:L,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:M,cms:j,lehre:H,addons:J,messages:I,vorlagen:q,addons:J,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+n.person_id)},getAllContractsNotAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+n.person_id)},getAllContractsAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+n.person_id+"/"+n.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+n.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:G,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},W={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const r=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});r.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),r.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),r.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),r.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),r.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,r)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,r)),post:(e,n,i,r)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,r))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const a=new s(V);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),a.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=a,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const Z="error",K="retval",X={get:function(t,e,n=null){return X._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return X._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(Z)||!t.hasOwnProperty(K)||0!=t.error)},isError:function(t){return!X.isSuccess(t)},hasData:function(t){return!(!X.isSuccess(t)||!("object"==typeof t[K]&&Object.keys(t[K]).length>0||"array"==typeof t[K]&&t[K].length>0||"string"==typeof t[K]&&""!=t[K].trim()||"number"==typeof t[K]))},getData:function(t){return X.hasData(t)?t[K]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(K)?t[K]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(Z)?t[Z]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let r={method:n,url:X._generateRouterURI(t),timeout:5e3};if("get"==n?r.params=e:r.data=e,"object"==typeof i)for(var s in i)r[s]=i[s];return axios(r)}},Q=document.createElement("div"),Y=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){Q.parentElement.removeChild(Q)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Y.use(t),Y.use(i);const tt=Y.mount(Q);document.body.appendChild(Q);var et={install:(t,e)=>{t.config.globalProperties.$p||t.use(dt);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);tt.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);tt.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);tt.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);tt.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);tt.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{tt.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{tt.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,r=!1){let s={severity:t,summary:e,detail:n,html:r};i||(s.life=3e3),tt.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,r=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,r)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=X.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const r=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&r.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:r})):r.forEach(n.alertError))}if(400==t?.response?.status){let e=X.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},nt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(et);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let r,s;Array.isArray(e)?({counter:r,msgs:s}=await i(e)):({counter:r,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const r=await t,{counter:s,msgs:a}=await i(n);return r.counter+=s,r.msgs.push("
    "+e+"
    "+a.join("")+"
    "),r},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:r});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function r(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function a(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:r,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:r,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=a(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var r of i){let i=r.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(i=a);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(r)?n[i].push(...r):n[i].push(r)):e.push(r)}return n}void 0!==e?.errorHandling&&(i=a(e.errorHandling));const p=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});p.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),p.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var r in i)e.handler[r](i[r]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>p.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),n&&(i?i.params=n:i={params:n}),p.get(e,i)),post:(t,e,n,i)=>([e,n,i]=r(t,e,n,i),p.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=r(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var p of t){const[t,e]="fulfilled"===p.status?[s.success,p.value]:[s.fail,p.reason];if(!t)return;const n=d(s,l(e));for(var u in n)a[u]?a[u][e.config.errorHeader]=n[u]:a[u]={[e.config.errorHeader]:n[u]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:p,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,a,p,u):"post"==s?this.post(i,a,p,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},it={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const rt=Vue.reactive({}),st={};let at=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),ot=Vue.computed(()=>at.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==at.value).LC_Time:null);const lt={user_language:at,user_locale:ot,setLanguage(t){const e=Object.keys(rt);return this.config.globalProperties.$api.call(it.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{rt[t.category][t.phrase]=t.text}),at.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(st[t]||(st[t]=this.config.globalProperties.$api.call(it.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{rt[t]=e})),st[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>rt[t]?function(t,e,n){let i=rt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return rt[t]||this.loadCategory(t),i.value}};var dt={install(t,e){t.config.globalProperties.$fhcApi||t.use(W),t.config.globalProperties.$api||t.use(nt),t.config.globalProperties.$p={t:lt.t,loadCategory:e=>lt.loadCategory.call(t,e),setLanguage:e=>lt.setLanguage.call(t,e),user_language:at,user_locale:ot,t_ref:lt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},pt=Object.freeze({__proto__:null,default:dt,user_locale:ot});const ut=Vue.createApp({name:"ProfilUpdateRequestsApp",components:{"profil-update-view":F},data:()=>({profilUpdateStates:null}),provide(){return{profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates)}},methods:{},created(){this.$api.call(b.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)})}});FhcApps.makeExtendable(ut),ut.use(dt).mount("#content"); //# sourceMappingURL=ProfilUpdateRequests.js.map diff --git a/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map b/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map index 43a0f4fc0..06a67b4c7 100644 --- a/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map +++ b/public/dist/js/apps/Cis/ProfilUpdateRequests.js.map @@ -1 +1 @@ -{"version":3,"file":"ProfilUpdateRequests.js","sources":["../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/ProfilUpdate/AcceptDenyUpdate.js","../../../../js/components/Loader.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/ProfilUpdate/ProfilUpdateView.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Cis/ProfilUpdateRequests.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\",\n\t\t\"toggleFullscreen\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t\tthis.$emit('toggleFullscreen')\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    {{$p.t('person','strasse')}}
    \n {{data.strasse}} \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('global','typ')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t('person','ort')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t('person','plz')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('person','zustelladresse')}}
    \n
    \n \n
    \n
    \n
    \n
    \n`\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport Alert from \"../../Bootstrap/Alert.js\";\nimport Kontakt from \"../Profil/ProfilComponents/Kontakt.js\";\nimport Adresse from \"../Profil/ProfilComponents/Adresse.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n BsModal,\n Kontakt,\n Adresse,\n },\n inject: [\"profilUpdateStates\"],\n mixins: [BsModal],\n props: {\n title: {\n type: String,\n },\n value: {\n type: Object,\n },\n setLoading: {\n type: Function,\n },\n\n /*\n * NOTE(chris):\n * Hack to expose in \"emits\" declared events to $props which we use\n * in the v-bind directive to forward all events.\n * @see: https://github.com/vuejs/core/issues/3432\n */\n onHideBsModal: Function,\n onHiddenBsModal: Function,\n onHidePreventedBsModal: Function,\n onShowBsModal: Function,\n onShownBsModal: Function,\n },\n data() {\n return {\n data: this.value,\n loading: false,\n result: false,\n info: null,\n files: null,\n };\n },\n\n methods: {\n getProfilStatus: async function () {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n handleRequest: function (type) {\n this.loading = true;\n this.setLoading(true);\n this.$api\n .call(ApiProfilUpdate[\n type.toLowerCase() == \"accept\"\n ? \"acceptProfilRequest\"\n : \"denyProfilRequest\"\n ](this.data))\n .then((res) => {\n this.result = true;\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n\t\t this.setLoading(false);\n\t\t this.loading = false;\n this.hide();\n });\n },\n },\n\n computed: {\n getComponentView: function () {\n if (this.data.topic.toLowerCase().includes(\"kontakt\")) {\n return \"kontakt\";\n } else if (this.data.topic.toLowerCase().includes(\"adresse\")) {\n return \"adresse\";\n } else {\n return \"text_input\";\n }\n },\n },\n created() {\n // only fetching the profilUpdate Attachemnts if the profilUpdate actually has attachments\n if (this.value.attachment_id) {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(\n this.data.profil_update_id\n ))\n .then((res) => {\n this.files = res.data;\n });\n }\n },\n mounted() {\n this.modal = this.$refs.modalContainer.modal;\n },\n popup(options) {\n return BsModal.popup.bind(this)(null, options);\n },\n template: /*html*/ `\n\n \n \n \n\n\n \n \n\n \n \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import { CoreFilterCmpt } from \"../../filter/Filter.js\";\nimport AcceptDenyUpdate from \"./AcceptDenyUpdate.js\";\nimport Alert from \"../../../components/Bootstrap/Alert.js\";\nimport Loading from \"../../../components/Loader.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nconst sortProfilUpdates = (ele1, ele2, thisPointer) => {\n let result = 0;\n if (ele1.status === thisPointer.profilUpdateStates[\"Pending\"]) {\n result = -1;\n } else if (ele1.status === thisPointer.profilUpdateStates[\"Accepted\"]) {\n result =\n ele2.status === thisPointer.profilUpdateStates[\"Rejected\"] ? -1 : 1;\n } else {\n result = 1;\n }\n\n if (ele1.status === ele2.status) {\n //? if they have the same status , insert_date gets compared for order\n result =\n new Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n new Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n }\n return result;\n};\n\nexport default {\n components: {\n CoreFilterCmpt,\n Loading,\n AcceptDenyUpdate,\n },\n inject: [\"profilUpdateStates\"],\n props: {\n id: {\n type: String,\n },\n },\n data() {\n return {\n categoryLoaded: false,\n showModal: false,\n modalData: null,\n loading: false,\n filter: \"Pending\",\n profil_update_id: Number(this.id),\n };\n },\n\tcomputed: {\n\t\tprofilUpdateEvents: function () {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\t\"event\": \"dataProcessed\",\n\t\t\t\t\t\"handler\": this.handleDataProcessed\n\t\t\t\t}\n\t\t\t];\n\t\t},\n\t\tprofilUpdateOptions: function () {\n\t\t\treturn {\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: [\"width\", \"visible\", \"frozen\"],\n\t\t\t\t},\n\t\t\t\tpersistenceID: 'cis-profilupdate-2025121702',\n\t\t\t\tajaxURL: 'dummy',\n\t\t\t\tajaxRequestFunc: (url, config, params) => {\n\t\t\t\t\treturn this.$api.call(ApiProfilUpdate.getProfilUpdateWithPermission(params.filter));\n\t\t\t\t},\n\t\t\t\tajaxParams: () => {\n\t\t\t\t\tlet filter = '';\n\t\t\t\t\tswitch (this.filter) {\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Pending\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Pending\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Accepted\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Accepted\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Rejected\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Rejected\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilter = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t\"filter\": filter\n\t\t\t\t\t};\n\t\t\t\t},\n ajaxResponse: (url, params, response) => {\n //url - the URL of the request\n //params - the parameters passed with the request\n //response - the JSON object returned in the body of the response.\n //? sorts the response data from the backend\n\t\t\t\t\tif (response?.data)\n\t\t\t\t\t\tresponse.data.sort((ele1, ele2) => sortProfilUpdates(ele1, ele2, this));\n\n\t\t\t\t\treturn response.data;\n },\n //? adds tooltip with the status message of a profil update request if its status is not pending\n columnDefaults: {\n tooltip: (e, cell, onRendered) => {\n //e - mouseover event\n //cell - cell component\n //onRendered - onRendered callback registration function\n let statusMessage = cell.getData().status_message;\n let statusDate = cell.getData().status_timestamp;\n let status = cell.getData().status;\n if (!statusMessage) {\n return null;\n }\n let el = document.createElement(\"div\");\n el.classList.add(\"border\", \"border-dark\");\n\n let statusDateEl = document.createElement(\"span\");\n statusDateEl.classList.add(\"d-block\", \"mb-1\");\n statusDateEl.innerHTML =\n \"Request was \" + status + \" on \" + statusDate;\n let statusMessageEl = document.createElement(\"span\");\n statusMessageEl.innerHTML = \"Status message: \" + statusMessage;\n\n el.appendChild(statusDateEl);\n el.appendChild(statusMessageEl);\n return el;\n },\n },\n rowContextMenu: (e, component) => {\n let menu = [];\n if (\n component.getData().status === this.profilUpdateStates[\"Pending\"]\n ) {\n menu.push(\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"acceptUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"denyUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n }\n );\n } else {\n menu.push({\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n });\n }\n return menu;\n },\n\n height: 600,\n layout: \"fitDataStretchFrozen\",\n\n columns: [\n {\n title: this.$p.t(\"profilUpdate\", \"UID\"),\n field: \"uid\",\n minWidth: 100,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Name\"),\n field: \"name\",\n minWidth: 200,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profil\", \"stg_short\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"studiengang\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n\t\t\ttitle: this.$p.t(\"profil\", \"sem_short\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n\t\t\tfield: \"semester\",\n\t\t\theaderFilter: \"list\",\n\t\t\theaderFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"}\n\t\t },\n\t\t {\n title: this.$p.t(\"profil\", \"orgform_short\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"orgform\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profil\", \"orgeinheit_short\") + ' (' + this.$p.t(\"profil\", \"mitarbeiterIn\") + ')',\n field: \"oezuordnung\",\n minWidth: 200,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profilUpdate\", \"Topic\"),\n field: \"topic\",\n resizable: true,\n minWidth: 200,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profilUpdate\", \"insertamum\"),\n field: \"insertamum_iso\",\n resizable: true,\n\t\t\theaderFilterFunc: 'dates',\n\t\t\theaderFilter: dateFilter,\n minWidth: 200,\n\t\t\tformatter:\"datetime\",\n\t\t\tformatterParams: this.datetimeFormatterParams(),\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profilUpdate\", \"Status\"),\n field: \"status_translated\",\n hozAlign: \"center\",\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n formatter: (cell, para) => {\n let iconClasses = \"\";\n let status = cell.getRow().getData().status;\n switch (status) {\n case this.profilUpdateStates[\"Pending\"]:\n iconClasses += \"fa fa-lg fa-circle-info text-info \";\n break;\n case this.profilUpdateStates[\"Accepted\"]:\n iconClasses += \"fa fa-lg fa-circle-check text-success \";\n break;\n case this.profilUpdateStates[\"Rejected\"]:\n iconClasses += \"fa fa-lg fa-circle-xmark text-danger \";\n break;\n }\n return `
    ${cell.getValue()}
    `;\n },\n resizable: true,\n minWidth: 200,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"actions\"),\n headerSort: false,\n\t\t\tfrozen: true,\n formatter: (cell, params) => {\n let details = this.$p.t('global', 'details');\n let html = `
    \n \n
    `;\n\n // Convert the HTML string to an HTML node\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, \"text/html\");\n const node = doc.body.firstChild;\n\n // Add event listeners\n node\n .querySelector(\"#showButton\")\n .addEventListener(\"click\", () => {\n this.showAcceptDenyModal(cell.getRow().getData());\n });\n\n return node;\n },\n minWidth: 200,\n resizable: true,\n hozAlign: \"center\",\n },\n ],\n };\n }\n },\n methods: {\n denyProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n acceptProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n // update the data inside the table\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n setLoading: function (newValue) {\n this.loading = newValue;\n },\n hideAcceptDenyModal: function () {\n //? checks the AcceptDenyModal component property result, if the user made a successful request or not\n if (this.$refs.AcceptDenyModal.result) {\n //? refetches the data, if any request was denied or accepted\n //* setData will call the ajaxURL again to refresh the data\n\n this.$refs.UpdatesTable.tabulator.setData();\n } else {\n // when modal was closed without submitting request\n }\n this.showModal = false;\n this.modalData = null;\n },\n showAcceptDenyModal(value) {\n this.modalData = value;\n if (!this.modalData) {\n return;\n }\n this.showModal = true;\n\n // after a state change, wait for the DOM updates to complete\n Vue.nextTick(() => {\n this.$refs.AcceptDenyModal.show();\n });\n },\n updateData: function (event) {\n this.$refs.UpdatesTable.tabulator.setData();\n //? store the selected view in the session storage of the browser\n sessionStorage.setItem(\"filter\", event.target.value);\n\t\t},\n\t\thandleDataProcessed: function () {\n\t\t\tif (this.profil_update_id) {\n\t\t\t\tconst arrayRowData = this.$refs.UpdatesTable.tabulator\n\t\t\t\t\t.getData()\n\t\t\t\t\t.filter((row) => {\n\t\t\t\t\t\treturn row.profil_update_id === this.profil_update_id;\n\t\t\t\t\t});\n\t\t\t\tif (arrayRowData.length) {\n\t\t\t\t\tthis.showAcceptDenyModal(arrayRowData[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n },\n watch: {\n loading: function (newValue, oldValue) {\n if (newValue) {\n this.$refs.loadingModalRef.show();\n } else {\n this.$refs.loadingModalRef.hide();\n }\n },\n },\n created() {\n this.$p.loadCategory([\"profilUpdate\", \"lehre\", \"profil\", \"global\"]).then(() => {\n this.categoryLoaded = true;\n });\n },\n\n mounted() {\n\t\t//? opens the AcceptDenyUpdate Modal if a preselected profil_update_id was passed to the component (used for email links)\n if (sessionStorage.getItem(\"filter\")) {\n this.filter = sessionStorage.getItem(\"filter\");\n }\n },\n template: /*html*/ `\n
    \n\t\t\n\t\t

    {{$p.t('profilUpdate', 'profilUpdateRequests')}}

    \n\t\t\n\n\t\t\n\t\t\t\t \n\t\t\n\n\t
    `,\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import ProfilUpdateView from \"../../components/Cis/ProfilUpdate/ProfilUpdateView.js\";\nimport PluginsPhrasen from \"../../plugins/Phrasen.js\";\n\nimport ApiProfilUpdate from '../../api/factory/profilUpdate.js';\n\n// TODO: sobald in verwendung den vue router pfad zu ProfilUpdateView definieren und diese app in component auslagern\nconst app = Vue.createApp({\n name: 'ProfilUpdateRequestsApp',\n components: {\n [\"profil-update-view\"]: ProfilUpdateView,\n },\n\n data() {\n return {\n profilUpdateStates: null,\n };\n },\n provide() {\n return {\n profilUpdateStates: Vue.computed(() =>\n this.profilUpdateStates ? this.profilUpdateStates : false\n ),\n };\n },\n methods: {},\n created() {\n this.$api\n .call(ApiProfilUpdate.getStatus())\n .then((response) => {\n this.profilUpdateStates = response.data;\n })\n .catch((error) => {\n console.error(error);\n });\n },\n});\n\nFhcApps.makeExtendable(app);\n\napp.use(PluginsPhrasen).mount(\"#content\");"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","Array","default","columns","fields","switchFilter","applyFilterConfig","saveCustomFilter","currentFields","computed","types","reduce","a","c","toLowerCase","indexOf","name","n","evt","currentTarget","value","filteredFields","filter","el","condition","length","alert","addField","push","removeField","index","splice","FilterColumns","selected","names","Object","hide","show","selectedFields","toggle","field","DEFAULT_ICONS","jsonLines","xlsx","pdf","html","json","csv","DEFAULT_LABELS","TableDownload","tabulator","config","String","iconClass","currentConfig","prototype","toString","call","split","isArray","newConfig","k","v","stringToFileFormatter","icon","label","formatter","map","validateFileFormatter","input","lcInput","includes","window","XLSX","jspdf","jsPDF","autoTable","download","file","options","elementDataMap","WeakMap","collapseAutoClose","mounted","binding","open","set","contains","target","collapse","bootstrap","Collapse","getInstance","addEventListener","document","get","beforeUnmount","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","forEach","column","i","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","update","ApiFilter","wsParams","method","url","params","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","_uuid","CoreFilterCmpt","components","directives","onNwNewEntry","title","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","sort","headerFilter","group","page","notSelectedFields","x","filteredData","JSON","parse","stringify","filteredColumns","hasOwnProperty","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","res","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","$p","loadCategory","t","resolve","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","$api","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","dataTree","$refs","on","event","handler","toDelete","childIdx","child","appendChild","counter","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","id","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","handlerSaveCustomFilter","getAttribute","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","BsModal","modal","fullscreen","backdrop","validator","focus","keyboard","noCloseBtn","dialogClass","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","relatedTarget","toggleFullscreen","Modal","popup","body","footer","slots","includedPrimevue","primevue","reject","instance","Vue","createApp","setup","h","class","ref","unmount","result","unmounted","wrapper","parentElement","removeChild","createElement","use","zIndex","overlay","Phrasen","mount","Kontakt","view","Adresse","withZustelladresse","ApiProfilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","uid","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","updateProfilbild","getProfilUpdateWithPermission","encodeURIComponent","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","payload","fileID","updateProfilRequest","ID","deleteProfilRequest","AcceptDenyUpdate","inject","mixins","setLoading","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","info","files","getProfilStatus","async","app_root","ci_router","dms_id","getDocumentLink","handleRequest","e","$fhcAlert","handleSystemError","getComponentView","attachment_id","modalContainer","bind","Loading","timeout","Number","state","setTimeout","clearTimeout","dateFilter","cell","onRendered","success","div","initialValue","val","getValue","start","Date","end","PrimevueCalendar","calendar","console","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","ProfilUpdateView","categoryLoaded","showModal","modalData","profilUpdateEvents","handleDataProcessed","profilUpdateOptions","persistenceID","ajaxURL","ajaxRequestFunc","ajaxParams","profilUpdateStates","ajaxResponse","ele1","ele2","sortProfilUpdates","thisPointer","status","insertamum","reverse","join","statusMessage","getData","statusDate","status_timestamp","classList","add","statusDateEl","innerHTML","statusMessageEl","rowContextMenu","component","menu","action","UpdatesTable","separator","showAcceptDenyModal","minWidth","headerFilterParams","valuesLookup","listOnEmpty","autocomplete","headerFilterFunc","formatterParams","datetimeFormatterParams","hozAlign","para","iconClasses","getRow","headerSort","node","DOMParser","parseFromString","firstChild","querySelector","denyProfilUpdate","acceptProfilUpdate","hideAcceptDenyModal","AcceptDenyModal","nextTick","updateData","sessionStorage","setItem","arrayRowData","row","inputFormat","outputFormat","invalidPlaceholder","timezone","loadingModalRef","getItem","search","searchsettings","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","modelValue","only_open","studiengang_kz_intern","stg_kz","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","item","FileList","File","newData","entries","nd","key","append","jsondata","errors","err","_defaultErrorHandlers","code","handled","alertDefault","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","db","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","isError","hasData","trim","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","detail","openMessagecard","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","alertMultiple","messageArray","errMsg","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","fail","combine","_format_toast","_default","msgs","b","n_errors","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","phrase","text","obj","elem","extractCategory","t_ref","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","FhcApps","makeExtendable"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ProfilUpdateRequests.js","sources":["../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/ProfilUpdate/AcceptDenyUpdate.js","../../../../js/components/Loader.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/ProfilUpdate/ProfilUpdateView.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/apps/Cis/ProfilUpdateRequests.js"],"sourcesContent":["/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || tabulatorOptions.selectableRows || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.tabulatorOptions.selectableRows || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\",\n\t\t\"toggleFullscreen\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t\tthis.$emit('toggleFullscreen')\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    {{$p.t('person','strasse')}}
    \n {{data.strasse}} \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('global','typ')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t('person','ort')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t('person','plz')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('person','zustelladresse')}}
    \n
    \n \n
    \n
    \n
    \n
    \n`\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport Alert from \"../../Bootstrap/Alert.js\";\nimport Kontakt from \"../Profil/ProfilComponents/Kontakt.js\";\nimport Adresse from \"../Profil/ProfilComponents/Adresse.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n BsModal,\n Kontakt,\n Adresse,\n },\n inject: [\"profilUpdateStates\"],\n mixins: [BsModal],\n props: {\n title: {\n type: String,\n },\n value: {\n type: Object,\n },\n setLoading: {\n type: Function,\n },\n\n /*\n * NOTE(chris):\n * Hack to expose in \"emits\" declared events to $props which we use\n * in the v-bind directive to forward all events.\n * @see: https://github.com/vuejs/core/issues/3432\n */\n onHideBsModal: Function,\n onHiddenBsModal: Function,\n onHidePreventedBsModal: Function,\n onShowBsModal: Function,\n onShownBsModal: Function,\n },\n data() {\n return {\n data: this.value,\n loading: false,\n result: false,\n info: null,\n files: null,\n };\n },\n\n methods: {\n getProfilStatus: async function () {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n handleRequest: function (type) {\n this.loading = true;\n this.setLoading(true);\n this.$api\n .call(ApiProfilUpdate[\n type.toLowerCase() == \"accept\"\n ? \"acceptProfilRequest\"\n : \"denyProfilRequest\"\n ](this.data))\n .then((res) => {\n this.result = true;\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n\t\t this.setLoading(false);\n\t\t this.loading = false;\n this.hide();\n });\n },\n },\n\n computed: {\n getComponentView: function () {\n if (this.data.topic.toLowerCase().includes(\"kontakt\")) {\n return \"kontakt\";\n } else if (this.data.topic.toLowerCase().includes(\"adresse\")) {\n return \"adresse\";\n } else {\n return \"text_input\";\n }\n },\n },\n created() {\n // only fetching the profilUpdate Attachemnts if the profilUpdate actually has attachments\n if (this.value.attachment_id) {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(\n this.data.profil_update_id\n ))\n .then((res) => {\n this.files = res.data;\n });\n }\n },\n mounted() {\n this.modal = this.$refs.modalContainer.modal;\n },\n popup(options) {\n return BsModal.popup.bind(this)(null, options);\n },\n template: /*html*/ `\n\n \n \n \n\n\n \n \n\n \n \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import { CoreFilterCmpt } from \"../../filter/Filter.js\";\nimport AcceptDenyUpdate from \"./AcceptDenyUpdate.js\";\nimport Alert from \"../../../components/Bootstrap/Alert.js\";\nimport Loading from \"../../../components/Loader.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nconst sortProfilUpdates = (ele1, ele2, thisPointer) => {\n let result = 0;\n if (ele1.status === thisPointer.profilUpdateStates[\"Pending\"]) {\n result = -1;\n } else if (ele1.status === thisPointer.profilUpdateStates[\"Accepted\"]) {\n result =\n ele2.status === thisPointer.profilUpdateStates[\"Rejected\"] ? -1 : 1;\n } else {\n result = 1;\n }\n\n if (ele1.status === ele2.status) {\n //? if they have the same status , insert_date gets compared for order\n result =\n new Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n new Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n }\n return result;\n};\n\nexport default {\n components: {\n CoreFilterCmpt,\n Loading,\n AcceptDenyUpdate,\n },\n inject: [\"profilUpdateStates\"],\n props: {\n id: {\n type: String,\n },\n },\n data() {\n return {\n categoryLoaded: false,\n showModal: false,\n modalData: null,\n loading: false,\n filter: \"Pending\",\n profil_update_id: Number(this.id),\n };\n },\n\tcomputed: {\n\t\tprofilUpdateEvents: function () {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\t\"event\": \"dataProcessed\",\n\t\t\t\t\t\"handler\": this.handleDataProcessed\n\t\t\t\t}\n\t\t\t];\n\t\t},\n\t\tprofilUpdateOptions: function () {\n\t\t\treturn {\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: [\"width\", \"visible\", \"frozen\"],\n\t\t\t\t},\n\t\t\t\tpersistenceID: 'cis-profilupdate-2025121702',\n\t\t\t\tajaxURL: 'dummy',\n\t\t\t\tajaxRequestFunc: (url, config, params) => {\n\t\t\t\t\treturn this.$api.call(ApiProfilUpdate.getProfilUpdateWithPermission(params.filter));\n\t\t\t\t},\n\t\t\t\tajaxParams: () => {\n\t\t\t\t\tlet filter = '';\n\t\t\t\t\tswitch (this.filter) {\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Pending\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Pending\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Accepted\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Accepted\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase this.profilUpdateStates[\"Rejected\"]:\n\t\t\t\t\t\t\tfilter = this.profilUpdateStates[\"Rejected\"];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tfilter = '';\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t\"filter\": filter\n\t\t\t\t\t};\n\t\t\t\t},\n ajaxResponse: (url, params, response) => {\n //url - the URL of the request\n //params - the parameters passed with the request\n //response - the JSON object returned in the body of the response.\n //? sorts the response data from the backend\n\t\t\t\t\tif (response?.data)\n\t\t\t\t\t\tresponse.data.sort((ele1, ele2) => sortProfilUpdates(ele1, ele2, this));\n\n\t\t\t\t\treturn response.data;\n },\n //? adds tooltip with the status message of a profil update request if its status is not pending\n columnDefaults: {\n tooltip: (e, cell, onRendered) => {\n //e - mouseover event\n //cell - cell component\n //onRendered - onRendered callback registration function\n let statusMessage = cell.getData().status_message;\n let statusDate = cell.getData().status_timestamp;\n let status = cell.getData().status;\n if (!statusMessage) {\n return null;\n }\n let el = document.createElement(\"div\");\n el.classList.add(\"border\", \"border-dark\");\n\n let statusDateEl = document.createElement(\"span\");\n statusDateEl.classList.add(\"d-block\", \"mb-1\");\n statusDateEl.innerHTML =\n \"Request was \" + status + \" on \" + statusDate;\n let statusMessageEl = document.createElement(\"span\");\n statusMessageEl.innerHTML = \"Status message: \" + statusMessage;\n\n el.appendChild(statusDateEl);\n el.appendChild(statusMessageEl);\n return el;\n },\n },\n rowContextMenu: (e, component) => {\n let menu = [];\n if (\n component.getData().status === this.profilUpdateStates[\"Pending\"]\n ) {\n menu.push(\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"acceptUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"denyUpdate\"\n )}`,\n action: (e, column) => {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(column.getData()))\n .then((res) => {\n this.$refs.UpdatesTable.tabulator.setData();\n })\n\t\t\t\t\t.catch((e) => this.$fhcAlert.handleSystemError);\n },\n },\n {\n separator: true,\n },\n {\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n }\n );\n } else {\n menu.push({\n label: ` ${this.$p.t(\n \"profilUpdate\",\n \"showRequest\"\n )}`,\n action: (e, column) => {\n this.showAcceptDenyModal(column.getData());\n },\n });\n }\n return menu;\n },\n\n height: 600,\n layout: \"fitDataStretchFrozen\",\n\n columns: [\n {\n title: this.$p.t(\"profilUpdate\", \"UID\"),\n field: \"uid\",\n minWidth: 100,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"Name\"),\n field: \"name\",\n minWidth: 200,\n resizable: true,\n headerFilter: true,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profil\", \"stg_short\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"studiengang\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n\t\t\ttitle: this.$p.t(\"profil\", \"sem_short\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n\t\t\tfield: \"semester\",\n\t\t\theaderFilter: \"list\",\n\t\t\theaderFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"}\n\t\t },\n\t\t {\n title: this.$p.t(\"profil\", \"orgform_short\") + ' (' + this.$p.t(\"profil\", \"studentIn\") + ')',\n field: \"orgform\",\n minWidth: 50,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profil\", \"orgeinheit_short\") + ' (' + this.$p.t(\"profil\", \"mitarbeiterIn\") + ')',\n field: \"oezuordnung\",\n minWidth: 200,\n resizable: true,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profilUpdate\", \"Topic\"),\n field: \"topic\",\n resizable: true,\n minWidth: 200,\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profilUpdate\", \"insertamum\"),\n field: \"insertamum_iso\",\n resizable: true,\n\t\t\theaderFilterFunc: 'dates',\n\t\t\theaderFilter: dateFilter,\n minWidth: 200,\n\t\t\tformatter:\"datetime\",\n\t\t\tformatterParams: this.datetimeFormatterParams(),\n //responsive:0,\n },\n\t\t {\n title: this.$p.t(\"profilUpdate\", \"Status\"),\n field: \"status_translated\",\n hozAlign: \"center\",\n headerFilter: \"list\",\n headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:\"asc\"},\n formatter: (cell, para) => {\n let iconClasses = \"\";\n let status = cell.getRow().getData().status;\n switch (status) {\n case this.profilUpdateStates[\"Pending\"]:\n iconClasses += \"fa fa-lg fa-circle-info text-info \";\n break;\n case this.profilUpdateStates[\"Accepted\"]:\n iconClasses += \"fa fa-lg fa-circle-check text-success \";\n break;\n case this.profilUpdateStates[\"Rejected\"]:\n iconClasses += \"fa fa-lg fa-circle-xmark text-danger \";\n break;\n }\n return `
    ${cell.getValue()}
    `;\n },\n resizable: true,\n minWidth: 200,\n //responsive:0,\n },\n {\n title: this.$p.t(\"profilUpdate\", \"actions\"),\n headerSort: false,\n\t\t\tfrozen: true,\n formatter: (cell, params) => {\n let details = this.$p.t('global', 'details');\n let html = `
    \n \n
    `;\n\n // Convert the HTML string to an HTML node\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, \"text/html\");\n const node = doc.body.firstChild;\n\n // Add event listeners\n node\n .querySelector(\"#showButton\")\n .addEventListener(\"click\", () => {\n this.showAcceptDenyModal(cell.getRow().getData());\n });\n\n return node;\n },\n minWidth: 200,\n resizable: true,\n hozAlign: \"center\",\n },\n ],\n };\n }\n },\n methods: {\n denyProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.denyProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n acceptProfilUpdate: function (data) {\n this.$api\n .call(ApiProfilUpdate.acceptProfilRequest(data))\n .then((res) => {\n // block when the request was successful\n })\n\t\t.catch((e) => this.$fhcAlert.handleSystemError)\n .finally(() => {\n // update the data inside the table\n this.$refs.UpdatesTable.tabulator.setData();\n });\n },\n setLoading: function (newValue) {\n this.loading = newValue;\n },\n hideAcceptDenyModal: function () {\n //? checks the AcceptDenyModal component property result, if the user made a successful request or not\n if (this.$refs.AcceptDenyModal.result) {\n //? refetches the data, if any request was denied or accepted\n //* setData will call the ajaxURL again to refresh the data\n\n this.$refs.UpdatesTable.tabulator.setData();\n } else {\n // when modal was closed without submitting request\n }\n this.showModal = false;\n this.modalData = null;\n },\n showAcceptDenyModal(value) {\n this.modalData = value;\n if (!this.modalData) {\n return;\n }\n this.showModal = true;\n\n // after a state change, wait for the DOM updates to complete\n Vue.nextTick(() => {\n this.$refs.AcceptDenyModal.show();\n });\n },\n updateData: function (event) {\n this.$refs.UpdatesTable.tabulator.setData();\n //? store the selected view in the session storage of the browser\n sessionStorage.setItem(\"filter\", event.target.value);\n\t\t},\n\t\thandleDataProcessed: function () {\n\t\t\tif (this.profil_update_id) {\n\t\t\t\tconst arrayRowData = this.$refs.UpdatesTable.tabulator\n\t\t\t\t\t.getData()\n\t\t\t\t\t.filter((row) => {\n\t\t\t\t\t\treturn row.profil_update_id === this.profil_update_id;\n\t\t\t\t\t});\n\t\t\t\tif (arrayRowData.length) {\n\t\t\t\t\tthis.showAcceptDenyModal(arrayRowData[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n },\n watch: {\n loading: function (newValue, oldValue) {\n if (newValue) {\n this.$refs.loadingModalRef.show();\n } else {\n this.$refs.loadingModalRef.hide();\n }\n },\n },\n created() {\n this.$p.loadCategory([\"profilUpdate\", \"lehre\", \"profil\", \"global\"]).then(() => {\n this.categoryLoaded = true;\n });\n },\n\n mounted() {\n\t\t//? opens the AcceptDenyUpdate Modal if a preselected profil_update_id was passed to the component (used for email links)\n if (sessionStorage.getItem(\"filter\")) {\n this.filter = sessionStorage.getItem(\"filter\");\n }\n },\n template: /*html*/ `\n
    \n\t\t\n\t\t

    {{$p.t('profilUpdate', 'profilUpdateRequests')}}

    \n\t\t\n\n\t\t\n\t\t\t\t \n\t\t\n\n\t
    `,\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","import ProfilUpdateView from \"../../components/Cis/ProfilUpdate/ProfilUpdateView.js\";\nimport PluginsPhrasen from \"../../plugins/Phrasen.js\";\n\nimport ApiProfilUpdate from '../../api/factory/profilUpdate.js';\n\n// TODO: sobald in verwendung den vue router pfad zu ProfilUpdateView definieren und diese app in component auslagern\nconst app = Vue.createApp({\n name: 'ProfilUpdateRequestsApp',\n components: {\n [\"profil-update-view\"]: ProfilUpdateView,\n },\n\n data() {\n return {\n profilUpdateStates: null,\n };\n },\n provide() {\n return {\n profilUpdateStates: Vue.computed(() =>\n this.profilUpdateStates ? this.profilUpdateStates : false\n ),\n };\n },\n methods: {},\n created() {\n this.$api\n .call(ApiProfilUpdate.getStatus())\n .then((response) => {\n this.profilUpdateStates = response.data;\n })\n .catch((error) => {\n console.error(error);\n });\n },\n});\n\nFhcApps.makeExtendable(app);\n\napp.use(PluginsPhrasen).mount(\"#content\");"],"names":["CoreFetchCmpt","emits","props","refresh","type","Boolean","apiFunction","required","Function","apiFunctionParameters","watch","newValue","oldValue","this","fetchData","data","loading","error","errorMessage","created","methods","apiFunctionResult","Promise","then","successHandler","catch","errorHandler","finally","finallyHandler","setError","response","$emit","undefined","retval","message","template","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","Array","default","columns","fields","switchFilter","applyFilterConfig","saveCustomFilter","currentFields","computed","types","reduce","a","c","toLowerCase","indexOf","name","n","evt","currentTarget","value","filteredFields","filter","el","condition","length","alert","addField","push","removeField","index","splice","FilterColumns","selected","names","Object","hide","show","selectedFields","toggle","field","DEFAULT_ICONS","jsonLines","xlsx","pdf","html","json","csv","DEFAULT_LABELS","TableDownload","tabulator","config","String","iconClass","currentConfig","prototype","toString","call","split","isArray","newConfig","k","v","stringToFileFormatter","icon","label","formatter","map","validateFileFormatter","input","lcInput","includes","window","XLSX","jspdf","jsPDF","autoTable","download","file","options","elementDataMap","WeakMap","collapseAutoClose","mounted","binding","open","set","contains","target","collapse","bootstrap","Collapse","getInstance","addEventListener","document","get","beforeUnmount","removeEventListener","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","element","clientWidth","gap","lastCol","forEach","column","i","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","update","ApiFilter","wsParams","method","url","params","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","_uuid","CoreFilterCmpt","components","directives","onNwNewEntry","title","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","sort","headerFilter","group","page","notSelectedFields","x","filteredData","JSON","parse","stringify","filteredColumns","hasOwnProperty","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","res","idExtra","columnsForFilter","filterTitles","reloadTable","setData","initTabulator","placeholder","$p","loadCategory","t","resolve","location","hash","slice","resolvePromiseFunc","setRenderData","startFetchCmpt","$api","layout","movableColumns","columnDefaults","tooltip","height","minHeight","maxHeight","selectable","selectableRows","dataTree","$refs","on","event","handler","toDelete","childIdx","child","appendChild","counter","cols","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","j","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","link","id","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","FHC_JS_DATA_STORAGE_OBJECT","called_path","called_method","handlerSaveCustomFilter","getAttribute","substring","attr","parentId","parentIdx","parent","_children","beforeCreate","$props","BsModal","modal","fullscreen","backdrop","validator","focus","keyboard","noCloseBtn","dialogClass","headerClass","bodyClass","footerClass","allowFullscreenExpand","dispose","handleUpdate","relatedTarget","toggleFullscreen","Modal","popup","body","footer","slots","includedPrimevue","primevue","reject","instance","Vue","createApp","setup","h","class","ref","unmount","result","unmounted","wrapper","parentElement","removeChild","createElement","use","zIndex","overlay","Phrasen","mount","Kontakt","view","Adresse","withZustelladresse","ApiProfilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","uid","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","updateProfilbild","getProfilUpdateWithPermission","encodeURIComponent","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","payload","fileID","updateProfilRequest","ID","deleteProfilRequest","AcceptDenyUpdate","inject","mixins","setLoading","onHideBsModal","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","info","files","getProfilStatus","async","app_root","ci_router","dms_id","getDocumentLink","handleRequest","e","$fhcAlert","handleSystemError","getComponentView","attachment_id","modalContainer","bind","Loading","timeout","Number","state","setTimeout","clearTimeout","dateFilter","cell","onRendered","success","div","initialValue","val","getValue","start","Date","end","PrimevueCalendar","calendar","console","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","ProfilUpdateView","categoryLoaded","showModal","modalData","profilUpdateEvents","handleDataProcessed","profilUpdateOptions","persistenceID","ajaxURL","ajaxRequestFunc","ajaxParams","profilUpdateStates","ajaxResponse","ele1","ele2","sortProfilUpdates","thisPointer","status","insertamum","reverse","join","statusMessage","getData","statusDate","status_timestamp","classList","add","statusDateEl","innerHTML","statusMessageEl","rowContextMenu","component","menu","action","UpdatesTable","separator","showAcceptDenyModal","minWidth","headerFilterParams","valuesLookup","listOnEmpty","autocomplete","headerFilterFunc","formatterParams","datetimeFormatterParams","hozAlign","para","iconClasses","getRow","headerSort","node","DOMParser","parseFromString","firstChild","querySelector","denyProfilUpdate","acceptProfilUpdate","hideAcceptDenyModal","AcceptDenyModal","nextTick","updateData","sessionStorage","setItem","arrayRowData","row","inputFormat","outputFormat","invalidPlaceholder","timezone","loadingModalRef","getItem","search","searchsettings","$fhcApi","post","searchAdvanced","searchdummy","phrasen$1","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","self","modelValue","only_open","studiengang_kz_intern","stg_kz","checkDoubles","form","confirmErrorHandler","insert","edit","delete","buchungsnr","getBuchungstypen","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","axios","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","dashboard","getViewData","bookmark","getBookmarks","bookmark_id","tag","ampeln","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","item","FileList","File","newData","entries","nd","key","append","jsondata","errors","err","_defaultErrorHandlers","code","handled","alertDefault","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","db","heading","sql","auth","controller","required_permissions","FhcApiFactoryWrapper","constructor","factorypart","root","defineProperty","noWarn","keys","provide","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","isError","hasData","trim","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","prop","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","detail","openMessagecard","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","alertMultiple","messageArray","errMsg","toUpperCase","stack","handleSystemMessage","msg","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","fail","combine","_format_toast","_default","msgs","b","n_errors","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","pop","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","phrase","text","obj","elem","extractCategory","t_ref","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","FhcApps","makeExtendable"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/Dashboard/Fhc.js b/public/dist/js/apps/Dashboard/Fhc.js index 45373f8c4..291b0cac0 100644 --- a/public/dist/js/apps/Dashboard/Fhc.js +++ b/public/dist/js/apps/Dashboard/Fhc.js @@ -1,6 +1,6 @@ import t from"../../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import e from"../../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import n from"../../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import i from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";import a from"../../../../js/components/vueDatepicker.js.php";var s={name:"BootstrapModal",data:()=>({modal:null,fullscreen:!1}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},focus:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},noCloseBtn:Boolean,dialogClass:[String,Array,Object],headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"px-4 py-5"},footerClass:{type:[String,Array,Object],default:""},allowFullscreenExpand:{type:Boolean,default:!1}},emits:["hideBsModal","hiddenBsModal","hidePreventedBsModal","showBsModal","shownBsModal","toggleFullscreen"],methods:{dispose(){return this.modal.dispose()},handleUpdate(){return this.modal.handleUpdate()},hide(){return this.modal.hide()},show(t){return this.modal.show(t)},toggle(){return this.modal.toggle()},toggleFullscreen(){this.fullscreen=!this.fullscreen,this.$emit("toggleFullscreen")}},mounted(){this.$refs.modal&&(this.modal=new bootstrap.Modal(this.$refs.modal,{backdrop:this.backdrop,focus:this.focus,keyboard:this.keyboard}))},popup(t,e,n,i){const a=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==i&&(s.footer=()=>i);let r=!1;return"undefined"!=typeof primevue&&(r=!0),new Promise((t,n)=>{const i=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(a,{class:"fade",...e,ref:"modal","onHidden.bs.modal":i.unmount},s),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");r&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return lt}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})},template:''},r={name:"BootstrapAlert",components:{BsModal:s},mixins:[s],props:{dialogClass:{type:[String,Array,Object],default:"modal-dialog-centered"},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t,e){return s.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},o={name:"BootstrapConfirm",mixins:[r],data:()=>({result:!1}),popup(t,e){return r.popup.bind(this)(t,e)},template:'\n\t\t\n\t\t\n\t'},l={name:"GridItem",components:{},inject:{},props:{item:Object,active:Boolean},emits:["mouseDown","mouseUp","startMove","startResize","dragging","endDrag","dropDrag","item","touchStart","touchEnd"],data:()=>({dragAction:"",dragging:!1}),computed:{},methods:{registerDragAction(t){if(this.$emit("mouseDown",t),t.target.hasAttribute("drag-action"))this.dragAction=t.target.getAttribute("drag-action");else{let e=t.target.closest("[drag-action]");this.dragAction=e?e.getAttribute("drag-action"):""}},tryDragStart(t,e){let n=this.dragAction||t.target.getAttribute("drag-action");if(n){if(this.dragging=!0,"move"==n)return this.$emit("startMove",t,e);if("resize"==n)return this.$emit("startResize",t,e)}},touchDragEnd(t){this.dragging&&(this.dragging=!1,this.$emit("touchEnd",t))},touchStart(t){this.$emit("touchStart",t),this.registerDragAction(t),this.tryDragStart(t,this.item)},touchMove(t){this.dragging&&(t.preventDefault(),this.$emit("dragging",t))}},template:'\n\t
    \n\t\t\n\t
    '};class d{constructor(t){t.w?(this.w=t.w,this.h=t.h,this.data=[...t.data],this.grid=[...t.grid]):(this.w=t,this.h=1,this.data=[],this.grid=[])}isFreeSlot(t,e){const n=e*this.w+t;return!this.grid[n]&&0!==this.grid[n]}getMaxY(){return this.data.reduce((t,e)=>(e?.y>t&&(t=e.y),t),0)}getFreeSlots(){const t=[];let e=this.getMaxY(),n=this.w*(e+1);for(let t=0;tthis.grid[e]=t.index),this.data[t.index]=t,this.h=Math.max(this.h,t.y+t.h),[];{const i=new d(this);t.frame.forEach(t=>i.grid[t]=-1);const a=i.tryMoving(n,e);if(a.length){const e=a.sort((t,e)=>(void 0===t.cost&&(t.cost=t.moves.reduce((t,e)=>t*e.cost,1)),void 0===e.cost&&(e.cost=e.moves.reduce((t,e)=>t*e.cost,1)),t.cost>e.cost)),n=[];return e[0].moves.forEach(t=>{const e={...this.data[t.index]};e.x+=t.x,e.y+=t.y,e.frame=this.getItemFrame(e),this.h=Math.max(this.h,e.y+e.h),this.remove(e),e.frame.forEach(t=>this.grid[t]=e.index),this.data[t.index]=e,n[t.index]={index:e.index,x:e.x,y:e.y}}),t.frame.forEach(e=>this.grid[e]=t.index),this.data[t.index]=t,n}console.error("FATAL","can't arrange item on grid")}}move(t,e,n){if(t.data.place[this.w]?.pinned)return[];if(t.x==e&&t.y==n)return[];let i;this.remove(t),t.x==e?i=n-t.y>0?0:3:t.y==n&&(i=e-t.x>0?1:2);const a=Array.isArray(t.frame)?[...t.frame]:[t.frame],s={...t};s.x=e,s.y=n,s.frame=this.getItemFrame(s);let r=this.getItemsInFrame(s.frame);if(r.some(t=>this.data[t]?.data.place[this.w]?.pinned))return[];let o=r.map(t=>this.data[t]),l=o.map(t=>t.frame).flat();if(!l.some(t=>!s.frame.includes(t))&&!l.some(t=>a.includes(t))){let i=[],s=[];for(let t of a){if(s.includes(t))continue;let e=o.shift();e&&(s=[...s,...this.getItemFrame({...e,...this.getSingleFramePosition(t)})],i[e.index]={index:e.index,...this.getSingleFramePosition(t)})}return i[t.index]={index:t.index,x:e,y:n},i}const d=this.add(s,i);return d[t.index]={index:t.index,x:e,y:n},d}resize(t,e,n){if(t.w==e&&t.h==n)return[];this.remove(t);const i={...t};i.w=e,i.h=n,i.frame=this.getItemFrame(i);const a=this.add(i);return a&&(a[t.index]={index:t.index,w:e,h:n,x:t.x,y:t.y,resize:!0}),a}tryMoving(t,e){if(Array.isArray(t)){t.forEach(t=>this.remove({index:t}));let n=[{grid:this,moves:[]}];return t.forEach(t=>{let i=[];n.forEach(n=>{n.grid.tryMoving(t,e).forEach(t=>{n.moves,t.moves=[...t.moves,...n.moves],i.push(t)})}),n=i}),n}const n=[0,3,1,2];this.remove({index:t});const i=1+.2*(this.data[t].weight||0);return n.reduce((n,a)=>{let s=this.tryMovingInDirection(a,t,1,(e===a?.5:1+.1*a)*i);return s?[...n,...s]:n},[]).filter(t=>t)}tryMovingInDirection(t,e,n,i){const a={index:e,x:0,y:0,cost:i};let s;switch(t){case 0:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].y-n<0)return!1;s=this.data[e].frame.map(t=>t-this.w*n),a.y=-n;break;case 3:if(this.data[e].data?.place[this.w]?.pinned)return!1;this.data[e].y+this.data[e].h+n>this.h&&(i+=.4),s=this.data[e].frame.map(t=>t+this.w*n),a.y=n;break;case 1:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x-n<0)return!1;s=this.data[e].frame.map(t=>t-n),a.x=-n;break;case 2:if(this.data[e].data?.place[this.w]?.pinned||this.data[e].x+this.data[e].w+n>this.w)return!1;s=this.data[e].frame.map(t=>t+n),a.x=n}const r=this.getItemsInFrame(s);if(r.includes(-1))return this.tryMovingInDirection(t,e,n+1,i);const o=new d(this);if(s.forEach(t=>o.grid[t]=-1),!r.length)return[{grid:o,moves:[a]}];const l=o.tryMoving(r).map(t=>t.moves.unshift(a)&&t);return!!l.length&&l}clearWeights(){this.data.forEach(t=>t.weight=void 0)}getItemsInFrame(t){return t.map(t=>this.grid[t]).filter((t,e,n)=>(t||0===t)&&n.indexOf(t)===e)}remove(t){this.grid=this.grid.map(e=>e!=t.index?e:void 0)}getItemFrame(t){const e=[];for(let n=0;n({x:-1,y:-1,clientX:0,clientY:0,mode:0,grid:null,dragGrid:null,permUpdates:[],positionUpdates:null,fixedPositionUpdates:null,draggedOffset:[0,0],draggedItem:null,draggedNode:null,reorderedItems:[],clonedWidget:null}),inject:{sectionName:{type:String,default:""}},computed:{additionalRowComputed:{get(){return this.additionalRow},set(t){this.$emit("update:additionalRow",t)}},items_hashmap(){let t={};return this.items.forEach(e=>{if(this.reorderedItems.length>0&&this.needsReordering(e)){let t=this.reorderedItems.filter(t=>t.data.widgetid==e.widgetid)?.pop();t&&(e.x=t.x,e.y=t.y)}t[`x${e.x}y${e.y}`]=e}),t},items_placeholders(){let t=[],e=this.cols,n=this.rows,i={};for(let a=0;a({index:e,x:t.x,y:t.y,w:t.w,h:t.h,weight:t.weight||0,data:t}))},prePlacedItems(){return this.fixedPositionUpdates?this.indexedItems.map(t=>this.fixedPositionUpdates[t.index]?{index:t.index,weight:t.weight,data:t.data,x:void 0===this.fixedPositionUpdates[t.index].x?t.x:this.fixedPositionUpdates[t.index].x,y:void 0===this.fixedPositionUpdates[t.index].y?t.y:this.fixedPositionUpdates[t.index].y,w:void 0===this.fixedPositionUpdates[t.index].w?t.w:this.fixedPositionUpdates[t.index].w,h:void 0===this.fixedPositionUpdates[t.index].h?t.h:this.fixedPositionUpdates[t.index].h}:t):this.indexedItems},placedItems(){if(!this.positionUpdates)return this.prePlacedItems;let t=this.prePlacedItems.map(t=>{if(!this.positionUpdates[t.index])return t;let e=this.positionUpdates[t.index]?.h-t.h,n=this.positionUpdates[t.index]?.w-t.w;return{resize:this.positionUpdates[t.index]?.resize,index:t.index,weight:t.weight,data:t.data,x:void 0===this.positionUpdates[t.index].x?t.x:this.positionUpdates[t.index].x,y:void 0===this.positionUpdates[t.index].y?t.y:this.positionUpdates[t.index].y,w:n>0||void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:e>0||void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h}}),e=[];return t.forEach(t=>{if(t.resize){let n={...t,w:void 0===this.positionUpdates[t.index].w?t.w:this.positionUpdates[t.index].w,h:void 0===this.positionUpdates[t.index].h?t.h:this.positionUpdates[t.index].h,resizeOverlay:!0,blank:!0};e.push(n)}}),[...t,...e]},showEmptyTileHover(){return!(!this.active||!this.grid||0!=this.mode||this.x<0||this.y<0||this.x>=this.cols||this.y>=this.rows)&&this.grid.isFreeSlot(this.x,this.y)},widgetSetup(){if(this.widgetsSetup)return this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e,t),{})}},watch:{active(t){t||this.dragCancel()},cols(){this.dragCancel()},rows:{handler(t){this.$emit("gridHeight",t)},immediate:!0},indexedItems:{handler(t){this.dragCancel();const e=this.createNewGrid(t);this.fixedPositionUpdates=e,e.length&&this.$emit("rearrangeItems",e.filter(t=>t))},immediate:!0,deep:!0}},methods:{needsReordering(t){return!t?.data?.place[this.cols]},toggleDraggedItemOverlay(t){this.draggedNode&&(t?this.draggedNode.firstElementChild.classList.add("dashboard-item-overlay"):this.draggedNode.firstElementChild.classList.remove("dashboard-item-overlay"))},dragging(t){if(1==this.mode){this.toggleDraggedItemOverlay(!0);const t=this.$refs.container.getBoundingClientRect(),e=this.clonedWidget.getBoundingClientRect();let n=this.clientY-20,i=this.clientX-15;const a=0,s=t.height-e.height,r=0,o=t.width-e.width,l=Math.max(a,Math.min(s,n)),d=Math.max(r,Math.min(o,i));this.clonedWidget.style.top=`${l}px`,this.clonedWidget.style.left=`${d}px`}},createNewGrid(t){this.grid=new d(this.cols);const e=[];let n=[...t].sort((t,e)=>this.needsReordering(t)&&this.needsReordering(e)?0:this.needsReordering(t)?999:this.needsReordering(e)?-999:t.weight>e.weight),i=[];return n.forEach(n=>{let a=this.grid.getFreeSlots();if(this.needsReordering(n)){let t=a.shift();t?(n.x=t.x,n.y=t.y):(n.x=0,n.y=this.grid.h),i.push(n)}if(n.x+n.w>this.cols){let t,i=this.cols-n.x;this.resizeLimit&&([i]=this.resizeLimit(n.data,i,n.h)),i<1&&(i=1),i>this.cols&&(i=this.cols),n.x+i>this.cols&&(t=this.cols-i),i==n.w&&(i=void 0),e[n.index]={item:n.data,x:t,w:i}}n.frame=this.grid.getItemFrame(n),this.convertGridResultToUpdate(this.grid.add(n),e,t)}),this.reorderedItems=i,this.grid.clearWeights(),e},convertGridResultToUpdate(t,e,n){t&&(n||(n=this.indexedItems),t.forEach(t=>{let i={item:n[t.index].data};void 0!==t.x&&(i.x=t.x),void 0!==t.y&&(i.y=t.y),void 0!==t.w&&(i.w=t.w),void 0!==t.h&&(i.h=t.h),e[t.index]=i}))},mouseLeave(){},updateCursor(t){if(!this.active)return this.x=this.y=-1,!1;const e=this.active?this.marginForExtraRow:0,n=this.$refs.container.getBoundingClientRect();t.clientX||t.clientY||!t.touches||(t.clientX=t.touches[0].clientX,t.clientY=t.touches[0].clientY),this.clientX=t.clientX-n.left,this.clientY=t.clientY-n.top;const i=Math.floor(this.cols*(t.clientX-n.left)/this.$refs.container.clientWidth),a=Math.floor((this.rows+e)*(t.clientY-n.top)/this.$refs.container.clientHeight);return(this.x!=i||this.y!=a)&&(this.x=i,this.y=a,!0)},_dragStart(t,e){t.dataTransfer&&(t.dataTransfer.setDragImage(t.target,-99999,-99999),t.dataTransfer.dropEffect="move",t.dataTransfer.effectAllowed="move")},startMove(t,e){this.active&&(this.mode=1,this.draggedItem=e,this.$emit("draggedItem",e),setTimeout(()=>{this.draggedNode=t.target.closest(".drop-grid-item");let e=t.target.closest(".drop-grid-item")?.cloneNode(!0);e.style.zIndex=5,e.classList.add("widgetClone"),this.$refs.container.appendChild(e);e.querySelector("[style='display: none;']").style.removeProperty("display"),this.clonedWidget=e},0),this.draggedOffset=[e.x-this.x,e.y-this.y],this._dragStart(t,e))},startResize(t,e){this.active&&(this.mode=2,this.draggedItem=e,this.$emit("draggedItem",e),this._dragStart(t))},dragOver(t){if(this.y+1>this.rows&&(1==this.mode||2==this.mode)&&this.dragCancel(),!this.active)return this.dragCancel();if(this.checkPinnedWidgetAnimation(),2==this.mode&&this.checkWidgetSizeLimitAnimation(),this.updateCursor(t))switch(this.mode){case 1:{t.preventDefault(),this.dragGrid=new d(this.grid);let e=this.x+this.draggedOffset[0],n=this.y+this.draggedOffset[1];e<0?(this.draggedOffset[0]+=e,e=0):e+this.draggedItem.w>this.cols&&(this.draggedOffset[0]+=this.cols-this.draggedItem.w-e,e=this.cols-this.draggedItem.w),n<0&&(this.draggedOffset[1]+=n,n=0),this.positionUpdates=this.dragGrid.move(this.draggedItem,e,n);break}case 2:{t.preventDefault(),this.dragGrid=new d(this.grid);let e=Math.min(this.cols-this.draggedItem.x,Math.max(1,this.x-this.draggedItem.x+1)),n=Math.max(1,this.y-this.draggedItem.y+1);this.resizeLimit&&([e,n]=this.resizeLimit(this.draggedItem.data,e,n)),this.positionUpdates=this.dragGrid.resize(this.draggedItem,e,n);break}}},dragCancel(){this.removeWidgetClones(),this.additionalRowComputed=!1,this.toggleDraggedItemOverlay(!1),this.mode=0,this.positionUpdates=null,this.draggedOffset=[0,0],this.draggedItem=null,this.$emit("draggedItem",null),this.draggedNode=null},dragEnd(){if(this.removeWidgetClones(),this.toggleDraggedItemOverlay(!1),0==this.mode)return;document.getElementById(this.draggedItem.data.widgetid).classList.remove("border-danger"),Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),this.mode=0;let t=[];this.convertGridResultToUpdate(this.positionUpdates,t),t=this._updateFixedPositions(t),t.length&&this.$emit("rearrangeItems",t.filter(t=>t)),this.draggedItem=null,this.draggedNode=null,this.$emit("draggedItem",null)},_updateFixedPositions(t){t.forEach((t,e)=>{this.fixedPositionUpdates[e]?this.fixedPositionUpdates[e]={...this.fixedPositionUpdates[e],...t}:this.fixedPositionUpdates[e]=t});let e=this.createNewGrid(this.prePlacedItems);return e.length?(e.forEach((e,n)=>t[n]=e),this._updateFixedPositions(t)):t},emptyTileClicked(){this.additionalRowComputed=!1,this.$emit("newItem",this.x,this.y)},updateCursorOnMouseMove(t){0==this.mode&&this.updateCursor(t)},checkPinnedWidgetAnimation(){let t=[];switch(this.mode){case 2:for(let e=this.draggedItem.x;e<=this.x;e++)for(let n=this.draggedItem.y;n<=this.y;n++)this.items.forEach(i=>{i.x==e&&i.y==n&&t.push(i)});break;case 1:t=this.items.filter(t=>t.x==this.x&&t.y==this.y)}Array.from(document.getElementsByClassName("denied-dragging-animation"))?.forEach(t=>{t.classList.remove("denied-dragging-animation")}),t.forEach(t=>{if(t.place[this.cols]&&t.place[this.cols].pinned){let e=document.getElementById(t.widgetid).querySelector("[pinned='true']");e.classList.contains("denied-dragging-animation")||e.classList.add("denied-dragging-animation")}})},checkWidgetSizeLimitAnimation(){let t=this.itemsSetup[this.draggedItem.data.widget],e=t.width.max??t.width,n=t.width.min??t.width,i=t.height.max??t.height,a=t.height.min??t.height,s=document.getElementById(this.draggedItem.data.widgetid),r=this.x-this.draggedItem.x+1,o=this.y-this.draggedItem.y+1;r>0&&(r>e||r0&&(o>i||o\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t'};let u={},p={},h=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard/Widget";var m={getWidget:t=>u[t],loadWidget:t=>u[t]?Promise.resolve(u[t]):p[t]?p[t]:h?(p[t]=new Promise((e,n)=>{axios.get(h,{params:{id:t}}).then(n=>{u[t]=n.data.retval,p[t]=void 0,e(u[t])}).catch(t=>n(t.response.data.retval.error))}),p[t]):Promise.reject("Widget could not be loaded because there is no path yet!"),setPath(t){h=t}},g={name:"Item",components:{BsModal:s,HeightTransition:{data:()=>({}),methods:{onEnter(t,e){t.style.height="0",t.style.height=t.scrollHeight+"px"},onLeave(t,e){t.style.height=t.scrollHeight+"px",t.style.height="0"}},template:'\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t'}},data:()=>({component:"",arguments:null,target:!1,widget:null,tmpConfig:{},isLoading:!1,hasConfig:!1,sharedData:null}),emits:["change","remove","dragstart","resizestart","configOpened","configClosed","pinItem","unPinItem"],props:["id","widgetID","config","width","height","custom","hidden","editMode","loading","item_data","place","setup","dragstate","resizeOverlay","additionalRow"],computed:{maxHeight(){return this.setup?.height?.max},maxWidth(){return"[object Number]"==Object.prototype.toString.call(this.setup?.width)?this.setup?.width:this.setup?.width?.max},minHeight(){return this.setup?.height?.min},minWidth(){return this.setup?.width?.min},isResizeable(){return this.maxWidth>1||this.maxHeight>1},isPinned(){return!!this.place?.pinned},ready(){return this.component&&null!==this.arguments}},methods:{unpin(){if(!this.editMode)return;let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("unPinItem",[t])},pinItem(){let t={item:this.item_data,x:this.item_data.x,y:this.item_data.y};this.$emit("pinItem",[t])},getWidgetC4Link:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+t.setup.cis4link,handleShowBsModal(){this.$emit("configOpened")},handleHideBsModal(){this.$emit("configClosed")},mouseDown(t){this.target=t.target},startDrag(t){this.$refs.dragHandle.contains(this.target)?this.$emit("dragstart",t):this.isResizeable&&this.$refs.resizeHandle.contains(this.target)&&this.isResizeable?this.$emit("resizestart",t):t.preventDefault()},openConfig(){this.tmpConfig={...this.arguments},this.$refs.config.show()},setConfig(t){this.hasConfig=t},changeConfig(){this.isLoading=!0;let t={...this.tmpConfig};this.sendChangeConfig(t)},changeConfigManually(){let t={...this.arguments};this.sendChangeConfig(t)},sendChangeConfig(t){for(var e in t)this.widget.arguments[e]==t[e]&&delete t[e];this.$emit("change",t)}},watch:{config(){this.arguments={...this.widget?.arguments,...this.config},this.tmpConfig={...this.arguments},this.$refs.config&&this.$refs.config.hide(),this.isLoading=!1}},async created(){this.widget=await m.loadWidget(this.id);let t=(await import(this.widget.setup.file)).default;this.$options.components["widget"+this.widget.widget_id]=t,this.component="widget"+this.widget.widget_id,this.arguments={...this.widget.arguments,...this.config},this.tmpConfig={...this.arguments}},template:'\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    '},f={data:()=>({}),props:{widget:{type:Object,required:!0}},methods:{path:t=>"/"==t[0]?FHC_JS_DATA_STORAGE_OBJECT.app_root+t:t},emits:["select"],template:'\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    '},v={name:"Section",components:{DropGrid:c,DashboardItem:g,WidgetIcon:f},inject:{widgetsSetup:{type:Array,default:[]},adminMode:{type:Boolean,default:!1},editMode:{type:Boolean,default:!1}},props:["name","widgets"],emits:["widgetAdd","widgetUpdate","widgetRemove"],data:()=>({configOpened:!1,gridWidth:1,gridHeight:null,draggedItem:null,additionalRow:!1}),provide(){return{editModeIsActive:Vue.computed(()=>this.editModeIsActive),sectionName:Vue.computed(()=>this.name)}},computed:{computedWidgetsSetup(){return this.widgetsSetup?this.widgetsSetup.reduce((t,e)=>(t[e.widget_id]=e.setup,t),{}):{}},editModeIsActive(){return(this.editMode||this.adminMode)&&!this.configOpened},getSectionStyle:()=>"margin-bottom: 8px;",items(){return this.widgets.map(t=>(!t?.widgetid&&t?.id&&(t.widgetid=t.id),{...t,reorder:!1,...t.place[this.gridWidth]||{reorder:!0,x:0,y:0,w:1,h:1}}))}},methods:{sectionNameTranslation(){switch(this.name){case"general":case"custom":return this.$p.t("dashboard",this.name);default:return this.name}},showSectionInformation(){return"general"==this.name?this.$p.t("dashboard","dashboardGeneralSectionDescription"):"custom"==this.name?this.$p.t("dashboard","dashboardCustomSectionDescription"):this.$p.t("dashboard","dashboardSectionDescription",[this.name])},handleConfigOpened(){this.configOpened=!0},handleConfigClosed(){this.configOpened=!1},checkResizeLimit(t,e,n){let i=m.getWidget(t.widget);if(i){let t=i.setup.width;t.max?t.min=t.min||1:t={min:t,max:t},et.max&&(e=t.max);let a=i.setup.height;a.max?a.min=a.min||1:a={min:a,max:a},na.max&&(n=a.max)}return[e,n]},removeWidget(t,e){if(t.custom)o.popup("Are you sure you want to delete this widget?").then(()=>this.$emit("widgetRemove",this.name,t.id));else{let n={};n[t.id]={hidden:!e},this.updatePreset(n)}},saveConfig(t,e){let n={};n[e.id]={config:t},this.updatePreset(n)},updatePositions(t,e=!1){let n={};t.forEach(t=>{let i={...t.item};i.placeholder||(i.place[this.gridWidth]||(i.place[this.gridWidth]={x:0,y:0,w:1,h:1}),delete i.x,delete i.y,delete i.w,delete i.h,delete i.place[this.gridWidth].pinned,void 0!==t.x&&(i.place[this.gridWidth].x=t.x),void 0!==t.y&&(i.place[this.gridWidth].y=t.y),void 0!==t.w&&(i.place[this.gridWidth].w=t.w),void 0!==t.h&&(i.place[this.gridWidth].h=t.h),e&&(i.place[this.gridWidth].pinned=!0),n[i.id]=i)}),this.updatePreset(n)},updatePreset(t){let e={};e[this.name]=t,this.$emit("widgetUpdate",this.name,e)}},mounted(){let t=this,e=t.$refs.container;t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size")),window.addEventListener("resize",()=>{t.gridWidth=parseInt(window.getComputedStyle(e).getPropertyValue("--fhc-dashboard-grid-size"))})},template:'\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    '},b={components:{BsModal:s,WidgetIcon:f},props:["widgets"],data:()=>({callbacks:{}}),methods:{getWidget(){return new Promise((t,e)=>{this.callbacks={resolve:t,reject:e},this.$refs.modal.show()})},close(){this.callbacks.reject&&this.callbacks.reject(),this.callbacks={}},pick(t){this.callbacks.resolve&&this.callbacks.resolve(t),this.callbacks={},this.$refs.modal.hide()}},template:'
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    '},y={mergeDeep(...t){const e=t=>t&&"object"==typeof t;return t.reduce((t,n)=>(Object.keys(n).forEach(i=>{const a=t[i],s=n[i];Array.isArray(a)&&Array.isArray(s)?t[i]=a.concat(...s):e(a)&&e(s)?t[i]=this.mergeDeep(a,s):t[i]=s}),t),{})}},w={getViewData:()=>({method:"get",url:"/api/frontend/v1/Cis4FhcApi/getViewData"})},k={name:"Dashboard",components:{DashboardSection:v,DashboardWidgetPicker:b},props:{dashboard:{type:String,required:!0,default:"CIS"},viewData:{type:Object,required:!0,validator:t=>t&&t.name&&t.uid&&t.timezone}},data(){return{sections:[],widgets:null,editMode:!1,viewDataInternal:this.viewData}},provide(){return{editMode:Vue.computed(()=>this.editMode),widgetsSetup:Vue.computed(()=>this.widgets),timezone:Vue.computed(()=>this.viewData.timezone)}},computed:{apiurl:()=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/dashboard"},methods:{widgetAdd(t,e){null===this.widgets&&axios.get(this.apiurl+"/Widget/getWidgetsForDashboard",{params:{db:this.dashboard}}).then(t=>{t.data.retval.forEach(t=>{t.arguments=JSON.parse(t.arguments),t.setup=JSON.parse(t.setup)}),this.widgets=t.data.retval}).catch(t=>console.error("ERROR:",t)),this.$refs.widgetpicker.getWidget().then(n=>{e.widget=n,e.id="loading_"+String((new Date).valueOf());let i={...e};i.loading=!0,this.sections.forEach(e=>{e.name==t&&e.widgets.push(i)}),axios.post(this.apiurl+"/Config/addWidgetsToUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgets:[e]}).then(n=>{let a=Object.keys(n.data.retval.data[t].widgets).pop();e.id=a,this.sections.forEach(n=>{n.name==t&&(n.widgets.splice(n.widgets.indexOf(i),1),n.widgets.push(e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}).catch(()=>{})},widgetUpdate(t,e){for(var n in e=e[t]){for(var i in this.sections)if(this.sections[i].name==t){for(var a in this.sections[i].widgets)if(this.sections[i].widgets[a].id==n){for(var s in e[n]=y.mergeDeep(this.sections[i].widgets[a],e[n]),{_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})e[n][s]&&delete e[n][s];break}break}e[n].widgetid=n}axios.post(this.apiurl+"/Config/addWidgetsToUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgets:e}).then(()=>{this.sections.forEach(n=>{n.name==t&&n.widgets.forEach((t,i)=>{e[t.id]&&(e[t.id].id=t.id,e[t.id].index=t.index,n.widgets[i]=e[t.id])})})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})},widgetRemove(t,e){axios.post(this.apiurl+"/Config/removeWidgetFromUserOverride",{db:this.dashboard,funktion_kurzbz:t,widgetid:e}).then(()=>{this.sections.forEach(n=>{n.name==t&&(n.widgets=n.widgets.filter(t=>t.id!=e))})}).catch(t=>{console.error("ERROR: ",t),alert("ERROR: "+t.response.data.retval)})}},created(){this.$p.loadCategory("dashboard"),axios.get(this.apiurl+"/Widget/getWidgetsForDashboard",{params:{db:this.dashboard}}).then(t=>{this.widgets=t.data.retval}).catch(t=>console.error("ERROR:",t)),axios.get(this.apiurl+"/Config",{params:{db:this.dashboard}}).then(t=>{for(var e in t.data.retval){let i=[],a=[];for(var n in t.data.retval[e].widgets)t.data.retval[e].widgets[n].id=n,t.data.retval[e].widgets[n].custom||t.data.retval[e].widgets[n].preset?i.push(t.data.retval[e].widgets[n]):a.push(n);this.sections.push({name:e,widgets:i}),a.forEach(t=>this.widgetRemove(e,t))}this.sections=this.sections.sort((t,e)=>"custom"==t.name?1:"custom"==e.name?-1:e.widgets.length-t.widgets.length)}).catch(t=>console.error("ERROR:",t))},async beforeMount(){if(!this.viewData.name||!this.viewData.uid){const t=await this.$api.call(w.getViewData());this.viewDataInternal=t.data}},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'global/personalGreeting\', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

    \n\t\t\n\t\t\n\t
    '},_={search(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/search",t,e)},searchAdvanced(t,e){return this.$fhcApi.post("/api/frontend/v1/searchbar/searchAdvanced",t,e)},searchdummy(t){return this.$fhcApi.post("public/js/apps/api/dummyapi.php/Search",t)}},A={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const n={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",n)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},$={getHeader(t){return this.$fhcApi.get("/api/frontend/v1/navigation/header",{navigation_page:t})},getMenu:function(t){return this.$fhcApi.get("/api/frontend/v1/navigation/menu",{navigation_page:t})}},x={saveCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/saveCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName})},removeCustomFilter(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeCustomFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},applyFilterFields(t){return this.$fhcApi.post("/api/frontend/v1/filter/applyFilterFields",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields})},addFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/addFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},removeFilterField(t){return this.$fhcApi.post("/api/frontend/v1/filter/removeFilterField",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField})},getFilterById(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId})},getFilter(t){return this.$fhcApi.get("/api/frontend/v1/filter/getFilter",{filterUniqueId:t.filterUniqueId,filterType:t.filterType})}},S={abmeldung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n},{errorHandling:"strict"})},cancel(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t.studierendenantrag_id},{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/cancelAntrag",{antrag_id:t})}},unterbrechung:{getDetails(t,e){const n="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(n)},create(t,e,n,i,a){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:i,attachment:a},{errorHandling:"strict"})},cancel(t){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/cancelAntrag",{antrag_id:t},{errorHandling:"strict"})}},wiederholung:{getDetails(t){const e="/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/"+t;return this.$fhcApi.get(e)},getLvs(t){const e="/api/frontend/v1/studstatus/wiederholung/getLvs/"+t;return this.$fhcApi.get(e)},create(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/createAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},cancel(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/cancelAntrag",{prestudent_id:t,studiensemester:e},{errorHandling:"strict"})},saveLvs(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/wiederholung/saveLvs",{forbiddenLvs:t,mandatoryLvs:e})}},leitung:{getStgs(){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getActiveStgs")},getAntraege(t,e,n){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getAntraege/"+t).then(t=>t.data)},getHistory(t){return this.$fhcApi.get("/api/frontend/v1/studstatus/leitung/getHistory/"+t)},getPrestudents(t,e){return this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/getPrestudents",{query:t},{signal:e,timeout:3e4})},approve(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveAntrag",t)},reject(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/rejectAntrag",t)},reopen(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/reopenAntrag",t)},pause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/pauseAntrag",t)},unpause(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/unpauseAntrag",t)},object(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/objectAntrag",t)},approveObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/approveObjection",t)},denyObjection(t){return Array.isArray(t)?Promise.allSettled(t.map(t=>this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t,{errorHeader:"#"+t.studierendenantrag_id}))):this.$fhcApi.post("/api/frontend/v1/studstatus/leitung/denyObjection",t)}}},z={getView:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getView/${t}`,{})},fotoSperre:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/fotoSperre/${t}`,{})},isStudent:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/isStudent",{uid:t})},isMitarbeiter:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/isMitarbeiter/${t}`,{})},getZustellAdresse:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellAdresse",{})},getZustellKontakt:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getZustellKontakt",{})},getGemeinden:function(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`,{})},getAllNationen:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Profil/getAllNationen",{})}},T={ //! API calls for profil update requests -getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},E={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:a},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+a,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let a="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,a,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:a})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const a=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},a)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},C={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},O={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},F={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},P={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},I={person:C,prestudent:O,mitarbeiter:F,anrechnung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:P,projektphase:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},M={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},L={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},N={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,a=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:a})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},R={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},B={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},j={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},U={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},V={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},H={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},q={search:_,phrasen:A,navigation:$,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:x,studstatus:S,profil:z,profilUpdate:T,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:E,notiz:I,betriebsmittel:M,checkperson:L,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:N,cms:R,lehre:B,addons:j,messages:U,vorlagen:V,addons:j,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+n.person_id)},getAllContractsNotAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+n.person_id)},getAllContractsAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+n.person_id+"/"+n.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+n.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:H,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},G={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const a=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});a.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),a.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),a.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),a.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),a.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var a="";a+="Controller name: "+e.controller+"\n",a+="Method name: "+e.method+"\n",a+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,a)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,a)),post:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,a))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const r=new s(q);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),r.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=r,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const J="error",W="retval",Z={get:function(t,e,n=null){return Z._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return Z._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(J)||!t.hasOwnProperty(W)||0!=t.error)},isError:function(t){return!Z.isSuccess(t)},hasData:function(t){return!(!Z.isSuccess(t)||!("object"==typeof t[W]&&Object.keys(t[W]).length>0||"array"==typeof t[W]&&t[W].length>0||"string"==typeof t[W]&&""!=t[W].trim()||"number"==typeof t[W]))},getData:function(t){return Z.hasData(t)?t[W]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(W)?t[W]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(J)?t[J]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let a={method:n,url:Z._generateRouterURI(t),timeout:5e3};if("get"==n?a.params=e:a.data=e,"object"==typeof i)for(var s in i)a[s]=i[s];return axios(a)}},K=document.createElement("div"),Y=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){K.parentElement.removeChild(K)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Y.use(t),Y.use(i);const Q=Y.mount(K);document.body.appendChild(K);var X={install:(t,e)=>{t.config.globalProperties.$p||t.use(ot);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);Q.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);Q.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);Q.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);Q.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);Q.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{Q.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{Q.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,a=!1){let s={severity:t,summary:e,detail:n,html:a};i||(s.life=3e3),Q.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,a=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,a)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=Z.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const a=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&a.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:a})):a.forEach(n.alertError))}if(400==t?.response?.status){let e=Z.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},tt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(X);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let a,s;Array.isArray(e)?({counter:a,msgs:s}=await i(e)):({counter:a,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const a=await t,{counter:s,msgs:r}=await i(n);return a.counter+=s,a.msgs.push("
    "+e+"
    "+r.join("")+"
    "),a},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const r=n.t("ui/n_errors",{n:a});t.config.globalProperties.$fhcAlert.alertDefault("error",r,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function a(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function r(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:a,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:a,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=r(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var a of i){let i=a.type,r=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(r=s,"form"==r))break}r&&(i=r);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(a)?n[i].push(...a):n[i].push(a)):e.push(a)}return n}void 0!==e?.errorHandling&&(i=r(e.errorHandling));const c=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});c.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),c.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var a in i)e.handler[a](i[a]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),n&&(i?i.params=n:i={params:n}),c.get(e,i)),post:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),c.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=a(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const r={};for(var c of t){const[t,e]="fulfilled"===c.status?[s.success,c.value]:[s.fail,c.reason];if(!t)return;const n=d(s,l(e));for(var u in n)r[u]?r[u][e.config.errorHeader]=n[u]:r[u]={[e.config.errorHeader]:n[u]}}for(var p in r)s.handler[p](r[p]);return t})}let{method:s,url:r,params:c,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,r,c,u):"post"==s?this.post(i,r,c,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},et={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const nt=Vue.reactive({}),it={};let at=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),st=Vue.computed(()=>at.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==at.value).LC_Time:null);const rt={user_language:at,user_locale:st,setLanguage(t){const e=Object.keys(nt);return this.config.globalProperties.$api.call(et.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{nt[t.category][t.phrase]=t.text}),at.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(it[t]||(it[t]=this.config.globalProperties.$api.call(et.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{nt[t]=e})),it[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>nt[t]?function(t,e,n){let i=nt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return nt[t]||this.loadCategory(t),i.value}};var ot={install(t,e){t.config.globalProperties.$fhcApi||t.use(G),t.config.globalProperties.$api||t.use(tt),t.config.globalProperties.$p={t:rt.t,loadCategory:e=>rt.loadCategory.call(t,e),setLanguage:e=>rt.setLanguage.call(t,e),user_language:at,user_locale:st,t_ref:rt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},lt=Object.freeze({__proto__:null,default:ot,user_locale:st});let dt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);const ct=FHC_JS_DATA_STORAGE_OBJECT.theme.modes,ut=t=>{if(!t)return;for(const t of ct)document.documentElement.classList.remove(t);dt.value=t,document.documentElement.classList.add(t),document.body.setAttribute("data-bs-theme",t);let e=document.querySelector('link[href*="primevue/resources/themes"]');"dark"==t?e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-light-blue","bootstrap4-dark-blue"):("light"==t||e.attributes.href.value.includes("bootstrap4-dark-blue"))&&(e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-dark-blue","bootstrap4-light-blue")),localStorage.setItem("theme",t)};var pt={install:(t,e)=>{document.documentElement.classList.add(dt.value),(()=>{let t=localStorage.getItem("theme");t&&ct.includes(t)||(t=ct[0],localStorage.setItem("theme",t)),ut(t)})(),t.config.globalProperties.$theme={theme_name:dt,theme_modes:ct,switchTheme:t=>{ut(t)}}}};const ht=t=>{const e=t.toString(16);return 1===e.length?"0"+e:e};function mt(t){return(299*parseInt(t.substring(1,3),16)+587*parseInt(t.substring(3,5),16)+114*parseInt(t.substring(5,7),16))/1e3>=128?"black":"white"}var gt={mounted(t,e){const n=window.getComputedStyle(t).backgroundColor;let i=new RegExp(/^rgba?\s*\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,?\s*([0-9]+.?[0-9]?)?\s*\)/),a=n.match(i);if(a){a.length<3&&console.error("Invalid RGB color format");let e=parseInt(a[1],10),n=parseInt(a[2],10),i=parseInt(a[3],10),s=`#${ht(e)}${ht(n)}${ht(i)}`;t.style.color=mt(s)}else t.style.color=mt(n)}};const ft={lehreinheit:{id:"lehreinheit_id",dragIcon:"fa-solid fa-chalkboard-user",extras:["stundenblockung"]},vevent:{id:"uid",dragIcon:"fa-solid fa-calendar",extras:["dtstart","dtend","summary"]},person:{id:"person_id",dragIcon:"fa-solid fa-user"},student:{id:"student_uid",dragIcon:"fa-solid fa-user-graduate"},prestudent:{id:"prestudent_id",dragIcon:"fa-solid fa-user-graduate text-muted"}},vt=Object.keys(ft);function bt(t){if(!t)return!1;if(Array.isArray(t))return t.every(bt);if(!t.type)return!1;if("-collection"==t.type.substr(-11)){if(!Object.prototype.hasOwnProperty.call(t,"values"))return!1;if(!vt.includes(t.type.substr(0,t.type.length-11)))return!1}else{if(!Object.prototype.hasOwnProperty.call(t,"id"))return!1;if(!vt.includes(t.type))return!1;if(ft[t.type].extras&&!ft[t.type].extras.every(e=>Object.prototype.hasOwnProperty.call(t,e)))return!1}return!0}function yt(t,e,n){let i=null;try{if(i=wt(t,n),!i)return null;if(!n&&Array.isArray(i)){if(i=i.filter(bt),!i.length)return null}else if(!bt(i))return null;if(e&&e.length)if(Array.isArray(i)){if(n&&!i.every(t=>e.includes(t.type)))return null;if(!n&&(i=i.filter(t=>e.includes(t.type)),!i.length))return null}else if(!e.includes(i.type))return null}catch(t){return null}return Array.isArray(i)&&1==i.length?i.find(Boolean):i}function wt(t,e){const n=[];for(const i of t.dataTransfer.types){if("application/fhc-"!=i.substr(0,16)){if(e)return null;continue}let a=i.substr(16),s=!1;if("-collection"==a.substr(-11)&&(a=a.substr(0,a.length-11),s=!0),!vt.includes(a)){if(e)return null;continue}let r=JSON.parse(t.dataTransfer.getData(i));s?n.push(...r.values):n.push(r)}return n.length?1==n.length?n[0]:n:null}var kt={...Object.keys(ft).reduce((t,e)=>(t["TYPE_"+e.toUpperCase()]=e,t),{}),isValidDragObject:bt,getValidTransferData:yt,isValidTransferData:function(t,e,n){return!!yt(t,e,n)},getTransferData:wt,convertToValidDragObject:function t(e,n){if(Array.isArray(e)){const i=e.map(t).filter(Boolean);if(!i.length)return;if(n&&i.length!=e.length)return;const a=i.reduce((t,e)=>(t[e.type]||(t[e.type]=[]),t[e.type].push(e),t),{});return Object.entries(a).map(([t,e])=>e.length>1?{type:t+"-collection",values:e}:e[0])}if(Object.prototype.hasOwnProperty.call(e,"type")&&bt(e))return e;const i=Object.entries(ft).find(([,t])=>!!Object.prototype.hasOwnProperty.call(e,t.id)&&!(t.extras&&!t.extras.every(t=>Object.prototype.hasOwnProperty.call(e,t))));if(!i)return;const[a,s]=i,r={};return r.type=a,r.id=e[s.id],s.extras&&s.extras.forEach(t=>r[t]=e[t]),r},setTransferData:function t(e,n,i=!1){if(i){const t=(Array.isArray(n)?n:[n]).map(t=>{const e=document.createElement("i"),n=document.createElement("span"),i=document.createElement("span");i.className="btn btn-outline-dark bg-light",n.className="small",ft[t.type]?(e.className=ft[t.type].dragIcon||"fa-solid fa-question",n.textContent=t.id):"-collection"==t.type.substr(-11)&&ft[t.type.substr(0,t.type.length-11)]?(i.style.boxShadow="3px 3px var(--bs-btn-border-color)",e.className=ft[t.type.substr(0,t.type.length-11)].dragIcon||"fa-solid fa-question",n.textContent="x"+t.values.length):(e.className="fa-solid fa-question",n.textContent=t.id||""),i.append(e);const a=document.createElement("div");return a.className="d-flex flex-column align-items-center gap-2 small",a.append(i,n),a}),i=document.createElement("div");i.className="d-flex flex-row gap-2 small",i.append(...t),document.body.append(i),e.dataTransfer.setDragImage(i,-25,0),requestAnimationFrame(()=>{document.body.removeChild(i)})}if(Array.isArray(n))return n.forEach(n=>t(e,n));e.dataTransfer.setData("application/fhc-"+n.type,JSON.stringify(n))},eventHasTypes:function(t,e,n){return e&&e.length||(e=vt),e=e.map(t=>"application/fhc-"+t),!![...t.dataTransfer.types].length&&(n?[...t.dataTransfer.types].every(t=>e.includes(t)):e.some(e=>[...t.dataTransfer.types].includes(e)))},bindDragEnterLeave:function(t,e,n){let i=!1,a=!0;function s(n){i=!1,a=!0,window.addEventListener("dragenter",o,!0),window.addEventListener("dragleave",l,!0),window.addEventListener("drop",d,!0),e(n),t.removeEventListener("dragenter",s)}function r(e,i){window.removeEventListener("dragenter",o,!0),window.removeEventListener("dragleave",l,!0),window.removeEventListener("drop",d,!0),n(e,i),t.addEventListener("dragenter",s)}function o(e){a=!1,t==e.target||t.contains(e.target)?i=!0:r(e)}function l(e){if(t==e.target||t.contains(e.target)){if(i)return void(i=!1)}else if(a)return void(a=!1);r(e)}function d(t){r(t,!0)}return t.addEventListener("dragenter",s),()=>{t.removeEventListener("dragenter",s)}}},_t={mounted(t,e,n){if("draggable"==e.arg)t.addEventListener("update-my-value",t=>{t.preventDefault(),e.value=t.detail.item}),t.addEventListener("dragstart",n=>{t.dispatchEvent(new CustomEvent("calendar-dragstart",{cancelable:!0,bubbles:!0,detail:{item:e.value,x:n.offsetX/t.offsetWidth,y:n.offsetY/t.offsetHeight,originalEvent:n}}))}),t.addEventListener("dragend",n=>{t.dispatchEvent(new CustomEvent("calendar-dragend",{cancelable:!0,bubbles:!0,detail:{item:e.value,originalEvent:n}}))});else if("dropcage"==e.arg){let e=null;t.addEventListener("dragover",n=>{if(!e)return e=t.getBoundingClientRect(),t.dispatchEvent(new CustomEvent("calendar-dragenter",{detail:{originalEvent:n}}))}),window.addEventListener("dragleave",n=>{if(!e)return;let i;return i=void 0===n.clientX?{x:n.pageX+document.documentElement.scrollLeft,y:n.pageY+document.documentElement.scrollTop}:{x:n.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,y:n.clientY+document.body.scrollTop+document.documentElement.scrollTop},i.x>e.left+e.width-1||i.xe.top+e.height-1||i.y{if(e)return e=null,t.dispatchEvent(new CustomEvent("calendar-dragleave",{detail:{originalEvent:n}}))})}else"dropzone"==e.arg&&t.addEventListener(e.modifiers.once?"dragenter":"dragover",n=>{const i=e.value instanceof Function?e.value(n):e.value,a=i.timestamp?i:{timestamp:i};t.dispatchEvent(new CustomEvent("calendar-dragchange",{cancelable:!0,bubbles:!0,detail:a}))})},updated(t,e,n,i){"draggable"==e.arg&&t.dispatchEvent(new CustomEvent("update-my-value",{cancelable:!0,detail:{item:e.value}}))}},At={name:"CalendarDragAndDrop",directives:{CalDnd:_t},provide(){return{events:Vue.computed(()=>this.correctedEvents),backgrounds:Vue.computed(()=>this.backgrounds),dropAllowed:Vue.computed(()=>this.dragging&&this.dropAllowed)}},inject:{mode:"mode",dropableEvents:"dropableEvents"},props:{events:Array,backgrounds:Array},emits:["drop"],data:()=>({dragging:!1,allowed:!1,draggedInternalEvent:null,draggedExternalEvent:null,targetTimestamp:0,targetGridEnds:null,dropAllowed:!1,shadowPreview:!1}),computed:{correctedEvents(){if(this.dragging){if(this.draggedInternalEvent){const t=this.events.findIndex(t=>t.id==this.draggedInternalEvent.id);return this.previewEvent&&!this.shadowPreview?this.events.toSpliced(t,1,this.previewEvent):this.events.toSpliced(t,1)}if(this.previewEvent&&!this.shadowPreview)return[...this.events,this.previewEvent]}return this.events},correctedBackgrounds(){return this.dragging&&this.shadowPreview?[...this.backgrounds,{start:new Date(this.targetTimestamp),class:"shadow-preview"}]:this.backgrounds},previewEvent(){if(!this.dragging||!this.dropAllowed)return null;if(!this.targetTimestamp)return null;const t=this.draggedInternalEvent||this.draggedExternalEvent;if(!t)return null;let e=t.end-t.start;return this.targetGridEnds&&(e=this.targetGridEnds.find(t=>t>=this.targetTimestamp+e)-this.targetTimestamp),{orig:t.orig,start:this.targetTimestamp,end:this.targetTimestamp+e}}},methods:{onDragstart(t){const e=kt.convertToTransferData(t.detail.item.orig);kt.isValidDragObject(e)&&(kt.setTransferData(t.detail.originalEvent,e),this.draggedInternalEvent=t.detail.item)},onDragend(){this.draggedInternalEvent=null,this.dragging=!1},onDragenter(t){if(this.dragging=!0,this.draggedInternalEvent)this.dropAllowed=this.dropableEvents(this.draggedInternalEvent,this.mode);else{const e=kt.getValidTransferData(t.detail.originalEvent);this.draggedExternalEvent=e?{id:e.id,type:e.type,start:e.isostart?luxon.DateTime.fromISO(e.isostart).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),end:e.isoend?luxon.DateTime.fromISO(e.isoend).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),orig:e}:null,this.dropAllowed=this.dropableEvents(e,this.mode)}},onDragleave(){this.dragging=!1},onDragchange(t){this.targetTimestamp=t.detail.timestamp,this.targetGridEnds=t.detail.ends||null},onDrop(t){this.dragging&&this.dropAllowed&&(this.$emit("drop",t,this.previewEvent.start,this.previewEvent.end),this.dropAllowed=!1,this.dragging=!1)}},template:'\n\t\n\t\t\n\t\n\t'},$t={name:"CalendarHeader",components:{DatePicker:{name:"CalendarHeaderDatepicker",components:{VueDatePicker:VueDatePicker},inject:["locale","timezone"],props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},listLength:{type:Number,default:7}},emits:["update:date"],computed:{convertedDate(){return this.date.setZone(this.timezone).setZone("local",{keepLocalTime:!0})},current(){switch(this.mode){case"month":return{month:this.convertedDate.month-1,year:this.convertedDate.year};case"list":return[this.convertedDate.startOf("day").ts,this.convertedDate.startOf("day").plus({days:this.listLength}).ts-1];case"week":return[this.convertedDate.startOf("week",{useLocaleWeeks:!0}).ts,this.convertedDate.endOf("week",{useLocaleWeeks:!0}).ts];case"day":return this.convertedDate;default:return null}},title(){switch(this.mode){case"month":return this.date.toLocaleString({month:"long",year:"numeric"});case"week":var t=this.date.localWeekYear,e=this.date.toFormat("nn");return this.$p.t("calendar/year_kw",{year:t,week:e});case"list":return this.date.toLocaleString(luxon.DateTime.DATE_FULL)+"-"+this.date.plus({days:this.listLength-1}).toLocaleString(luxon.DateTime.DATE_FULL);case"day":return this.date.toLocaleString(luxon.DateTime.DATE_FULL);default:return"View not Supported"}},weekStart(){return luxon.Info.getStartOfWeek(this.date)%7}},methods:{update(t){let e;switch(this.mode){case"month":t.month++,e=luxon.DateTime.fromObject(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"list":case"week":e=luxon.DateTime.fromJSDate(t[0]).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"day":e=luxon.DateTime.fromJSDate(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;default:return}this.$emit("update:date",e)},weekNumbers(t){return luxon.DateTime.fromJSDate(t,{locale:this.locale}).localWeekNumber}},template:'\n\t title"\n\t\t:month-picker="mode == \'month\'"\n\t\t:week-picker="mode == \'week\'"\n\t\t:range="mode == \'list\' ? { autoRange: listLength - 1 } : false"\n\t\t:text-input="mode == \'day\'"\n\t\t:week-start="weekStart"\n\t\t:week-numbers="{ type: weekNumbers }"\n\t\t:clearable="false"\n\t\t:enable-time-picker="false"\n\t\t:config="{ keepActionRow: mode != \'month\' }"\n\t\t:action-row="{ showSelect: false, showCancel: false, showNow: mode != \'month\', showPreview: false }"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale="locale"\n\t\t:now-button-label="$p.t(\'calendar/today\')"\n\t\t:week-num-name="$p.t(\'calendar/kw\')"\n\t/>\n\t'}},props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},modeOptions:{type:Object,default:{}},btnMonth:Boolean,btnWeek:Boolean,btnDay:Boolean,btnList:Boolean},emits:["next","prev","click:mode","update:date","update:mode"],data:()=>({open:!1}),methods:{clickMode(t,e){this.$emit("click:mode",t),t.defaultPrevented||this.$emit("update:mode",e)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t'},xt={name:"CalendarSlider",inject:{time:{from:"sliderTime",default:".3s"}},emits:["slid"],data:()=>({target:0,extrasAfter:0,extrasBefore:0,running:!1,promiseResolve:null}),computed:{itemsAfter(){return[...Array(this.extrasAfter)].map((t,e)=>1+e)},itemsBefore(){return[...Array(this.extrasBefore)].map((t,e)=>e-this.extrasBefore)},styleSlider(){const t={position:"absolute",top:0,left:0,width:"100%",height:"100%"};return this.running&&(t.left=100*-this.target+"%",t.transition="left "+this.time+" ease-in-out"),t},styleBefore(){return{position:"absolute",top:0,height:"100%",display:"flex",right:"100%",width:100*this.extrasBefore+"%"}},styleAfter(){return{position:"absolute",top:0,height:"100%",display:"flex",left:"100%",width:100*this.extrasAfter+"%"}}},methods:{prevPage(){return this.slidePages(-1)},nextPage(){return this.slidePages(1)},slidePages(t){return new Promise(e=>{this.promiseResolve=e,this.running=!0;const n=this.target+t;n>0?this.extrasAftern&&(this.extrasBefore=-n),this.target=n})},endSlide(){this.promiseResolve&&(this.promiseResolve(this.target),this.promiseResolve=null),this.$emit("slid",this.target),this.running=!1,this.target=0,this.extrasAfter=this.extrasBefore=0}},template:'\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t'};const St=[];function zt(t,e,n){const i=St.findIndex(e=>e.el==t);i>=0&&(t.removeEventListener("click",St[i].listener),St.splice(i,1));const a=t=>{t.preventDefault(),t.stopPropagation();const i=new CustomEvent("cal-click",{cancelable:!0,bubbles:!0,detail:{source:e,value:n}});t.target.dispatchEvent(i)};St.push({el:t,listener:a}),t.addEventListener("click",a)}var Tt={mounted(t,e,n){"container"==e.arg?t.addEventListener("cal-click",t=>{const n=new Event("click:"+t.detail.source,{cancelable:!0});if(e.instance.$emit("click:"+t.detail.source,n,t.detail.value),!n.defaultPrevented){const e=new CustomEvent("cal-click-default",{cancelable:!0,bubbles:!0,detail:t.detail});t.target.dispatchEvent(e)}}):zt(t,e.arg,e.value)},updated(t,e,n,i){"container"!=e.arg&&zt(t,e.arg,e.value)}},Dt={name:"CalendarBase",components:{BaseDraganddrop:At,BaseHeader:$t,BaseSlider:xt,BsModal:s},directives:{CalClick:Tt},provide(){return{locale:Vue.computed(()=>this.locale),timezone:Vue.computed(()=>this.timezone),timeGrid:Vue.computed(()=>this.timeGrid),draggableEvents:Vue.computed(()=>this.draggableEvents?Array.isArray(this.draggableEvents)?t=>this.draggableEvents.includes(t.type):this.draggableEvents instanceof Function?this.draggableEvents:()=>!0:()=>!1),dropableEvents:Vue.computed(()=>this.onDrop?Array.isArray(this.dropableEvents)?t=>this.dropableEvents.includes(t.type):this.dropableEvents instanceof Function?this.dropableEvents:()=>!0:()=>!1),hasDragoverFunc:Vue.computed(()=>this.onDragover),mode:Vue.computed(()=>this.mode)}},props:{locale:{type:String,default:"de"},timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:t=>luxon.DateTime.now().setZone(t.timezone).startOf("day")},modes:{type:Object,required:!0,default:{}},mode:String,modeOptions:Object,events:{type:Array,default:[]},backgrounds:{type:Array,default:[]},showBtns:Boolean,btnMonth:{type:Boolean,default:void 0},btnWeek:{type:Boolean,default:void 0},btnDay:{type:Boolean,default:void 0},btnList:{type:Boolean,default:void 0},timeGrid:Array,draggableEvents:[Boolean,Array,Function],dropableEvents:[Boolean,Array,Function],onDragover:Function,onDrop:Function},emits:["click:next","click:prev","click:mode","click:event","click:day","click:week","update:date","update:mode","update:range","drop"],data:()=>({internalView:null,internalDate:null,modalEvent:null}),computed:{convertedEvents(){return this.events.map(t=>({id:t.type+t[t.type+"_id"],type:t.type,start:luxon.DateTime.fromISO(t.isostart).setZone(this.timezone),end:luxon.DateTime.fromISO(t.isoend).setZone(this.timezone),orig:t}))},convertedBackgrounds(){return this.backgrounds.map(t=>{const e={...t};return e.start&&(Number.isInteger(e.start)?e.start=luxon.DateTime.fromMillis(e.start,{zone:this.timezone,locale:this.locale}):e.start instanceof Date?e.start=luxon.DateTime.fromJSDate(e.start,{zone:this.timezone,locale:this.locale}):("string"==typeof e.start||e.start instanceof String)&&(e.start=luxon.DateTime.fromISO(e.start,{zone:this.timezone,locale:this.locale}))),e.end&&(Number.isInteger(e.end)?e.end=luxon.DateTime.fromMillis(e.end,{zone:this.timezone,locale:this.locale}):e.end instanceof Date?e.end=luxon.DateTime.fromJSDate(e.end,{zone:this.timezone,locale:this.locale}):("string"==typeof e.end||e.end instanceof String)&&(e.end=luxon.DateTime.fromISO(e.end,{zone:this.timezone,locale:this.locale}))),e})},sDate(){return this.date instanceof luxon.DateTime?this.date:luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone)},cDate:{get(){return(this.internalDate?this.internalDate:this.sDate).setLocale(this.locale)},set(t){this.internalDate=t,this.$emit("update:date",t,this.cMode)}},sMode(){let t=this.mode;return t&&(t=t.toLowerCase()),t&&this.modes[t]||(t=Object.keys(this.modes).find(Boolean)),t||""},cMode:{get(){return this.internalView?this.internalView:this.sMode},set(t){this.internalView=t,this.$emit("update:mode",t,this.cDate)}}},watch:{sDate(t,e){this.sDate.isValid&&!this.sDate.hasSame(this.internalDate,"day")&&(this.internalDate=this.sDate)},sMode(){this.sMode&&(this.internalView=this.sMode)}},methods:{clickPrev(){const t=new Event("click:prev",{cancelable:!0});this.$emit("click:prev",t),t.defaultPrevented||this.$refs.mode.prevPage()},clickNext(){const t=new Event("click:next",{cancelable:!0});this.$emit("click:next",t),t.defaultPrevented||this.$refs.mode.nextPage()},handleClickDefaults(t){switch(t.detail.source){case"day":"day"!=this.cMode&&this.modes.day&&(t.stopPropagation(),this.cDate=t.detail.value,this.cMode="day");break;case"week":"week"!=this.cMode&&this.modes.week&&(t.stopPropagation(),this.cDate=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.cDate.zoneName,locale:this.cDate.locale}),this.cMode="week")}},onDropItem(t,e,n){this.$emit("drop",t,e,n)},showEventModal(t){this.modalEvent=t,this.$refs.modal.show()},hideEventModal(){this.modalEvent&&(this.modalEvent.closeFn=void 0),this.$refs.modal.hide(),this.modalEvent=null},onModalHidden(){this.modalEvent.closeFn&&this.modalEvent.closeFn()}},beforeUnmount(){this.hideEventModal()},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'},Et={getRoomInfo:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/getRoomplan",params:{ort_kurzbz:t,start_date:e,end_date:n}}),getLvPlan:(t,e,n)=>({method:"get",url:"/api/frontend/v1/LvPlan/getLvPlan",params:{start_date:t,end_date:e,lv_id:n}}),eventsPersonal:(t,e)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsPersonal",params:{start_date:t,end_date:e}}),eventsLv:(t,e,n)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsLv",params:{lv_id:t,start_date:e,end_date:n}}),getStunden:()=>({method:"get",url:"/api/frontend/v1/LvPlan/Stunden"}),getOrtReservierungen:(t,e,n)=>({method:"post",url:`/api/frontend/v1/LvPlan/getReservierungen/${t}`,params:{start_date:e,end_date:n}}),getLvPlanReservierungen:(t,e)=>({method:"post",url:"/api/frontend/v1/LvPlan/getReservierungen",params:{start_date:t,end_date:e}}),getLehreinheitStudiensemester:t=>({method:"get",url:`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`}),studiensemesterDateInterval:t=>({method:"get",url:`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`}),LvPlanEvents:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/LvPlanEvents",params:{start_date:t,end_date:e,lv_id:n}}),getLv:t=>({method:"get",url:"/api/frontend/v1/LvPlan/getLv/"+t})};var Ct={name:"GridLineEvent",directives:{CalDnd:_t,CalClick:Tt},inject:{draggableEvents:"draggableEvents",mode:"mode"},props:{event:{type:Object,required:!0,validator:t=>t.start&&t.end&&t.orig}},computed:{isHeaderOrFooter(){return["header","footer"].includes(this.event.orig)},draggable(){return!this.isHeaderOrFooter&&this.draggableEvents(this.event.orig,this.mode)},classes(){const t=[];return this.isHeaderOrFooter?t.push("event-"+this.event.orig):(this.event.startsHere&&t.push("event-begin"),this.event.endsHere&&t.push("event-end")),t}},template:'\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t'},Ot={name:"CalendarGrid",components:{GridLine:{name:"GridLine",components:{LineEvent:Ct,LineBackground:{name:"GridLineBackground",inject:{flipAxis:"flipAxis"},props:{start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},background:{type:Object,required:!0,validator:t=>!(!t.start&&!t.end)&&((!t.start||t.start instanceof luxon.DateTime)&&(!t.end||t.end instanceof luxon.DateTime))}},computed:{styles(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.style;const t=(this.end.ts-this.start.ts)/100;let e={};return this.background.startsHere&&(e[this.flipAxis?"left":"top"]=this.background.start.diff(this.start)/t+"%"),this.background.endsHere&&(e[this.flipAxis?"right":"bottom"]=this.end.diff(this.background.end)/t+"%"),this.background.style?[this.background.style,e]:e},classes(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.class;const t=[];return this.background.class&&t.push(this.background.class),this.background.startsHere&&t.push("bg-begin"),this.background.endsHere&&t.push("bg-end"),t}},template:'\n\t\n\t\t{{ background.label }}\n\t\n\t'}},inject:{axisRow:"axisRow"},props:{date:{type:luxon.DateTime,required:!0},start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},events:{type:Array,default:[]},backgrounds:{type:Array,default:[]}},computed:{eventsWithRowInfo(){const t=[];return this.events.forEach(e=>{const n=[1,-1];e.startsHere&&(n[0]="t_"+e.start.diff(this.date).toMillis()),e.endsHere&&(n[1]="t_"+e.end.diff(this.date).toMillis()),t.push({...e,rows:n})}),t}},template:'\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t'},GridLineEvent:Ct},directives:{CalDnd:_t},inject:{originalEvents:"events",originalBackgrounds:"backgrounds",dropAllowed:"dropAllowed"},provide(){return{flipAxis:Vue.computed(()=>this.flipAxis),axisRow:Vue.computed(()=>this.axisRow)}},props:{axisMain:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.DateTime)},axisParts:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.Duration||Number.isInteger(t)||(t.start instanceof luxon.Duration||Number.isInteger(t.start))&&(t.end instanceof luxon.Duration||Number.isInteger(t.end)))},flipAxis:Boolean,allDayEvents:Boolean,axisMainCollapsible:Boolean,snapToGrid:Boolean},data:()=>({dragging:!1,resizeObserver:null,mutationObserver:null,userScroll:!0}),computed:{axisRow(){return this.flipAxis?"column":"row"},axisCol(){return this.flipAxis?"row":"column"},axisPartsWithBreaks(){return this.axisParts.reduce((t,e,n)=>{const i=e.start||e,a=e.end;if(t.length){const e=t.pop();Array.isArray(e)?t.push({start:e[0],end:i,index:e[1]}):e!=i&&t.push({start:e,end:i})}return a?(t.push({start:i,end:a,index:n}),t.push(a)):t.push([i,n]),t},[]).slice(0,-1)},axisPartsSave(){return this.axisParts[this.axisParts.length-1].end?this.axisParts:this.axisParts.slice(0,-1)},start(){return this.axisPartsWithBreaks[0].start},end(){return this.axisPartsWithBreaks[this.axisPartsWithBreaks.length-1].end},ends(){const t=[],e=this.axisPartsWithBreaks.filter(t=>void 0!==t.index).map(t=>t.end);for(var n of this.axisMain)for(var i of e)t.push(n.plus(i));return t},axisMainBorders(){return this.axisMain.reduce((t,e)=>t.concat([e.plus(this.start),e.plus(this.end)]),[])},eventsAllDay(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>t.orig.allDayEvent)):[]},eventsNormal(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>!t.orig.allDayEvent)):this.events},events(){return this.mapIntoMainAxis(this.originalEvents)},backgrounds(){return this.mapIntoMainAxis(this.originalBackgrounds)},hasValidEvents(){return this.events.find(t=>t.length)},styleGridCols(){let t="repeat("+this.axisMain.length+", 1fr)";return this.axisMainCollapsible&&this.hasValidEvents&&(t=this.events.map(t=>t.length?"1fr":"var(--fhc-calendar-axis-collapsible, .5fr)").join(" ")),t},styleGridRows(){const t={};return this.axisPartsWithBreaks.forEach(e=>{let n=e.start.toMillis();t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("ps_"+e.index),n=e.end.toMillis(),t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("pe_"+e.index)}),this.eventsNormal.forEach((e,n)=>{let i=this.axisMain[n];e.forEach(e=>{if(e.startsHere||e.endsHere){if(e.startsHere){let n=e.start.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}if(e.endsHere){let n=e.end.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}}})}),Object.keys(t).sort((t,e)=>parseInt(t)-parseInt(e)).map((e,n,i)=>{let a=i[n+1];return a?"["+t[e].join(" ")+"] "+(a-e)+"fr":(t[e].push("end"),"["+t[e].join(" ")+"]")}).join(" ")}},methods:{mapIntoMainAxis(t){const e=Array.from({length:this.axisMain.length},()=>Array());return t.forEach(t=>{const n=t.start||this.axisMainBorders[0].plus(-1),i=t.end||this.axisMainBorders[this.axisMainBorders.length-1].plus(1);for(var a=0;as){const o=n>=s,l=i<=r;e[a].push({...t,startsHere:o,endsHere:l})}}}),e},getPageTop(t){let e=t.offsetTop;return t.offsetParent&&(e+=this.getPageTop(t.offsetParent)),e},getPageLeft(t){let e=t.offsetLeft;return t.offsetParent&&(e+=this.getPageLeft(t.offsetParent)),e},getTimestampFromMouse(t,e){let n,i;return this.flipAxis?(n=t.pageX-this.getPageLeft(this.$refs.body)+this.$refs.main.scrollLeft,i=n/this.$refs.body.offsetWidth):(n=t.pageY-this.getPageTop(this.$refs.body)+this.$refs.main.scrollTop,i=n/this.$refs.body.offsetHeight),e+this.start+Math.floor((this.end-this.start)*i)},enableAutoScroll(){this.resizeObserver||(this.resizeObserver=new ResizeObserver(this.scrollToEarliestEvent)),this.resizeObserver.observe(this.$refs.body),this.mutationObserver||(this.mutationObserver=new MutationObserver(t=>{t.some(t=>t.addedNodes.length&&[].some.call(t.addedNodes,t=>t.matches&&t.matches(".fhc-calendar-base-grid-line-event")))&&this.scrollToEarliestEvent()})),this.mutationObserver.observe(this.$refs.body,{subtree:!0,childList:!0}),this.scrollToEarliestEvent()},disableAutoScroll(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=null},scrollToEarliestEvent(){const t=this.$refs.scroller.querySelectorAll(".fhc-calendar-base-grid-line-event");let e=[0,null];for(var n of t.values()){const t=n.offsetTop;(!e[1]||t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Ft={name:"LabelDay",directives:{CalClick:Tt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleFull(){return this.date.toLocaleString({day:"numeric",month:"long",year:"numeric"})},titleLong(){return this.date.toLocaleString({day:"2-digit",month:"2-digit",year:"numeric"})},titleShort(){return this.date.toLocaleString({day:"numeric",month:"numeric"})},titleNarrow(){return this.date.toLocaleString({day:"numeric"})}},template:'\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},Pt={name:"LabelDow",directives:{CalClick:Tt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleLong(){return this.date.toLocaleString({weekday:"long"})},titleShort(){return this.date.toLocaleString({weekday:"short"})},titleNarrow(){return this.date.toLocaleString({weekday:"narrow"})}},template:'\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},It={name:"LabelTime",props:{part:{type:[luxon.Duration,Number,Object],required:!0,validator(t){if(t instanceof Object){if(t instanceof luxon.Duration)return!0;let e=!0,n=!0;return t.start&&(e=t.start instanceof luxon.Duration||Number.isInteger(t.start)),t.end&&(n=t.end instanceof luxon.Duration||Number.isInteger(t.end)),e&&n}return!0}}},computed:{sanitizedTimestamps(){return this.part.start||this.part.end?this.part:{start:this.part}},start(){return this.sanitizedTimestamps.start?this.formatTime(this.sanitizedTimestamps.start):null},end(){return this.sanitizedTimestamps.end?this.formatTime(this.sanitizedTimestamps.end):null}},methods:{formatTime:t=>t.toISOTime({suppressSeconds:!0})},template:'\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t'};var Mt={name:"ModeDay",components:{BaseSlider:xt,DayView:{name:"DayView",components:{CalendarGrid:Ot,LabelDay:Ft,LabelDow:Pt,LabelTime:It},inject:{timeGrid:"timeGrid",originalEvents:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},emptyMessage:String,emptyMessageDetails:String},emits:["requestModalOpen","requestModalClose"],data:()=>({chosenEvent:null,gridMainRef:null}),computed:{axisMain(){return[this.day.startOf("day")]},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))},events(){return this.originalEvents.filter(t=>t.startthis.day).sort((t,e)=>t.start.ts-e.start.ts).map(t=>t.orig)},currentEvent(){if(this.chosenEvent&&this.events.find(t=>t==this.chosenEvent))return this.chosenEvent;let t=null;return this.events&&(t=this.events.find(Boolean)),t&&"loading"==t.type?null:t},isToday(){return this.day.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},watch:{compact(){this.compact?this.chosenEvent&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}):this.$emit("requestModalClose")}},methods:{handleClickDefaults(t){"event"==t.detail.source&&(this.chosenEvent=t.detail.value,this.compact&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}))}},setup(){const t=Vue.ref(null),{compact:e}=function(t,e){const n=Vue.ref(!1),i=Vue.ref(!1),a=Vue.ref(!1),s=Vue.computed(()=>Vue.isRef(t)?t.value&&t.value.$el?t.value.$el:t.value:t),r=Vue.computed(()=>{const t=Vue.isRef(e)?e.value:e;return Number.isInteger(t)?[["compact",t]]:Array.isArray(t)?t.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]):Object.entries(t).sort((t,e)=>t[1]-e[1])});function o(){if(void 0===s.value.offsetWidth)return;const t=r.value.find(t=>t[1]>s.value.offsetWidth);i.value=t?t[0]:"full",n.value=i.value==r.value[0][0]}const l=new ResizeObserver(()=>{s.value&&o()});function d(){s.value&&(o(),l.observe(s.value),a.value=!0)}function c(){a.value&&l.disconnect()}return Vue.onMounted(d),Vue.onUnmounted(c),Vue.watchEffect(()=>{s.value&&(c(),d())}),{compact:n,size:i}}(t,750);return{container:t,compact:e}},mounted(){this.gridMainRef=this.$refs.grid.$refs.main},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen","requestModalClose"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("day"),e=this.focusDate.endOf("day");return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({days:this.rangeOffset}):e=e.plus({days:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("day").diff(this.focusDate.startOf("day"),"days").days,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({days:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({days:t});return{...this.$attrs,day:e}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Lt={name:"ModeWeek",components:{BaseSlider:xt,WeekView:{name:"WeekView",components:{CalendarGrid:Ot,LabelDay:Ft,LabelDow:Pt,LabelTime:It},inject:{timeGrid:"timeGrid",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},collapseEmptyDays:Boolean},computed:{start(){return this.day.startOf("week",{useLocaleWeeks:!0})},axisMain(){return Array.from({length:7},(t,e)=>this.start.plus({days:e}))},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))}},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("week",{useLocaleWeeks:!0}),e=this.focusDate.endOf("week",{useLocaleWeeks:!0});return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({weeks:this.rangeOffset}):e=e.plus({weeks:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("week",{useLocaleWeeks:!0}).diff(this.focusDate.startOf("week",{useLocaleWeeks:!0}),"weeks").weeks,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({weeks:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({weeks:t});return{...this.$attrs,day:e}},handleClickDefaults(t){switch(t.detail.source){case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Nt={name:"ModeMonth",components:{BaseSlider:xt,MonthView:{name:"MonthView",components:{CalendarGrid:Ot,LabelWeek:{name:"LabelWeek",directives:{CalClick:Tt},props:{date:{type:luxon.DateTime,required:!0}},computed:{weeks(){const t=this.date.startOf("week",{useLocaleWeeks:!0}),e=this.date.endOf("week",{useLocaleWeeks:!0}),n=[{number:t.localWeekNumber,year:t.localWeekYear},{number:e.localWeekNumber,year:e.localWeekYear}];return n[0].number==n[1].number&&n.pop(),n}},template:'\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t'},LabelDow:Pt,LabelDay:Ft},provide(){return{events:Vue.computed(()=>{const t=this.events.map(t=>{const e=t.start.startOf("day"),n=t.end.plus({days:1}).startOf("day");return{...t,start:e,end:n}});for(var e=5;e>-1;e--)for(var n=6;n>-1;n--){const i=this.axisMain[e].plus(this.axisParts[n]);t.unshift({start:i,end:i.plus({days:1}),orig:"header"})}return t})}},inject:{events:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0}},computed:{axisMain(){const t=this.day.startOf("month").startOf("week",{useLocaleWeeks:!0});return Array.from({length:6},(e,n)=>t.plus({weeks:n}))},axisParts:()=>Array.from({length:8},(t,e)=>luxon.Duration.fromObject({days:e}))},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("month").startOf("week",{useLocaleWeeks:!0}),e=t.plus({days:41}).endOf("day");if(0!=this.rangeOffset){const n=this.focusDate.plus({months:this.rangeOffset}).startOf("month").startOf("week",{useLocaleWeeks:!0});this.rangeOffset<0?t=n:e=n.plus({days:41}).endOf("day")}return luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("month").diff(this.focusDate.startOf("month"),"months").months,this.rangeOffset&&(this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({months:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range)},viewAttrs(t){return{day:this.focusDate.plus({months:t})}},handleClickDefaults(t){switch(t.detail.source){case"week":let e=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.currentDate.zoneName,locale:this.currentDate.locale});this.focusDate.hasSame(e.startOf("week",{useLocaleWeeks:!0}),"month")?this.focusDate.hasSame(e.endOf("week",{useLocaleWeeks:!0}),"month")||this.$emit("update:currentDate",e.endOf("week",{useLocaleWeeks:!0})):this.$emit("update:currentDate",e.startOf("week",{useLocaleWeeks:!0}));break;case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range)},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Rt={name:"CalendarLvPlan",components:{FhcCalendar:Dt},inject:["renderers"],props:{timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:luxon.DateTime.local()},mode:{type:String,default:"Week"},getPromiseFunc:{type:Function,required:!0}},emits:["update:date","update:mode","update:range"],data(){return{modes:{day:Vue.markRaw(Mt),week:Vue.markRaw(Lt),month:Vue.markRaw(Nt)},modeOptions:{day:{emptyMessage:Vue.computed(()=>this.$p.t("lehre/noLvFound")),emptyMessageDetails:Vue.computed(()=>this.$p.t("lehre/noLvFound"))},week:{collapseEmptyDays:!1}},teachingunits:null}},computed:{backgrounds(){let t=luxon.DateTime.now().setZone(this.timezone);return"Month"==this.mode?[{class:"background-past",end:t.startOf("day")}]:[{class:"background-past",end:t,label:t.startOf("minute").toISOTime({suppressSeconds:!0,includeOffset:!1})}]}},methods:{eventStyle(t){if(t.farbe)return"--event-bg:#"+t.farbe},updateRange(t){this.rangeInterval=t,this.$emit("update:range",t)}},setup(t,e){const n=Vue.ref(null),{events:i,lv:a}=function(t,e){let n=0;const i=Vue.ref([]),a=Vue.ref([]),s=Vue.computed(()=>i.value.concat(a.value)),r=Vue.ref(null),o=[],l=(t,e)=>Array.isArray(t)?e.concat(t):(e.push(t),e),d=(t,i)=>{let s=[];if(o.length)if(o[o.length-1]+1==t.ts)o[o.length-1]=i.ts;else if(o[o.length-1]i.ts)o.unshift(t.ts,i.ts);else{let e=o.findIndex(e=>e>=t.ts);if(e%2){if(o[e]>=i.ts)return[];let n=e==o.length-1;if(n||o[e+1]>i.ts){let a=o[e]+1;t=t.plus(a-t.ts),n||o[e+1]!=i.ts+1?o[e]=i.ts:o.splice(e,2)}else{if(o[e+2]=i.ts)return[];let n=o[e+1]+1;s=l(d(t.plus(n-t.ts),i),s)}else{if(o[e+1]=i.ts?s:(a.value.push({loading_id:n++,type:"loading",isostart:t.toISODate()+"T"+t.toISOTime(),isoend:i.toISODate()+"T"+i.toISOTime()}),l(e(t,i),s))};return Vue.watchEffect(()=>{const e=Vue.toValue(t);if(!(e instanceof luxon.Interval))return;const n=d(e.start,e.end);Promise.allSettled(n).then(t=>{t.forEach(t=>{"fulfilled"===t.status&&"success"===t.value.meta.status&&(t.value.meta.lv&&(r.value=t.value.meta.lv),i.value=i.value.concat(t.value.data),a.value=[])})})}),{events:s,lv:r}}(n,t.getPromiseFunc);return Vue.watch(a,t=>{e.emit("update:lv",t)}),{rangeInterval:n,events:i,lv:a}},created(){this.$api.call(Et.getStunden()).then(t=>this.teachingunits=t.data.map(t=>({id:t.stunde,start:t.beginn,end:t.ende})))},template:'\n\t\n\t\t\n\t\t\n\t'},Bt={getAuthUID:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthUID"}),getAuthInfo:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthInfo"})};var jt={name:"LvPlanLehrveranstaltung",components:{FhcCalendar:Rt},props:{viewData:Object,propsViewData:Object},data:()=>({lv:null}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},currentLv(){return isNaN(parseInt(this.propsViewData?.lv_id))?null:this.propsViewData.lv_id},lvTitle(){return null===this.currentLv?"":this.lv?"English"===this.$p.user_language.value?this.lv.bezeichnung_english:this.lv.bezeichnung:""}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"LvPlan",params:{mode:n,focus_date:i,lv_id:this.currentLv}})},getPromiseFunc(t,e){return[this.$api.call(Et.eventsLv(this.propsViewData.lv_id,t.toISODate(),e.toISODate())),this.$api.call(Et.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){null!==this.currentLv&&this.$api.call(Et.getLv(this.propsViewData?.lv_id)).then(t=>{this.lv=t.data})},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t(\'lehre/noLvFound\') }}\n\t\t
    \n\t\t\n\t
    '};var Ut={name:"LvPlanPersonal",components:{FhcCalendar:Rt},props:{viewData:Object,propsViewData:Object},data:()=>({studiensemester_kurzbz:null,studiensemester_start:null,studiensemester_ende:null,uid:null,isMitarbeiter:!1,isStudent:!1}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},downloadLinks(){if(!this.studiensemester_start||!this.studiensemester_ende||!this.uid)return!1;let t=!1;if(t=this.isStudent?"student":t,t=this.isMitarbeiter?"lektor":t,!1===t)return;const e={zone:this.viewData.timezone},n=luxon.DateTime.fromISO(this.studiensemester_start,e).toUnixInteger(),i=luxon.DateTime.fromISO(this.studiensemester_ende,e).toUnixInteger(),a=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/lvplan/stpl_kalender.php?type="+t+"&pers_uid="+this.uid+"&begin="+n+"&ende="+i;return[{title:"excel",icon:"fa-solid fa-file-excel",link:a+"&format=excel"},{title:"csv",icon:"fa-solid fa-file-csv",link:a+"&format=csv"},{title:"ical1",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=1&target=ical"},{title:"ical2",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=2&target=ical"}]}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"MyLvPlan",params:{mode:n,focus_date:i}})},updateRange(t){this.$api.call(Et.studiensemesterDateInterval(t.end.startOf("week").toISODate())).then(t=>{this.studiensemester_kurzbz=t.data.studiensemester_kurzbz,this.studiensemester_start=t.data.start,this.studiensemester_ende=t.data.ende})},getPromiseFunc(t,e){return[this.$api.call(Et.eventsPersonal(t.toISODate(),e.toISODate())),this.$api.call(Et.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){this.$api.call(Bt.getAuthInfo()).then(t=>{this.uid=t.data.uid,this.isMitarbeiter=t.data.isMitarbeiter,this.isStudent=t.data.isStudent})},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t'},Vt={components:{BsModal:s},mixins:[s],props:{pruefungenData:null|Array,bezeichnung:String,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this)(null,t)},template:'\n\t\t\n\t\t\n\t'},Ht={getStudentenMail:t=>({method:"get",url:"/api/frontend/v1/Lehre/lvStudentenMail",params:{lehreinheit_id:t}}),getLvInfo:(t,e)=>({method:"get",url:`/api/frontend/v1/Lehre/LV/${t}/${e}`}),getStudentPruefungen:t=>({method:"get",url:`/api/frontend/v1/Lehre/Pruefungen/${t}`})};const qt={};var Gt={props:{studien_semester:String,lehrveranstaltung_id:Number},data:()=>({bezeichnung:null,studiengang_kuerzel:null,semester:null,orgform_kurzbz:null,sprache:null,ects:null,incoming:null,result:!0,info:null}),computed:{lektorNamesLinks(){let t={};return this.info.lektoren.forEach(e=>{let n=((e.titelpre||"")+" "+(e.vorname||"")+" "+(e.nachname||"")+" "+(e.titelpost||"")).trim();t[n]=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/Profil/View/${e.uid}`}),t},lektorNames(){return this.info.lektoren.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim())},lvLeitung(){return this.info.lvLeitung&&this.info.lvLeitung.length?this.info.lvLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},oe(){return this.info.oe.organisationseinheittyp?this.info.oe.organisationseinheittyp+" "+this.info.oe.bezeichnung:""},oeLeitung(){return this.info.oeLeitung&&this.info.oeLeitung.length?this.info.oeLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):["-"]},koordinator(){return this.info.koordinator&&this.info.koordinator.length?this.info.koordinator.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},currentLang(){return this.info?this.info.lastLang?this.info.lastLang:this.info.lvinfo?this.info.lvinfoDefaultLang&&this.info.lvinfo[this.info.lvinfoDefaultLang]?this.info.lvinfoDefaultLang:Object.keys(this.info.lvinfo).shift():null:null}},created(){this.$api.call(Ht.getLvInfo(this.studien_semester,this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{Object.assign(this,{bezeichnung:t.bezeichnung,studiengang_kuerzel:t.studiengang_kuerzel,semester:t.semester,orgform_kurzbz:t.orgform_kurzbz,sprache:t.sprache,ects:t.ects,incoming:t.incoming??"-"})}),qt[this.lehrveranstaltung_id]?this.info=qt[this.lehrveranstaltung_id]:axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Info/"+this.studien_semester+"/"+this.lehrveranstaltung_id).then(t=>{this.info=qt[this.lehrveranstaltung_id]=t.data.retval||[]}).catch(()=>this.info={})},template:'\n\t\t\t

    {{$p.t(\'lvinfo/lehrveranstaltungsinformationen\')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t(\'lehre/lehrveranstaltung\')}}{{bezeichnung}}
    {{$p.t(\'lehre/studiengang\')}}{{studiengang_kuerzel}}
    {{$p.t(\'lehre/semester\')}}{{semester}}
    {{$p.t(\'lehre/studiensemester\')}}{{studien_semester}}
    {{$p.t(\'lehre/organisationsform\')}}{{orgform_kurzbz}}
    {{$p.t(\'lehre/lehrbeauftragter\')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t(\'lehre/lvleitung\')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t(\'global/sprache\')}}{{sprache}}
    {{$p.t(\'lehre/ects\')}}{{ects}}
    {{$p.t(\'lehre/incomingplaetze\')}}{{incoming}}
    {{$p.t(\'lehre/organisationseinheit\')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t(\'global/leitung\')}}: {{oeLeitung.join(\', \')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    '};const Jt={},Wt={};function Zt(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}function Kt(t){for(;Wt[t].length;){var e=Wt[t].pop();e[0].value=Yt(t,e[1],e[2]),Vue.triggerRef(e[0])}}function Yt(t,e,n){let i=Jt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}const Qt={t_ref(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input"),"";if(!Jt[t]){var i="";if(void 0!==window.FHC_JS_PHRASES_STORAGE_OBJECT){var a=Zt(FHC_JS_PHRASES_STORAGE_OBJECT,t);void 0!==a[e]&&(i=a[e])}if(!Jt[t]||0===Object.keys(Jt[t]).length){Jt[t]=void 0;let a=Vue.ref(i);return function(t,e,n,i){if(Wt[t])return Wt[t].push([e,n,i]),void(Jt[t]&&Kt(t));Wt[t]=[[e,n,i]],axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Phrasen/loadModule/"+t).then(e=>{e.data.retval?Jt[t]=Zt(e.data.retval,t):Jt[t]={},Kt(t)}).catch(t=>console.error(t))}(t,a,e,n),a}}var s=Yt(t,e,n);return Vue.ref(s)},t(t,e,n){return Vue.unref(this.t_ref(t,e,n))}};var Xt={data:()=>({p:Qt})},te={props:{menu:{type:Array,default:null},containerStyles:Array,rowStyles:Array,hasLvPlanEintraege:{required:!1,default:!0,type:Boolean}},data:()=>({}),methods:{c4_disabled:function(t){return!this.c4_link(t)&&!t.c4_moodle_links?.length||("addon_fhtw_menu_lvplan_lva"==t.id&&!this.hasLvPlanEintraege||null)},c4_target:function(t){return t.c4_moodle_links?.length>0?null:t.c4_target??null},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?null:t.c4_link??null:null,getMenuName(t){return t.phrase?this.$p.t(t.phrase):t.name}},template:'\n\t
    {{$p.t(\'lehre\',\'lehrveranstaltungsUnavailable\')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},ee={getLvMenu:(t,e)=>({method:"get",url:`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`})},ne={props:{event:{type:Object,required:!0,default:null},studiensemester:{type:String,required:!1,default:null},titel:{type:String,required:!1,default:null},preselectedMenu:{type:Object,required:!1,default:null}},data:()=>({result:!1,menu:[],isMenuSelected:!1,hasLvPlanEintraege:!0,lvEvaluierungMessage:""}),mixins:[s],components:{BsModal:s,LvMenu:te},inject:["studium_studiensemester"],methods:{hiddenModal:function(){this.isMenuSelected=!1},showModal:function(){if(this.preselectedMenu?this.isMenuSelected=!0:this.$api.call(ee.getLvMenu(this.event.lehrveranstaltung_id,this.studiensemester??this.event.studiensemester_kurzbz)).then(t=>{t.data&&(this.menu=t.data)}),this.studium_studiensemester&&this.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{this.lvEvaluierungMessage=t.message}),this.studiensemester&&this.event)return this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{Array.isArray(t)&&t.length>0?this.hasLvPlanEintraege=!0:this.hasLvPlanEintraege=!1})}},mounted(){this.modal=this.$refs.modalContainer},beforeUnmount(){this.$refs.modalContainer.hide()},template:'\n \n\n\t\t\n \n \n \n\n \n '},ie={components:{MylvSemesterStudiengang:{components:{MylvSemesterStudiengangLv:{components:{LvUebersicht:ne},mixins:[Xt],inject:["studien_semester"],props:{lehrveranstaltung_id:Number,bezeichnung:String,bezeichnung_eng:String,module:String,farbe:String,lvinfo:Boolean,benotung:Boolean,lvnote:String,lvnotebez:Array,znote:String,znotebez:Array,studiengang_kuerzel:String,semester:[String,Number],orgform_kurzbz:String,sprache:String,ects:String,incoming:Number,positiv:Boolean,note_index:String},data:()=>({pruefungenData:null,info:null,menu:null,preselectedMenuItem:null}),computed:{gradeColor(){if(null!=this.positiv)return this.positiv?"var(--fhc-success)":"var(--fhc-danger)"},is_organisatorische_einheit(){return"organisatorische_einheit"==this.menu},emptyMenu(){return!this.menu||!Array.isArray(this.menu)||Array.isArray(this.menu)&&0==this.menu.length},bodyStyle:()=>({}),grade(){const t="English"===this.$p.user_language.value?1:0;return this.benotung&&this.znotebez?.length?this.znotebez[t]:this.benotung&&this.lvnotebez?.length?this.lvnotebez[t]:null},LvHasPruefungenInformation(){return this.pruefungenData&&this.pruefungenData.length>0}},methods:{fetchMenu(t=this.lehrveranstaltung_id,e=this.studien_semester){return this.$api.call(ee.getLvMenu(t,e)).then(t=>{this.menu=t.data}).catch(t=>{this.$fhcAlert.handleSystemError(t),this.menu=[]})},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?"#":t.c4_link??null:null,openLvOption(t){"core_menu_mailanstudierende"==t.id||"core_menu_digitale_anwesenheitslisten"==t.id?window.location.href=t.c4_link:(this.preselectedMenuItem=t,Vue.nextTick(()=>{this.$refs.lvUebersicht.show()}))},openPruefungen(){this.LvHasPruefungenInformation&&Vt.popup({pruefungenData:this.pruefungenData,bezeichnung:this.bezeichnung})},openInfos(){this.info||(this.info=!0,Gt.popup({lehrveranstaltung_id:this.lehrveranstaltung_id,bezeichnung:this.bezeichnung,bezeichnung_eng:this.bezeichnung_eng,studiengang_kuerzel:this.studiengang_kuerzel,semester:this.semester,studien_semester:this.studien_semester,orgform_kurzbz:this.orgform_kurzbz,sprache:this.sprache,ects:this.ects,incoming:this.incoming}).then(()=>this.info=!1).catch(()=>this.info=!1))}},watch:{studien_semester(t){this.fetchMenu(this.lehrveranstaltung_id,t)}},created(){this.$api.call(Ht.getStudentPruefungen(this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{this.pruefungenData=t})},mounted(){this.fetchMenu(this.lehrveranstaltung_id,this.studien_semester)},template:'
    \n\t\t\n\n\t\t
    \n\t\t\t\x3c!-- {{module}} if the module of the lv is important then query the module from the api endpoint for LV--\x3e\n\t\t\t
    {{ $p.t(\'lehre/organisationseinheit\') }}:
    \n\t\t\t
    {{$p.user_language.value === \'English\' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t
    '}},mixins:[Xt],props:{bezeichnung:String,kuerzel:String,semester:[String,Number],lvs:Array,sg_bezeichnung_eng:String},computed:{lehrveranstaltungen(){return[...new Map(this.lvs.map(t=>[t.lehrveranstaltung_id,t])).values()]}},methods:{note:t=>t.benotung&&(t.znote||t.lvnote)||null},template:'
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === \'English\' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t(\'lehre/semester\')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '}},provide(){return{studien_semester:Vue.computed(()=>this.semester)}},props:{semester:[String,Number],lvs:Array},computed:{ready(){return null!==this.lvs},studiengaenge(){return[...new Map(this.lvs.map(t=>[t.studiengang_kz+"#"+t.semester,{studiengang_kz:t.studiengang_kz,bezeichnung:t.sg_bezeichnung,sg_bezeichnung_eng:t.sg_bezeichnung_eng,kuerzel:t.studiengang_kuerzel,semester:t.semester}])).values()].sort((t,e)=>t.bezeichnung.toLowerCase()==e.bezeichnung.toLowerCase()?t.semester>e.semester:t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase())}},methods:{lvsForStudiengang(t){return this.lvs.filter(e=>e.studiengang_kz==t.studiengang_kz&&e.semester==t.semester)}},template:'
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    '},ae={components:{MylvSemester:ie},mixins:[Xt],data:()=>({firstLoad:!0,studiensemester:null,lvs:{},currentSemester:null}),computed:{ready(){return null!==this.studiensemester&&(!this.firstLoad||null!==this.current.lvs)},current(){return null===this.currentSemester?{semester:null,lvs:[]}:(void 0===this.lvs[this.currentSemester]&&(this.lvs[this.currentSemester]={semester:this.currentSemester,lvs:null},axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Lvs/"+this.currentSemester).then(t=>{this.lvs[this.currentSemester].lvs=t.data.retval||[],this.firstLoad=!1})),this.lvs[this.currentSemester])},nearestSem(){let t=Date.now(),e=null,n=0;return this.studiensemester.forEach(i=>{let a=new Date(i.start),s=new Date(i.ende);if(t>=a&&t<=s)return e=i.studiensemester_kurzbz,void(n=0);let r=Math.min(Math.abs(t-a),Math.abs(t-s));(null===e||r{this.studiensemester=t.data.retval||[];const e=this.$route.params.studiensemester;e&&this.studiensemester.filter(t=>t.studiensemester_kurzbz==e).length?this.currentSemester=e:this.currentSemester=this.nearestSem})},beforeRouteUpdate(t,e,n){t.params.studiensemester&&this.studiensemester.filter(e=>e.studiensemester_kurzbz==t.params.studiensemester).length&&t.params.studiensemester!=this.currentSemester&&(this.currentSemester=t.params.studiensemester),n()},template:'\n\n\t

    {{$p.t(\'lehre/myLV\')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\n\t
    \n\t
    \n\t\t\n\t
    '};const se={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},re="Filter Component New Filter";var oe={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=re);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:re})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},le={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const de={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},ce={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var ue={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let a=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?a.push({icon:"fa-solid "+de[n],label:i===e?ce[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+de[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+de[n],label:ce[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=ce[n]),void 0===i.icon&&(i.icon=de[n]),a.push(i)):(void 0===i.label&&(i.label=e),a.push(i)))}t=a}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+de[e],label:ce[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const pe=new WeakMap;var he={mounted(t,e){let n=!1;pe.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",pe.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",pe.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,a=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(a=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),a>0?s.setWidth(a):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var me={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},ge=0;const fe={components:{CoreFetchCmpt:se,FilterConfig:oe,FilterColumns:le,TableDownload:ue},directives:{collapseAutoClose:he},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(me.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(me.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(me.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(me.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(me.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(me.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(me.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var ve={props:{data:Object,title:{type:String}},data:()=>({}),created(){},template:'\n\t'},be={props:{data:{type:String}},data:()=>({}),template:"\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    "},ye={props:{data:{type:String},title:{type:String,required:!0},mobile:{type:Boolean,default:!1}},methods:{hideCollapse:function(){this.collapseOpen=!1},showCollapse:function(){this.collapseOpen=!0}},data:()=>({collapseOpen:!1}),template:'\n
    \n \n \n
    '},we={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
    \n \n \x3c!-- column 1 in the address row --\x3e\n
    \n \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}
    \n {{data.strasse}} \n
    \n
    \n \n \x3c!-- column 2 in the address row --\x3e\n
    \n
    \n
    {{$p.t(\'global\',\'typ\')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'person\',\'zustelladresse\')}}
    \n
    \n \n
    \n
    \n
    \n
    \n'},ke={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},_e={data:()=>({}),props:{title:{type:String,required:!0},data:{type:Array}},template:'\n
    \n
    \n {{title}}\n
    \n
    \n \x3c!-- HIER SIND DIE EMAILS --\x3e\n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    '},Ae={data:()=>({}),props:{data:{type:Object},title:{type:String}},inject:{studiengang_kz:{from:"studiengang_kz",default:!1}},computed:{getLinkGruppeListe(){return!1===this.studiengang_kz?"":this.data.gruppe?.value&&this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value+"&grp="+this.data.gruppe.value:""},getLinkVerbandListe(){return!1===this.studiengang_kz?"":this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value:""},getLinkSemesterListe(){return!1===this.studiengang_kz?"":this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value:""}},created(){},template:'\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\x3c!-- print Telefon link --\x3e\n\t\t\t\t\t\t{{entry.value ?? \'-\'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print semester link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print verband link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print gruppe link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- else print information --\x3e\n\t\t\t\t\t\t{{ entry.value ?? \'-\'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '},$e={profilViewData(t){let e="/api/frontend/v1/Profil/profilViewData";return t&&(e+=`/${t}`),{method:"get",url:e}},fotoSperre:t=>({method:"get",url:`/api/frontend/v1/Profil/fotoSperre/${t}`}),isStudent:t=>({method:"get",url:"/api/frontend/v1/Profil/isStudent",params:{uid:t}}),isMitarbeiter:t=>({method:"get",url:`/api/frontend/v1/Profil/isMitarbeiter/${t}`}),getZustellAdresse:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellAdresse"}),getZustellKontakt:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellKontakt"}),getGemeinden:(t,e)=>({method:"get",url:`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`}),getAllNationen:()=>({method:"get",url:"/api/frontend/v1/Profil/getAllNationen"})},xe={components:{DmsItem:{emits:["delete"],props:{modelValue:{type:[File,Object],required:!0}},data:()=>({preview:""}),watch:{modelValue(t){"application/x.fhc-dms+json"==t.type&&t.text().then(t=>{const e=JSON.parse(t);this.preview=e.preview||""})}},template:'\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • '}},emits:["update:modelValue"],props:{modelValue:{type:[FileList,Array],required:!0},multiple:Boolean,id:String,name:String,inputClass:[String,Array,Object],noList:Boolean,accept:{type:String,default:""},disabled:{type:Boolean,default:!1}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),addFiles(t){if(!this.multiple)return this.$emit("update:modelValue",t.target.files);const e=new DataTransfer,n=[];for(var i of this.modelValue)e.items.add(i),n.push(this.stringifyFile(i));for(var i of t.target.files)n.indexOf(this.stringifyFile(i))<0&&e.items.add(i);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],n=new DataTransfer;for(var i of this.modelValue)i!==e&&n.items.add(i);this.$emit("update:modelValue",n.files)}},watch:{modelValue(t){if(!t)return;if(t instanceof FileList){if(!this.$refs.upload)return;return this.$refs.upload.files=t}const e=new DataTransfer;for(var n of t)if(n instanceof File)e.items.add(n);else{const t=new File([JSON.stringify(n)],n.name,{type:"application/x.fhc-dms+json"});e.items.add(t)}this.$emit("update:modelValue",e.files)}},template:'\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},Se={ +getStatus:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getStatus",{})},getTopic:function(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/getTopic",{})},acceptProfilRequest:function({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:i}){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/denyProfilRequest",{profil_update_id:t,uid:e,topic:n,status_message:i})},insertFile:function(t,e=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,t)},getProfilRequestFiles:function(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`,{})},selectProfilRequest:function(t=null,e=null){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/selectProfilRequest",{...t?{uid:t}:{},...e?{id:e}:{}})},insertProfilRequest:function(t,e,n=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/insertProfilRequest",{topic:t,payload:e,...n?{fileID:n}:{}})},updateProfilRequest:function(t,e,n,i=null){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/updateProfilRequest",{topic:t,payload:e,ID:n,...i?{fileID:i}:{}})},deleteProfilRequest:function(t){return this.$fhcApi.post(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",{requestID:t})}},D={getRoomInfo(t,e,n){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:n})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,n){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:n})},getLvPlanReservierungen(t,e){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getReservierungen",{start_date:t,end_date:e})},getLehreinheitStudiensemester(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`,{})},studiensemesterDateInterval(t){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`,{})},LvPlanEvents(t,e,n){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:n})}},E={verband:{get(){return this.$fhcApi.get("api/frontend/v1/stv/verband")},favorites:{get(){return this.$fhcApi.get("api/frontend/v1/stv/favorites")},set(t){return this.$fhcApi.post("api/frontend/v1/stv/favorites/set",{favorites:t})}}},students:{uid(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},prestudent(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},person(t,e){let n="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(n)},verband(t){return this.$fhcApi.getUri("api/frontend/v1/stv/students/"+t)}},filter:{getStg(){return this.$fhcApi.get("api/frontend/v1/stv/filter/getStg")},setStg(t){return this.$fhcApi.post("api/frontend/v1/stv/filter/setStg",{studiengang_kz:t})}},konto:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/konto/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id),only_open:e.filter,studiengang_kz:e.studiengang_kz_intern?e.stg_kz:""}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},checkDoubles(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/checkDoubles",e,{confirmErrorHandler:t=>!0})},insert(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/insert",e)},counter(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/counter",t)},edit(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/konto/update",e)},delete(t){return this.$fhcApi.post("api/frontend/v1/stv/konto/delete",{buchungsnr:t})},getBuchungstypen(){return this.$fhcApi.get("api/frontend/v1/stv/konto/getBuchungstypen")}},group:{getGruppen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+n.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+n.id)},addNewAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,n)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,n)},deleteAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteAddress/",{address_id:t})},getPlaces(t){return this.$fhcApi.get("api/frontend/v1/stv/address/getPlaces/"+t)},getFirmen(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getFirmen/"+t)},getNations(){return this.$fhcApi.get("api/frontend/v1/stv/address/getNations/")},getAdressentypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressentypen/")},getBankverbindung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+n.id)},addNewBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,n)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,n)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+n.id)},addNewContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,n)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,n)},deleteContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteContact/",{kontakt_id:t})},getStandorteByFirma(t){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getStandorteByFirma/"+t)},getKontakttypen(){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakttypen/")}},prestudent:{get(t,e){return this.$fhcApi.post("api/frontend/v1/stv/prestudent/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e))},updatePrestudent(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,n)},getBezeichnungZGV(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungZGV/")},getBezeichnungMZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungMZgv/")},getBezeichnungDZgv(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBezeichnungDZgv/")},getStgs(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStgs/")},getAusbildung(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAusbildung/")},getAufmerksamdurch(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getAufmerksamdurch/")},getBerufstaetigkeit(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBerufstaetigkeit/")},getTypenStg(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getTypenStg/")},getBisstandort(){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getBisstandort/")},getHistoryPrestudent(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+n.id)},getMaxSem(t){return this.$fhcApi.post("api/frontend/v1/stv/status/getMaxSemester/",{studiengang_kzs:t})},advanceStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+n.id)}},status:{insertStatus(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,n)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:i,ausbildungssemester:a},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+i+"/"+a,s)},getStudienplaene(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudienplaene/"+t)},getStudiengang(t){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getStudiengang/"+t)},getStatusgruende(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusgruende/")},getStati(){return this.$fhcApi.get("api/frontend/v1/stv/lists/getStati/")},addStudent(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/addStudent/"+t,e,{errorHeader:t})},changeStatus(t,e){return this.$fhcApi.post("api/frontend/v1/stv/status/changeStatus/"+t,e,{errorHeader:t})},getStatusarray(){return this.$fhcApi.get("api/frontend/v1/stv/status/getStatusarray/")}},details:{get(t,e){let n="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(n)},save(t,e,n,i){let a="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,a,i)}},exam:{getPruefungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+n.id)},loadPruefung(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/loadPruefung/"+t)},getTypenPruefungen(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getTypenPruefungen")},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/getAllLehreinheiten/",t)},getLvsByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsByStudent/"+t)},getLvsandLesByStudent(t,e){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsandLesByStudent/"+t+"/"+e)},getLvsAndMas(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getLvsAndMas/"+t)},getMitarbeiterLv(t){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getMitarbeiterLv/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getNoten")},checkZeugnisnoteLv(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/",t)},addPruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/insertPruefung/",e)},updatePruefung(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,n)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+n.id)},addNewAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/",e)},loadAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/",{id:t})},updateAbschlusspruefung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/",e)},deleteAbschlusspruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/",{id:t})},getTypenAbschlusspruefung(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/")},getTypenAntritte(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/")},getBeurteilungen(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/")},getAkadGrade(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getAkadGrade/",{studiengang_kz:t})},getTypStudiengang(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/",{studiengang_kz:t})},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/"+t)},getPruefer(t){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getPruefer/"+t)},getNoten(){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getNoten/")},checkForExistingExams(t){return this.$fhcApi.post("api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/",{uids:t})}},grades:{list(){return this.$fhcApi.get("api/frontend/v1/stv/grades/list")},getCertificate(t,e){let n="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getTeacherProposal(t,e){let n="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},getRepeaterGrades(t,e){let n="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(n=n+"/"+encodeURIComponent(e)),this.$fhcApi.get(n)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i,lehrveranstaltung_bezeichnung:a}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:i},{errorHeader:a})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:i})},copyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id:t,lv_bezeichnung:e}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate",{studierendenantrag_lehrveranstaltung_id:t},{errorHeader:e})},getGradeFromPoints(t,e,n,i){const a=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},a)}},mobility:{getMobilitaeten(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+n.id)},getProgramsMobility(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getProgramsMobility/")},addNewMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/insertMobility/",e)},loadMobility(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/loadMobility/"+t)},updateMobility(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/mobility/updateMobility/",e)},deleteMobility(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobility/"+t)},getLVList(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLVList/"+t)},getAllLehreinheiten(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/getAllLehreinheiten/",t)},getLvsandLesByStudent(t){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getLvsandLesByStudent/"+t)},getPurposes(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+n.id)},getSupports(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+n.id)},getListPurposes(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListPurposes/")},getListSupports(){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getListSupports/")},deleteMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilityPurpose/"+t.bisio_id,t)},addMobilityPurpose(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilityPurpose/"+t.bisio_id,t)},deleteMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/deleteMobilitySupport/"+t.bisio_id,t)},addMobilitySupport(t){return this.$fhcApi.post("api/frontend/v1/stv/mobility/addMobilitySupport/"+t.bisio_id,t)}},archiv:{tabulatorConfig(t,e){return t.ajaxURL="api/frontend/v1/stv/archiv/get",t.ajaxParams=()=>({person_id:e.modelValue.person_id||e.modelValue.map(t=>t.person_id)}),t.ajaxRequestFunc=(t,e,n)=>this.$fhcApi.post(t,n,e),t.ajaxResponse=(t,e,n)=>n.data,t},getArchivVorlagen(){return this.$fhcApi.post("api/frontend/v1/stv/archiv/getArchivVorlagen")},archive(t){return this.$fhcApi.post("api/frontend/v1/documents/archive",t)},archiveSigned(t){return this.$fhcApi.post("api/frontend/v1/documents/archiveSigned",t)},update(t){return this.$fhcApi.post("api/frontend/v1/stv/archiv/update",t)},delete({akte_id:t,studiengang_kz:e}){return this.$fhcApi.post("api/frontend/v1/stv/archiv/delete",{akte_id:t,studiengang_kz:e})}},documents:{getDocumentsUnaccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+n.id+"/"+n.studiengang_kz)},getDocumentsAccepted(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+n.id+"/"+n.studiengang_kz)},deleteZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},createZuordnung(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/createZuordnung/"+t.prestudent_id+"/"+t.dokument_kurzbz)},loadAkte(t){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/loadAkte/"+t)},getDoktypen(){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDoktypen/")},updateFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/updateAkte/"+t,e)},deleteFile(t){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/deleteAkte/"+t)},uploadFile(t,e){return this.$fhcApi.post("api/frontend/v1/stv/dokumente/uploadDokument/"+t,e)}},exemptions:{getAnrechnungen(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+n.id)},getLehrveranstaltungen(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/"+t)},getBegruendungen(){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getBegruendungen/")},getLvsKompatibel(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLvsKompatibel/"+t)},getLektoren(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getLektoren/"+t)},addNewAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/insertAnrechnung/",e)},loadAnrechnung(t){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/loadAnrechnung/"+t)},editAnrechnung(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/anrechnungen/updateAnrechnung/",e)},deleteAnrechnung(t){return this.$fhcApi.post("api/frontend/v1/stv/anrechnungen/deleteAnrechnung/"+t)}},jointstudies:{getStudies(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+n.id)},getTypenMobility(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/")},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/")},getStudyprograms(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/")},getListPartner(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/")},getStatiPrestudent(){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/")},loadStudy(t){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/loadStudie/"+t)},insertStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/insertStudie/",e)},updateStudy(t,e){return this.$fhcApi.post(t,"api/frontend/v1/stv/GemeinsameStudien/updateStudie/",e)},deleteStudy(t){return this.$fhcApi.post("api/frontend/v1/stv/GemeinsameStudien/deleteStudie/"+t)}},courselist:{getCourselist(t,e,n){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+n.student_uid+"/"+n.start_date+"/"+n.end_date+"/"+n.group_consecutiveHours+"/"+n.dbStundenplanTable)},getStudiensemester(){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStudiensemester/")}},configStudent(){return this.$fhcApi.get("api/frontend/v1/stv/config/student")},configStudents(){return this.$fhcApi.get("api/frontend/v1/stv/config/students")}},C={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,n)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,n)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getMitarbeiter/"+t)},isBerechtigt(t,e){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/isBerechtigt/")}},O={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizPrestudent/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/"+t)}},F={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/"+t)}},P={getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/NotizProjekt/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/"+t)}},I={person:C,prestudent:O,mitarbeiter:F,anrechnung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizAnrechnung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/"+t)}},bestellung:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizBestellung/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizBestellung/getMitarbeiter/"+t)}},lehreinheit:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizLehreinheit/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/"+t)}},projekt:P,projektphase:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjektphase/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/"+t)}},projekttask:{getNotizen(t,e,n){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getNotizen/"+n.id+"/"+n.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getUid/")},addNewNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/addNewNotiz/"+t,e)},loadNotiz(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadNotiz/",{notiz_id:t})},loadDokumente(t){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/loadDokumente/",{notiz_id:t})},deleteNotiz(t,e,n){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/deleteNotiz/",{notiz_id:t,type_id:e,id:n})},updateNotiz(t,e){return this.$fhcApi.post("api/frontend/v1/notiz/notizProjekttask/updateNotiz/"+t,e)},getMitarbeiter(t){return this.$fhcApi.get("api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/"+t)}}},M={person:{getAllBetriebsmittel(t,e,n){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+n.type+"/"+n.id)},addNewBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,n)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,n)},deleteBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/"+t)},getTypenBetriebsmittel(){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/")},loadInventarliste(t){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/"+t)}}},L={updatePersonUnrulyStatus(t,e){try{const n={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,n,null)}catch(t){throw t}},filterPerson(t,e=""){try{const n=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(n,t)}catch(t){throw t}}},N={getContentID(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/ContentID",{ort_kurzbz:t})},getRooms(t,e,n,i,a=0){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getRooms",{datum:t,von:e,bis:n,typ:i,personenanzahl:a})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},R={content(t,e=null,n=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,n){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:n})},news(t){return this.$fhcApi.get("/api/frontend/v1/Cms/news",{limit:t})},getNewsRowCount:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getNewsRowCount",{})},getNewsExtra:function(){return this.$fhcApi.get("/api/frontend/v1/Cms/getStudiengangInfoForNews",{})}},B={getStudentenMail(t){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Lehre/lvStudentenMail",{lehreinheit_id:t})},getLvInfo(t,e){return this.$fhcApi.get(`/api/frontend/v1/Lehre/LV/${t}/${e}`,{})},getStudentPruefungen(t){return this.$fhcApi.get(`/api/frontend/v1/Lehre/Pruefungen/${t}`,{})}},j={getLvMenu(t,e){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`,{})}},U={person:{getMessages(t,e,n){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+n.id+"/"+n.type+"/"+n.size+"/"+n.page)},getVorlagen(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getVorlagen/")},getMsgVarsLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/")},getMessageVarsPerson(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessageVarsPerson/"+t.id+"/"+t.type_id)},getMsgVarsPrestudent(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMsgVarsPrestudent/"+t.id+"/"+t.type_id)},getPersonId(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getPersonId/"+t.id+"/"+t.type_id)},getUid(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getUid/"+t.id+"/"+t.type_id)},getDataVorlage(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getDataVorlage/"+t)},getNameOfDefaultRecipient(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getNameOfDefaultRecipient/"+t.id+"/"+t.type_id)},getPreviewText(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/getPreviewText/"+t.id+"/"+t.type_id,e)},getReplyData(t){return this.$fhcApi.get("api/frontend/v1/messages/messages/getReplyData/"+t)},sendMessageFromModalContext(t,e,n){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,n)},sendMessage(t,e){return this.$fhcApi.post("api/frontend/v1/messages/messages/sendMessage/"+t,e)},deleteMessage(t){return this.$fhcApi.post("api/frontend/v1/messages/messages/deleteMessage/"+t)}}},V={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},H={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:i})},getStudiengaengeForStudienSemester:function(t){return this.$fhcApi.get(`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${t}`,{})},getStudienplaeneBySemester:function(t,e){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienplaeneBySemester",{studiengang:t,studiensemester:e})},getLvPlanForStudiensemester:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${t}/${e}`,{})},getLvEvaluierungInfo:function(t,e){return this.$fhcApi.get(`/api/frontend/v1/Studium/getLvEvaluierungInfo/${t}/${e}`,{})}},q={search:_,phrasen:A,navigation:$,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:x,studstatus:S,profil:z,profilUpdate:T,lvPlan:D,bookmark:{getBookmarks:function(){return this.$fhcApi.get("/api/frontend/v1/Bookmark/getBookmarks",{})},delete:function(t){return this.$fhcApi.get(`/api/frontend/v1/Bookmark/delete/${t}`,{})},update:function({bookmark_id:t,url:e,title:n,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:n})},insert:function({url:t,title:e,tag:n}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:n})}},stv:E,notiz:I,betriebsmittel:M,checkperson:L,ampeln:{open:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/open",{})},all:function(){return this.$fhcApi.get("/api/frontend/v1/Ampeln/all",{})},confirm:function(t){return this.$fhcApi.get(`/api/frontend/v1/Ampeln/confirm/${t}`,{})}},ort:N,cms:R,lehre:B,addons:j,messages:U,vorlagen:V,addons:j,studiengang:{studiengangInformation:function(){return this.$fhcApi.get("/api/frontend/v1/Studgang/getStudiengangInfo",{})},getStudiengangByKz:function(t){return this.$fhcApi.get("/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",{studiengang_kz:t})}},menu:{getMenu:function(){return this.$fhcApi.get("/api/frontend/v1/CisMenu/getMenu",{})}},authinfo:{getAuthUID(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthUID",{})},getAuthInfo(){return this.$fhcApi.get("/api/frontend/v1/AuthInfo/getAuthInfo",{})}},vertraege:{person:{getAllVertraege(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllVertraege/"+n.person_id)},getAllContractsNotAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+n.person_id)},getAllContractsAssigned(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/"+n.person_id+"/"+n.vertrag_id)},getAllContractsNotAssigned2(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/"+t)},getStatiOfContract(t,e,n){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getStatiOfContract/"+n.vertrag_id)},getAllContractTypes(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractTypes/")},getAllContractStati(){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getAllContractStati/")},addNewContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/addNewContract/",e)},loadContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContract/"+t)},updateContract(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContract/",e)},deleteContract(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContract/"+t)},loadContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/loadContractStatus/"+t.vertrag_id,t)},insertContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/insertContractStatus/"+e.vertrag_id,e)},updateContractStatus(t,e){return this.$fhcApi.post(t,"api/frontend/v1/vertraege/vertraege/updateContractStatus/"+e.vertrag_id,e)},deleteContractStatus(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteContractStatus/"+t.vertrag_id,t)},deleteLehrauftrag(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/"+t.vertrag_id,t)},deleteBetreuung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/deleteBetreuung/"+t.vertrag_id,t)},getMitarbeiter(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getMitarbeiter/")},getHeader(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getHeader/"+t)},getPersonAbteilung(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getPersonAbteilung/"+t)},getLeitungOrg(t){return this.$fhcApi.post("api/frontend/v1/vertraege/vertraege/getLeitungOrg/"+t)},getMitarbeiterUid(t){return this.$fhcApi.get("api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/"+t)}},configPrintDocument(){return this.$fhcApi.get("api/frontend/v1/vertraege/config/printDocument")}},studium:H,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},G={install:(t,e)=>{if(t.config.globalProperties.$fhcApi)return void(e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory.addEndpoints(e.factory)));function n(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function i(t){const e=t.data;return delete t.data,e.meta?e.meta.response=t:e.meta={response:t},e}FHC_JS_DATA_STORAGE_OBJECT.app_root,FHC_JS_DATA_STORAGE_OBJECT.ci_router;const a=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});a.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),a.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config))),i(e)),e=>"ERR_CANCELED"==e.code?Promise.reject({handled:!0,...e}):"off"==e.config?.errorHandling||!1===e.config?.errorHandling||"success"==e.config?.errorHandling?Promise.reject(e):e.response?404==e.response.status?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL,!0),Promise.reject({handled:!0,...e})):(e.response.data.errors=e.response.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[n.type])(n,e.config)),e.response.data.errors.length?Promise.reject(e):Promise.reject({handled:!0,...e})):e.request?(t.config.globalProperties.$fhcAlert.alertDefault("error",e.message,e.request.responseURL),Promise.reject({handled:!0,...e})):(t.config.globalProperties.$fhcAlert.alertError(e.message),Promise.reject({handled:!0,...e}))),t.config.globalProperties.$fhcApi={getUri:t=>(console.warn("$fhcApi.getUri is DEPRECATED! Use $api.getUri instead."),a.getUri({url:t})),get:(t,e,i,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,s]=n(t,e,i,s),i&&(s?s.params=i:s={params:i}),a.get(e,s)),post:(t,e,i,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,s]=n(t,e,i,s),a.post(e,i,s)),_defaultErrorHandlers:{validation(e,n){const i=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,n){const i=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n.alertSystemError(i)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var i="";i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),n.alertSystemError(i)},db(e){const n=t.config.globalProperties.$fhcAlert;var i="";void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),n.alertSystemError(i)},auth(e,n){const i=t.config.globalProperties.$fhcAlert;var a="";a+="Controller name: "+e.controller+"\n",a+="Method name: "+e.method+"\n",a+="Required permissions: "+e.required_permissions,n?.errorHeader?i.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):i.alertDefault("error",e.message,a)}}};class s{constructor(e,n){void 0===n?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,i,a)),post:(e,n,i,a)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,i,a))},Object.defineProperty(this.$fhcApi,"factory",{get:()=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.factory)}),t.config.globalProperties.$fhcApi.factory=this):Object.defineProperty(this,"$fhcApi",{get(){return(n||this).$fhcApi}}),this.addEndpoints(e,!0)}addEndpoints(t,e){Object.keys(t).forEach(e=>{Object.defineProperty(this,e,{get(){return"function"==typeof t[e]?t[e].bind(this):new s(t[e],this.$fhcApi.factory)}})}),e||console.warn("$fhcApi.factory.addEndpoints() is DEPRECATED!")}}const r=new s(q);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),r.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=r,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const J="error",W="retval",Z={get:function(t,e,n=null){return Z._axiosCall(t,e,"get",n)},post:function(t,e,n=null){return Z._axiosCall(t,e,"post",n)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(J)||!t.hasOwnProperty(W)||0!=t.error)},isError:function(t){return!Z.isSuccess(t)},hasData:function(t){return!(!Z.isSuccess(t)||!("object"==typeof t[W]&&Object.keys(t[W]).length>0||"array"==typeof t[W]&&t[W].length>0||"string"==typeof t[W]&&""!=t[W].trim()||"number"==typeof t[W]))},getData:function(t){return Z.hasData(t)?t[W]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(W)?t[W]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(J)?t[J]:1},_generateRouterURI:function(t){var e=null;return"undefined"!=typeof FHC_JS_DATA_STORAGE_OBJECT&&(e=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"+t),e},_printDebug:function(t,e,n){},_axiosCall:function(t,e,n,i){let a={method:n,url:Z._generateRouterURI(t),timeout:5e3};if("get"==n?a.params=e:a.data=e,"object"==typeof i)for(var s in i)a[s]=i[s];return axios(a)}},K=document.createElement("div"),Y=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:n},methods:{mailToUrl:t=>"mailto:"+FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto+"?subject=Meldung%20Systemfehler&body="+("\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method+"%0D%0A\n\t\t\t\tFehler Meldung: "+t.message.detail+"%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!"),openMessagecard(t){bootstrap.Collapse.getOrCreateInstance(t.target.getAttribute("href")).toggle()}},unmounted(){K.parentElement.removeChild(K)},computed:{showmaillink:function(){return""!==FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto}},template:'\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t'});Y.use(t),Y.use(i);const Q=Y.mount(K);document.body.appendChild(K);var X={install:(t,e)=>{t.config.globalProperties.$p||t.use(ot);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);Q.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);Q.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);Q.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);Q.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);Q.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{Q.$confirm.require({group:"fhcAlertConfirm",header:Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:Vue.computed(()=>t.config.globalProperties.$p.t("alert/confirm_delete")),acceptLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/loeschen")),acceptClass:"p-button-danger",rejectLabel:Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:"p-button-secondary",accept(){e(!0)},reject(){e(!1)}})}),confirm:e=>new Promise((n,i)=>{Q.$confirm.require({group:e?.group??"fhcAlertConfirm",header:e?.header??Vue.computed(()=>t.config.globalProperties.$p.t("alert/attention")),message:e?.message??"",acceptLabel:e?.acceptLabel??"Ok",acceptClass:e?.acceptClass??"btn btn-primary",rejectLabel:e?.rejectLabel??Vue.computed(()=>t.config.globalProperties.$p.t("ui/abbrechen")),rejectClass:e?.rejectClass??"btn btn-outline-secondary",accept(){n(!0)},reject(){n(!1)}})}),alertDefault(t,e,n,i=!1,a=!1){let s={severity:t,summary:e,detail:n,html:a};i||(s.life=3e3),Q.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",i=!1,a=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,i,a)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return n.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(n.alertSystemError);if(!t.hasOwnProperty("handled")||!t.handled){if("object"==typeof t&&null!==t){let e="";return t.hasOwnProperty("response")&&t.response?.data?.retval?e+="Error Message: "+(t.response.data.retval.message||t.response.data.retval)+"\r\n":t.hasOwnProperty("message")&&(e+="Error Message: "+t.message.toUpperCase()+"\r\n"),t.hasOwnProperty("config")&&t.config.hasOwnProperty("url")&&(e+="Error ConfigURL: "+t.config.url+"\r\n"),t.hasOwnProperty("stack")&&(e+="Error Stack: "+t.stack+"\r\n"),""==e&&(e="Error Message: "+JSON.stringify(t)+"\r\n"),e+="Error Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method,n.alertSystemError(e)}n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method)}}},handleSystemMessage(t){if("string"==typeof t)return n.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(n.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?n.alertSystemError("alertSystemError throws Generic Error\r\nError Controller Path: "+FHC_JS_DATA_STORAGE_OBJECT.called_path+"/"+FHC_JS_DATA_STORAGE_OBJECT.called_method):t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?n.alertWarning(JSON.stringify(t.data.retval)):n.alertSystemError(JSON.stringify(t))},resetFormValidation(t){const e=new Event("fhc-form-reset");t.querySelectorAll(["[data-fhc-form-validate],[data-fhc-form-error]"]).forEach(t=>t.dispatchEvent(e))},handleFormValidation(t,e){if(void 0===e){if(t&&t.nodeType===Node.ELEMENT_NODE)return e=>n.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=Z.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),n.resetFormValidation(e);const a=Object.entries(i).filter(([t,n])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&a.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:a})):a.forEach(n.alertError))}if(400==t?.response?.status){let e=Z.getError(t.response.data);n.alertError("object"==typeof e?Object.values(e):e)}else n.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=n,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},tt={install:(t,e)=>{if(t.config.globalProperties.$api)return;function n(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,n])=>n.forEach(n=>e(n,t)))}t.config.globalProperties.$fhcAlert||t.use(X);let i={success:!0,fail:!0,combine:{form:["validation","general"],toast:["validation","general","not_found","site_failed"]},handler:{form(t,e){t.clearValidation(),e.forEach(e=>t.setFeedback(!1,e.messages||e.message))},async toast(e){const n=t.config.globalProperties.$p;if(!n)return Promise.reject("Phrasen plugin not loaded!");async function i(t){t=t.reduce((t,e)=>{switch(e.type){case"not_found":case"site_failed":e.message?t[e.message]=[e.url]:t._default=[e.url];break;case"general":t._default||(t._default=[]),t._default.push(e.message);break;case"validation":Object.entries(e.messages).forEach(([e,n])=>{t[e]||(t[e]=[]),Array.isArray(n)?t[e].push(...n):t[e].push(n)})}return t},{});let e=0;const i=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,i])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=i.length,t+"
    "+i.join("
    ")+"
    "}));return{counter:e,msgs:i}}let a,s;Array.isArray(e)?({counter:a,msgs:s}=await i(e)):({counter:a,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const a=await t,{counter:s,msgs:r}=await i(n);return a.counter+=s,a.msgs.push("
    "+e+"
    "+r.join("")+"
    "),a},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const r=n.t("ui/n_errors",{n:a});t.config.globalProperties.$fhcAlert.alertDefault("error",r,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var i="";switch(i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",n,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n?n+=": PHP "+e.severity:n="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",n,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,n&&(i=n+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),i+="Type: "+e.class+"\n\n",i+="Message: "+e.message+"\n\n",i+="Filename: "+e.filename+"\n",i+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(i+="\nBacktrace: ",e.backtrace.forEach(t=>{i+="\n\tFile: "+t.file+"\n",i+="\tLine: "+t.line+"\n",i+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},db(e){n(e,(e,n)=>{var i="";n&&(i+=n+"\n\n"),void 0!==e.heading&&(i+=e.heading+"\n\n"),void 0!==e.code&&(i+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(i+="SQL: "+e.sql+"\n\n"),void 0!==e.message?i+="Message: "+e.message+"\n\n":void 0!==e.messages&&(i+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(i+="Filename: "+e.filename+"\n"),void 0!==e.line&&(i+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(i)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,i,!0)})}}};function a(t,e,n,i){if("string"==typeof t&&void 0===i)[e,n,i]=[t,e,n],t=void 0;else if(t){if("object"!=typeof t)throw new TypeError("Parameter 1 of _get_config must be an object or a string");void 0===e&&void 0===n&&void 0===i&&(i=t,t=void 0)}if(t){if(!t.clearValidation||!t.setFeedback)throw new TypeError("'form' is not a Form Component");t={clearValidation:t.clearValidation,setFeedback:t.setFeedback},i?i.form=t:i={form:t}}return[e,n,i]}function s(t){if("string"==typeof t.data||t.data instanceof String)return s({data:t});const e=t.data;return delete t.data,e?(e.meta?e.meta.response=t:e.meta={response:t},e):{meta:{response:t},data:null}}function r(t){if(!1===t||"off"===t)return{...i,success:!1,fail:!1};if(!t||!0===t)return{...i};if("success"===t)return{...i,fail:!1};if("fail"===t)return{...i,success:!1};const{success:e,fail:n,handler:a,combine:s}=t;return t={...i},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:a,combine:s}).forEach(([e,n])=>{void 0!==n&&(t[e]={...t[e],...n})}),t}function o(t){const e=r(t?.errorHandling);if(t?.form){const n=e.handler.form;e.handler={...e.handler,form:e=>n(t.form,e)}}else e.combine={...e.combine,form:[]};return e}function l(t){return t.response?404==t.response.status?[{type:"not_found",message:t.message,url:t.request.responseURL}]:null==t.response.data.errors?[]:t.response.data.errors:t.request?[{type:"site_failed",message:t.message,url:t.request.responseURL}]:[{type:"script",message:t.message}]}function d(t,e){const n={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var a of i){let i=a.type,r=null;for(var s in t.combine){let e=t.combine[s].includes(i),n=t.handler[s];if(e&&n&&(r=s,"form"==r))break}r&&(i=r);t.handler[i]?(n[i]||(n[i]=[]),Array.isArray(a)?n[i].push(...a):n[i].push(a)):e.push(a)}return n}void 0!==e?.errorHandling&&(i=r(e.errorHandling));const c=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});c.interceptors.request.use(t=>{if("post"!=t.method||!t.data)return t;if(t.data instanceof FormData)return t;if(!Object.values(t.data).every(t=>!(t instanceof FileList)&&(!Array.isArray(t)||t.every(t=>!(t instanceof File))))){const e=Object.entries(t.data).reduce((t,[e,n])=>{if(n instanceof FileList)for(const i of n)t.FormData.append(e+(n.length>1?"[]":""),i);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(i=>t.FormData.append(e+(n.length>1?"[]":""),i)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),c.interceptors.response.use(e=>("off"==e.config?.errorHandling||!1===e.config?.errorHandling||"fail"==e.config?.errorHandling||e.data.errors&&(e.data.errors=e.data.errors.filter(n=>(e.config[n.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[n.type])(n,e.config))),s(e)),t=>{if("ERR_CANCELED"==t.code)return Promise.reject({handled:!0,...t});const e=o(t.config);if(!e.fail)return Promise.reject(t);const n=l(t),i=d(e,n);for(var a in i)e.handler[a](i[a]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),n&&(i?i.params=n:i={params:n}),c.get(e,i)),post:(t,e,n,i)=>([e,n,i]=a(t,e,n,i),c.post(e,n,i)),call(e,n,i){if(Array.isArray(e)){const s=t.config.globalProperties.$api;return Promise.allSettled(e.map((t,e)=>(Array.isArray(t)||(t=["#"+e,t]),s.call(t[1],{errorHeader:t[0],errorHandling:!1})))).then(t=>{const[,,e]=a(i,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const r={};for(var c of t){const[t,e]="fulfilled"===c.status?[s.success,c.value]:[s.fail,c.reason];if(!t)return;const n=d(s,l(e));for(var u in n)r[u]?r[u][e.config.errorHeader]=n[u]:r[u]={[e.config.errorHeader]:n[u]}}for(var p in r)s.handler[p](r[p]);return t})}let{method:s,url:r,params:c,config:u}=e;return void 0!==n&&(u=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(i,r,c,u):"post"==s?this.post(i,r,c,u):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},et={loadCategory:t=>({method:"get",url:"/api/frontend/v1/phrasen/loadModule/"+t}),setLanguage:(t,e)=>({method:"post",url:"/api/frontend/v1/phrasen/setLanguage",params:{categories:t,language:e}}),getLanguage:()=>({method:"get",url:"/api/frontend/v1/phrasen/getLanguage"}),getActiveDbLanguages:()=>({method:"get",url:"/api/frontend/v1/phrasen/getAllLanguages"})};const nt=Vue.reactive({}),it={};let at=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),st=Vue.computed(()=>at.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==at.value).LC_Time:null);const rt={user_language:at,user_locale:st,setLanguage(t){const e=Object.keys(nt);return this.config.globalProperties.$api.call(et.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{nt[t.category][t.phrase]=t.text}),at.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(it[t]||(it[t]=this.config.globalProperties.$api.call(et.loadCategory(t)).then(e=>e?.data?function(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}(e.data,t):{}).then(e=>{nt[t]=e})),it[t])},t_ref(t,e,n){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,n))},t(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,n),"";let i=Vue.computed(()=>nt[t]?function(t,e,n){let i=nt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}(t,e,n):"");return nt[t]||this.loadCategory(t),i.value}};var ot={install(t,e){t.config.globalProperties.$fhcApi||t.use(G),t.config.globalProperties.$api||t.use(tt),t.config.globalProperties.$p={t:rt.t,loadCategory:e=>rt.loadCategory.call(t,e),setLanguage:e=>rt.setLanguage.call(t,e),user_language:at,user_locale:st,t_ref:rt.t_ref},t.provide("$p",t.config.globalProperties.$p)}},lt=Object.freeze({__proto__:null,default:ot,user_locale:st});let dt=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);const ct=FHC_JS_DATA_STORAGE_OBJECT.theme.modes,ut=t=>{if(!t)return;for(const t of ct)document.documentElement.classList.remove(t);dt.value=t,document.documentElement.classList.add(t),document.body.setAttribute("data-bs-theme",t);let e=document.querySelector('link[href*="primevue/resources/themes"]');"dark"==t?e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-light-blue","bootstrap4-dark-blue"):("light"==t||e.attributes.href.value.includes("bootstrap4-dark-blue"))&&(e.attributes.href.value=e.attributes.href.value.replace("bootstrap4-dark-blue","bootstrap4-light-blue")),localStorage.setItem("theme",t)};var pt={install:(t,e)=>{document.documentElement.classList.add(dt.value),(()=>{let t=localStorage.getItem("theme");t&&ct.includes(t)||(t=ct[0],localStorage.setItem("theme",t)),ut(t)})(),t.config.globalProperties.$theme={theme_name:dt,theme_modes:ct,switchTheme:t=>{ut(t)}}}};const ht=t=>{const e=t.toString(16);return 1===e.length?"0"+e:e};function mt(t){return(299*parseInt(t.substring(1,3),16)+587*parseInt(t.substring(3,5),16)+114*parseInt(t.substring(5,7),16))/1e3>=128?"black":"white"}var gt={mounted(t,e){const n=window.getComputedStyle(t).backgroundColor;let i=new RegExp(/^rgba?\s*\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,?\s*([0-9]+.?[0-9]?)?\s*\)/),a=n.match(i);if(a){a.length<3&&console.error("Invalid RGB color format");let e=parseInt(a[1],10),n=parseInt(a[2],10),i=parseInt(a[3],10),s=`#${ht(e)}${ht(n)}${ht(i)}`;t.style.color=mt(s)}else t.style.color=mt(n)}};const ft={lehreinheit:{id:"lehreinheit_id",dragIcon:"fa-solid fa-chalkboard-user",extras:["stundenblockung"]},vevent:{id:"uid",dragIcon:"fa-solid fa-calendar",extras:["dtstart","dtend","summary"]},person:{id:"person_id",dragIcon:"fa-solid fa-user"},student:{id:"student_uid",dragIcon:"fa-solid fa-user-graduate"},prestudent:{id:"prestudent_id",dragIcon:"fa-solid fa-user-graduate text-muted"}},vt=Object.keys(ft);function bt(t){if(!t)return!1;if(Array.isArray(t))return t.every(bt);if(!t.type)return!1;if("-collection"==t.type.substr(-11)){if(!Object.prototype.hasOwnProperty.call(t,"values"))return!1;if(!vt.includes(t.type.substr(0,t.type.length-11)))return!1}else{if(!Object.prototype.hasOwnProperty.call(t,"id"))return!1;if(!vt.includes(t.type))return!1;if(ft[t.type].extras&&!ft[t.type].extras.every(e=>Object.prototype.hasOwnProperty.call(t,e)))return!1}return!0}function yt(t,e,n){let i=null;try{if(i=wt(t,n),!i)return null;if(!n&&Array.isArray(i)){if(i=i.filter(bt),!i.length)return null}else if(!bt(i))return null;if(e&&e.length)if(Array.isArray(i)){if(n&&!i.every(t=>e.includes(t.type)))return null;if(!n&&(i=i.filter(t=>e.includes(t.type)),!i.length))return null}else if(!e.includes(i.type))return null}catch(t){return null}return Array.isArray(i)&&1==i.length?i.find(Boolean):i}function wt(t,e){const n=[];for(const i of t.dataTransfer.types){if("application/fhc-"!=i.substr(0,16)){if(e)return null;continue}let a=i.substr(16),s=!1;if("-collection"==a.substr(-11)&&(a=a.substr(0,a.length-11),s=!0),!vt.includes(a)){if(e)return null;continue}let r=JSON.parse(t.dataTransfer.getData(i));s?n.push(...r.values):n.push(r)}return n.length?1==n.length?n[0]:n:null}var kt={...Object.keys(ft).reduce((t,e)=>(t["TYPE_"+e.toUpperCase()]=e,t),{}),isValidDragObject:bt,getValidTransferData:yt,isValidTransferData:function(t,e,n){return!!yt(t,e,n)},getTransferData:wt,convertToValidDragObject:function t(e,n){if(Array.isArray(e)){const i=e.map(t).filter(Boolean);if(!i.length)return;if(n&&i.length!=e.length)return;const a=i.reduce((t,e)=>(t[e.type]||(t[e.type]=[]),t[e.type].push(e),t),{});return Object.entries(a).map(([t,e])=>e.length>1?{type:t+"-collection",values:e}:e[0])}if(Object.prototype.hasOwnProperty.call(e,"type")&&bt(e))return e;const i=Object.entries(ft).find(([,t])=>!!Object.prototype.hasOwnProperty.call(e,t.id)&&!(t.extras&&!t.extras.every(t=>Object.prototype.hasOwnProperty.call(e,t))));if(!i)return;const[a,s]=i,r={};return r.type=a,r.id=e[s.id],s.extras&&s.extras.forEach(t=>r[t]=e[t]),r},setTransferData:function t(e,n,i=!1){if(i){const t=(Array.isArray(n)?n:[n]).map(t=>{const e=document.createElement("i"),n=document.createElement("span"),i=document.createElement("span");i.className="btn btn-outline-dark bg-light",n.className="small",ft[t.type]?(e.className=ft[t.type].dragIcon||"fa-solid fa-question",n.textContent=t.id):"-collection"==t.type.substr(-11)&&ft[t.type.substr(0,t.type.length-11)]?(i.style.boxShadow="3px 3px var(--bs-btn-border-color)",e.className=ft[t.type.substr(0,t.type.length-11)].dragIcon||"fa-solid fa-question",n.textContent="x"+t.values.length):(e.className="fa-solid fa-question",n.textContent=t.id||""),i.append(e);const a=document.createElement("div");return a.className="d-flex flex-column align-items-center gap-2 small",a.append(i,n),a}),i=document.createElement("div");i.className="d-flex flex-row gap-2 small",i.append(...t),document.body.append(i),e.dataTransfer.setDragImage(i,-25,0),requestAnimationFrame(()=>{document.body.removeChild(i)})}if(Array.isArray(n))return n.forEach(n=>t(e,n));e.dataTransfer.setData("application/fhc-"+n.type,JSON.stringify(n))},eventHasTypes:function(t,e,n){return e&&e.length||(e=vt),e=e.map(t=>"application/fhc-"+t),!![...t.dataTransfer.types].length&&(n?[...t.dataTransfer.types].every(t=>e.includes(t)):e.some(e=>[...t.dataTransfer.types].includes(e)))},bindDragEnterLeave:function(t,e,n){let i=!1,a=!0;function s(n){i=!1,a=!0,window.addEventListener("dragenter",o,!0),window.addEventListener("dragleave",l,!0),window.addEventListener("drop",d,!0),e(n),t.removeEventListener("dragenter",s)}function r(e,i){window.removeEventListener("dragenter",o,!0),window.removeEventListener("dragleave",l,!0),window.removeEventListener("drop",d,!0),n(e,i),t.addEventListener("dragenter",s)}function o(e){a=!1,t==e.target||t.contains(e.target)?i=!0:r(e)}function l(e){if(t==e.target||t.contains(e.target)){if(i)return void(i=!1)}else if(a)return void(a=!1);r(e)}function d(t){r(t,!0)}return t.addEventListener("dragenter",s),()=>{t.removeEventListener("dragenter",s)}}},_t={mounted(t,e,n){if("draggable"==e.arg)t.addEventListener("update-my-value",t=>{t.preventDefault(),e.value=t.detail.item}),t.addEventListener("dragstart",n=>{t.dispatchEvent(new CustomEvent("calendar-dragstart",{cancelable:!0,bubbles:!0,detail:{item:e.value,x:n.offsetX/t.offsetWidth,y:n.offsetY/t.offsetHeight,originalEvent:n}}))}),t.addEventListener("dragend",n=>{t.dispatchEvent(new CustomEvent("calendar-dragend",{cancelable:!0,bubbles:!0,detail:{item:e.value,originalEvent:n}}))});else if("dropcage"==e.arg){let e=null;t.addEventListener("dragover",n=>{if(!e)return e=t.getBoundingClientRect(),t.dispatchEvent(new CustomEvent("calendar-dragenter",{detail:{originalEvent:n}}))}),window.addEventListener("dragleave",n=>{if(!e)return;let i;return i=void 0===n.clientX?{x:n.pageX+document.documentElement.scrollLeft,y:n.pageY+document.documentElement.scrollTop}:{x:n.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,y:n.clientY+document.body.scrollTop+document.documentElement.scrollTop},i.x>e.left+e.width-1||i.xe.top+e.height-1||i.y{if(e)return e=null,t.dispatchEvent(new CustomEvent("calendar-dragleave",{detail:{originalEvent:n}}))})}else"dropzone"==e.arg&&t.addEventListener(e.modifiers.once?"dragenter":"dragover",n=>{const i=e.value instanceof Function?e.value(n):e.value,a=i.timestamp?i:{timestamp:i};t.dispatchEvent(new CustomEvent("calendar-dragchange",{cancelable:!0,bubbles:!0,detail:a}))})},updated(t,e,n,i){"draggable"==e.arg&&t.dispatchEvent(new CustomEvent("update-my-value",{cancelable:!0,detail:{item:e.value}}))}},At={name:"CalendarDragAndDrop",directives:{CalDnd:_t},provide(){return{events:Vue.computed(()=>this.correctedEvents),backgrounds:Vue.computed(()=>this.backgrounds),dropAllowed:Vue.computed(()=>this.dragging&&this.dropAllowed)}},inject:{mode:"mode",dropableEvents:"dropableEvents"},props:{events:Array,backgrounds:Array},emits:["drop"],data:()=>({dragging:!1,allowed:!1,draggedInternalEvent:null,draggedExternalEvent:null,targetTimestamp:0,targetGridEnds:null,dropAllowed:!1,shadowPreview:!1}),computed:{correctedEvents(){if(this.dragging){if(this.draggedInternalEvent){const t=this.events.findIndex(t=>t.id==this.draggedInternalEvent.id);return this.previewEvent&&!this.shadowPreview?this.events.toSpliced(t,1,this.previewEvent):this.events.toSpliced(t,1)}if(this.previewEvent&&!this.shadowPreview)return[...this.events,this.previewEvent]}return this.events},correctedBackgrounds(){return this.dragging&&this.shadowPreview?[...this.backgrounds,{start:new Date(this.targetTimestamp),class:"shadow-preview"}]:this.backgrounds},previewEvent(){if(!this.dragging||!this.dropAllowed)return null;if(!this.targetTimestamp)return null;const t=this.draggedInternalEvent||this.draggedExternalEvent;if(!t)return null;let e=t.end-t.start;return this.targetGridEnds&&(e=this.targetGridEnds.find(t=>t>=this.targetTimestamp+e)-this.targetTimestamp),{orig:t.orig,start:this.targetTimestamp,end:this.targetTimestamp+e}}},methods:{onDragstart(t){const e=kt.convertToTransferData(t.detail.item.orig);kt.isValidDragObject(e)&&(kt.setTransferData(t.detail.originalEvent,e),this.draggedInternalEvent=t.detail.item)},onDragend(){this.draggedInternalEvent=null,this.dragging=!1},onDragenter(t){if(this.dragging=!0,this.draggedInternalEvent)this.dropAllowed=this.dropableEvents(this.draggedInternalEvent,this.mode);else{const e=kt.getValidTransferData(t.detail.originalEvent);this.draggedExternalEvent=e?{id:e.id,type:e.type,start:e.isostart?luxon.DateTime.fromISO(e.isostart).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),end:e.isoend?luxon.DateTime.fromISO(e.isoend).setZone(this.timezone):luxon.DateTime.local().setZone(this.timezone),orig:e}:null,this.dropAllowed=this.dropableEvents(e,this.mode)}},onDragleave(){this.dragging=!1},onDragchange(t){this.targetTimestamp=t.detail.timestamp,this.targetGridEnds=t.detail.ends||null},onDrop(t){this.dragging&&this.dropAllowed&&(this.$emit("drop",t,this.previewEvent.start,this.previewEvent.end),this.dropAllowed=!1,this.dragging=!1)}},template:'\n\t\n\t\t\n\t\n\t'},$t={name:"CalendarHeader",components:{DatePicker:{name:"CalendarHeaderDatepicker",components:{VueDatePicker:VueDatePicker},inject:["locale","timezone"],props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},listLength:{type:Number,default:7}},emits:["update:date"],computed:{convertedDate(){return this.date.setZone(this.timezone).setZone("local",{keepLocalTime:!0})},current(){switch(this.mode){case"month":return{month:this.convertedDate.month-1,year:this.convertedDate.year};case"list":return[this.convertedDate.startOf("day").ts,this.convertedDate.startOf("day").plus({days:this.listLength}).ts-1];case"week":return[this.convertedDate.startOf("week",{useLocaleWeeks:!0}).ts,this.convertedDate.endOf("week",{useLocaleWeeks:!0}).ts];case"day":return this.convertedDate;default:return null}},title(){switch(this.mode){case"month":return this.date.toLocaleString({month:"long",year:"numeric"});case"week":var t=this.date.localWeekYear,e=this.date.toFormat("nn");return this.$p.t("calendar/year_kw",{year:t,week:e});case"list":return this.date.toLocaleString(luxon.DateTime.DATE_FULL)+"-"+this.date.plus({days:this.listLength-1}).toLocaleString(luxon.DateTime.DATE_FULL);case"day":return this.date.toLocaleString(luxon.DateTime.DATE_FULL);default:return"View not Supported"}},weekStart(){return luxon.Info.getStartOfWeek(this.date)%7}},methods:{update(t){let e;switch(this.mode){case"month":t.month++,e=luxon.DateTime.fromObject(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"list":case"week":e=luxon.DateTime.fromJSDate(t[0]).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;case"day":e=luxon.DateTime.fromJSDate(t).setZone(this.timezone,{keepLocalTime:!0}).setLocale(this.locale);break;default:return}this.$emit("update:date",e)},weekNumbers(t){return luxon.DateTime.fromJSDate(t,{locale:this.locale}).localWeekNumber}},template:'\n\t title"\n\t\t:month-picker="mode == \'month\'"\n\t\t:week-picker="mode == \'week\'"\n\t\t:range="mode == \'list\' ? { autoRange: listLength - 1 } : false"\n\t\t:text-input="mode == \'day\'"\n\t\t:week-start="weekStart"\n\t\t:week-numbers="{ type: weekNumbers }"\n\t\t:clearable="false"\n\t\t:enable-time-picker="false"\n\t\t:config="{ keepActionRow: mode != \'month\' }"\n\t\t:action-row="{ showSelect: false, showCancel: false, showNow: mode != \'month\', showPreview: false }"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale="locale"\n\t\t:now-button-label="$p.t(\'calendar/today\')"\n\t\t:week-num-name="$p.t(\'calendar/kw\')"\n\t/>\n\t'}},props:{date:{type:luxon.DateTime,required:!0},mode:{type:String,required:!0},modeOptions:{type:Object,default:{}},btnMonth:Boolean,btnWeek:Boolean,btnDay:Boolean,btnList:Boolean},emits:["next","prev","click:mode","update:date","update:mode"],data:()=>({open:!1}),methods:{clickMode(t,e){this.$emit("click:mode",t),t.defaultPrevented||this.$emit("update:mode",e)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t'},xt={name:"CalendarSlider",inject:{time:{from:"sliderTime",default:".3s"}},emits:["slid"],data:()=>({target:0,extrasAfter:0,extrasBefore:0,running:!1,promiseResolve:null}),computed:{itemsAfter(){return[...Array(this.extrasAfter)].map((t,e)=>1+e)},itemsBefore(){return[...Array(this.extrasBefore)].map((t,e)=>e-this.extrasBefore)},styleSlider(){const t={position:"absolute",top:0,left:0,width:"100%",height:"100%"};return this.running&&(t.left=100*-this.target+"%",t.transition="left "+this.time+" ease-in-out"),t},styleBefore(){return{position:"absolute",top:0,height:"100%",display:"flex",right:"100%",width:100*this.extrasBefore+"%"}},styleAfter(){return{position:"absolute",top:0,height:"100%",display:"flex",left:"100%",width:100*this.extrasAfter+"%"}}},methods:{prevPage(){return this.slidePages(-1)},nextPage(){return this.slidePages(1)},slidePages(t){return new Promise(e=>{this.promiseResolve=e,this.running=!0;const n=this.target+t;n>0?this.extrasAftern&&(this.extrasBefore=-n),this.target=n})},endSlide(){this.promiseResolve&&(this.promiseResolve(this.target),this.promiseResolve=null),this.$emit("slid",this.target),this.running=!1,this.target=0,this.extrasAfter=this.extrasBefore=0}},template:'\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t'};const St=[];function zt(t,e,n){const i=St.findIndex(e=>e.el==t);i>=0&&(t.removeEventListener("click",St[i].listener),St.splice(i,1));const a=t=>{t.preventDefault(),t.stopPropagation();const i=new CustomEvent("cal-click",{cancelable:!0,bubbles:!0,detail:{source:e,value:n}});t.target.dispatchEvent(i)};St.push({el:t,listener:a}),t.addEventListener("click",a)}var Tt={mounted(t,e,n){"container"==e.arg?t.addEventListener("cal-click",t=>{const n=new Event("click:"+t.detail.source,{cancelable:!0});if(e.instance.$emit("click:"+t.detail.source,n,t.detail.value),!n.defaultPrevented){const e=new CustomEvent("cal-click-default",{cancelable:!0,bubbles:!0,detail:t.detail});t.target.dispatchEvent(e)}}):zt(t,e.arg,e.value)},updated(t,e,n,i){"container"!=e.arg&&zt(t,e.arg,e.value)}},Dt={name:"CalendarBase",components:{BaseDraganddrop:At,BaseHeader:$t,BaseSlider:xt,BsModal:s},directives:{CalClick:Tt},provide(){return{locale:Vue.computed(()=>this.locale),timezone:Vue.computed(()=>this.timezone),timeGrid:Vue.computed(()=>this.timeGrid),draggableEvents:Vue.computed(()=>this.draggableEvents?Array.isArray(this.draggableEvents)?t=>this.draggableEvents.includes(t.type):this.draggableEvents instanceof Function?this.draggableEvents:()=>!0:()=>!1),dropableEvents:Vue.computed(()=>this.onDrop?Array.isArray(this.dropableEvents)?t=>this.dropableEvents.includes(t.type):this.dropableEvents instanceof Function?this.dropableEvents:()=>!0:()=>!1),hasDragoverFunc:Vue.computed(()=>this.onDragover),mode:Vue.computed(()=>this.mode)}},props:{locale:{type:String,default:"de"},timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:t=>luxon.DateTime.now().setZone(t.timezone).startOf("day")},modes:{type:Object,required:!0,default:{}},mode:String,modeOptions:Object,events:{type:Array,default:[]},backgrounds:{type:Array,default:[]},showBtns:Boolean,btnMonth:{type:Boolean,default:void 0},btnWeek:{type:Boolean,default:void 0},btnDay:{type:Boolean,default:void 0},btnList:{type:Boolean,default:void 0},timeGrid:Array,draggableEvents:[Boolean,Array,Function],dropableEvents:[Boolean,Array,Function],onDragover:Function,onDrop:Function},emits:["click:next","click:prev","click:mode","click:event","click:day","click:week","update:date","update:mode","update:range","drop"],data:()=>({internalView:null,internalDate:null,modalEvent:null}),computed:{convertedEvents(){return this.events.map(t=>({id:t.type+t[t.type+"_id"],type:t.type,start:luxon.DateTime.fromISO(t.isostart).setZone(this.timezone),end:luxon.DateTime.fromISO(t.isoend).setZone(this.timezone),orig:t}))},convertedBackgrounds(){return this.backgrounds.map(t=>{const e={...t};return e.start&&(Number.isInteger(e.start)?e.start=luxon.DateTime.fromMillis(e.start,{zone:this.timezone,locale:this.locale}):e.start instanceof Date?e.start=luxon.DateTime.fromJSDate(e.start,{zone:this.timezone,locale:this.locale}):("string"==typeof e.start||e.start instanceof String)&&(e.start=luxon.DateTime.fromISO(e.start,{zone:this.timezone,locale:this.locale}))),e.end&&(Number.isInteger(e.end)?e.end=luxon.DateTime.fromMillis(e.end,{zone:this.timezone,locale:this.locale}):e.end instanceof Date?e.end=luxon.DateTime.fromJSDate(e.end,{zone:this.timezone,locale:this.locale}):("string"==typeof e.end||e.end instanceof String)&&(e.end=luxon.DateTime.fromISO(e.end,{zone:this.timezone,locale:this.locale}))),e})},sDate(){return this.date instanceof luxon.DateTime?this.date:luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone)},cDate:{get(){return(this.internalDate?this.internalDate:this.sDate).setLocale(this.locale)},set(t){this.internalDate=t,this.$emit("update:date",t,this.cMode)}},sMode(){let t=this.mode;return t&&(t=t.toLowerCase()),t&&this.modes[t]||(t=Object.keys(this.modes).find(Boolean)),t||""},cMode:{get(){return this.internalView?this.internalView:this.sMode},set(t){this.internalView=t,this.$emit("update:mode",t,this.cDate)}}},watch:{sDate(t,e){this.sDate.isValid&&!this.sDate.hasSame(this.internalDate,"day")&&(this.internalDate=this.sDate)},sMode(){this.sMode&&(this.internalView=this.sMode)}},methods:{clickPrev(){const t=new Event("click:prev",{cancelable:!0});this.$emit("click:prev",t),t.defaultPrevented||this.$refs.mode.prevPage()},clickNext(){const t=new Event("click:next",{cancelable:!0});this.$emit("click:next",t),t.defaultPrevented||this.$refs.mode.nextPage()},handleClickDefaults(t){switch(t.detail.source){case"day":"day"!=this.cMode&&this.modes.day&&(t.stopPropagation(),this.cDate=t.detail.value,this.cMode="day");break;case"week":"week"!=this.cMode&&this.modes.week&&(t.stopPropagation(),this.cDate=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.cDate.zoneName,locale:this.cDate.locale}),this.cMode="week")}},onDropItem(t,e,n){this.$emit("drop",t,e,n)},showEventModal(t){this.modalEvent=t,this.$refs.modal.show()},hideEventModal(){this.modalEvent&&(this.modalEvent.closeFn=void 0),this.$refs.modal.hide(),this.modalEvent=null},onModalHidden(){this.modalEvent.closeFn&&this.modalEvent.closeFn()}},beforeUnmount(){this.hideEventModal()},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'},Et={getRoomInfo:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/getRoomplan",params:{ort_kurzbz:t,start_date:e,end_date:n}}),getLvPlan:(t,e,n)=>({method:"get",url:"/api/frontend/v1/LvPlan/getLvPlan",params:{start_date:t,end_date:e,lv_id:n}}),eventsPersonal:(t,e)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsPersonal",params:{start_date:t,end_date:e}}),eventsLv:(t,e,n)=>({method:"post",url:"/api/frontend/v1/lvPlan/eventsLv",params:{lv_id:t,start_date:e,end_date:n}}),getStunden:()=>({method:"get",url:"/api/frontend/v1/LvPlan/Stunden"}),getOrtReservierungen:(t,e,n)=>({method:"post",url:`/api/frontend/v1/LvPlan/getReservierungen/${t}`,params:{start_date:e,end_date:n}}),getLvPlanReservierungen:(t,e)=>({method:"post",url:"/api/frontend/v1/LvPlan/getReservierungen",params:{start_date:t,end_date:e}}),getLehreinheitStudiensemester:t=>({method:"get",url:`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${t}`}),studiensemesterDateInterval:t=>({method:"get",url:`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${t}`}),LvPlanEvents:(t,e,n)=>({method:"post",url:"/api/frontend/v1/LvPlan/LvPlanEvents",params:{start_date:t,end_date:e,lv_id:n}}),getLv:t=>({method:"get",url:"/api/frontend/v1/LvPlan/getLv/"+t})};var Ct={name:"GridLineEvent",directives:{CalDnd:_t,CalClick:Tt},inject:{draggableEvents:"draggableEvents",mode:"mode"},props:{event:{type:Object,required:!0,validator:t=>t.start&&t.end&&t.orig}},computed:{isHeaderOrFooter(){return["header","footer"].includes(this.event.orig)},draggable(){return!this.isHeaderOrFooter&&this.draggableEvents(this.event.orig,this.mode)},classes(){const t=[];return this.isHeaderOrFooter?t.push("event-"+this.event.orig):(this.event.startsHere&&t.push("event-begin"),this.event.endsHere&&t.push("event-end")),t}},template:'\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t'},Ot={name:"CalendarGrid",components:{GridLine:{name:"GridLine",components:{LineEvent:Ct,LineBackground:{name:"GridLineBackground",inject:{flipAxis:"flipAxis"},props:{start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},background:{type:Object,required:!0,validator:t=>!(!t.start&&!t.end)&&((!t.start||t.start instanceof luxon.DateTime)&&(!t.end||t.end instanceof luxon.DateTime))}},computed:{styles(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.style;const t=(this.end.ts-this.start.ts)/100;let e={};return this.background.startsHere&&(e[this.flipAxis?"left":"top"]=this.background.start.diff(this.start)/t+"%"),this.background.endsHere&&(e[this.flipAxis?"right":"bottom"]=this.end.diff(this.background.end)/t+"%"),this.background.style?[this.background.style,e]:e},classes(){if(!this.background.endsHere&&!this.background.startsHere)return this.background.class;const t=[];return this.background.class&&t.push(this.background.class),this.background.startsHere&&t.push("bg-begin"),this.background.endsHere&&t.push("bg-end"),t}},template:'\n\t\n\t\t{{ background.label }}\n\t\n\t'}},inject:{axisRow:"axisRow"},props:{date:{type:luxon.DateTime,required:!0},start:{type:luxon.DateTime,required:!0},end:{type:luxon.DateTime,required:!0},events:{type:Array,default:[]},backgrounds:{type:Array,default:[]}},computed:{eventsWithRowInfo(){const t=[];return this.events.forEach(e=>{const n=[1,-1];e.startsHere&&(n[0]="t_"+e.start.diff(this.date).toMillis()),e.endsHere&&(n[1]="t_"+e.end.diff(this.date).toMillis()),t.push({...e,rows:n})}),t}},template:'\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t'},GridLineEvent:Ct},directives:{CalDnd:_t},inject:{originalEvents:"events",originalBackgrounds:"backgrounds",dropAllowed:"dropAllowed"},provide(){return{flipAxis:Vue.computed(()=>this.flipAxis),axisRow:Vue.computed(()=>this.axisRow)}},props:{axisMain:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.DateTime)},axisParts:{type:Array,required:!0,validator:t=>t.every(t=>t instanceof luxon.Duration||Number.isInteger(t)||(t.start instanceof luxon.Duration||Number.isInteger(t.start))&&(t.end instanceof luxon.Duration||Number.isInteger(t.end)))},flipAxis:Boolean,allDayEvents:Boolean,axisMainCollapsible:Boolean,snapToGrid:Boolean},data:()=>({dragging:!1,resizeObserver:null,mutationObserver:null,userScroll:!0}),computed:{axisRow(){return this.flipAxis?"column":"row"},axisCol(){return this.flipAxis?"row":"column"},axisPartsWithBreaks(){return this.axisParts.reduce((t,e,n)=>{const i=e.start||e,a=e.end;if(t.length){const e=t.pop();Array.isArray(e)?t.push({start:e[0],end:i,index:e[1]}):e!=i&&t.push({start:e,end:i})}return a?(t.push({start:i,end:a,index:n}),t.push(a)):t.push([i,n]),t},[]).slice(0,-1)},axisPartsSave(){return this.axisParts[this.axisParts.length-1].end?this.axisParts:this.axisParts.slice(0,-1)},start(){return this.axisPartsWithBreaks[0].start},end(){return this.axisPartsWithBreaks[this.axisPartsWithBreaks.length-1].end},ends(){const t=[],e=this.axisPartsWithBreaks.filter(t=>void 0!==t.index).map(t=>t.end);for(var n of this.axisMain)for(var i of e)t.push(n.plus(i));return t},axisMainBorders(){return this.axisMain.reduce((t,e)=>t.concat([e.plus(this.start),e.plus(this.end)]),[])},eventsAllDay(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>t.orig.allDayEvent)):[]},eventsNormal(){return this.allDayEvents?this.mapIntoMainAxis(this.originalEvents.filter(t=>!t.orig.allDayEvent)):this.events},events(){return this.mapIntoMainAxis(this.originalEvents)},backgrounds(){return this.mapIntoMainAxis(this.originalBackgrounds)},hasValidEvents(){return this.events.find(t=>t.length)},styleGridCols(){let t="repeat("+this.axisMain.length+", 1fr)";return this.axisMainCollapsible&&this.hasValidEvents&&(t=this.events.map(t=>t.length?"1fr":"var(--fhc-calendar-axis-collapsible, .5fr)").join(" ")),t},styleGridRows(){const t={};return this.axisPartsWithBreaks.forEach(e=>{let n=e.start.toMillis();t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("ps_"+e.index),n=e.end.toMillis(),t[n]||(t[n]=["t_"+n]),void 0!==e.index&&t[n].push("pe_"+e.index)}),this.eventsNormal.forEach((e,n)=>{let i=this.axisMain[n];e.forEach(e=>{if(e.startsHere||e.endsHere){if(e.startsHere){let n=e.start.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}if(e.endsHere){let n=e.end.diff(i).toMillis();t[n]||(t[n]=["t_"+n,"e_"+n])}}})}),Object.keys(t).sort((t,e)=>parseInt(t)-parseInt(e)).map((e,n,i)=>{let a=i[n+1];return a?"["+t[e].join(" ")+"] "+(a-e)+"fr":(t[e].push("end"),"["+t[e].join(" ")+"]")}).join(" ")}},methods:{mapIntoMainAxis(t){const e=Array.from({length:this.axisMain.length},()=>Array());return t.forEach(t=>{const n=t.start||this.axisMainBorders[0].plus(-1),i=t.end||this.axisMainBorders[this.axisMainBorders.length-1].plus(1);for(var a=0;as){const o=n>=s,l=i<=r;e[a].push({...t,startsHere:o,endsHere:l})}}}),e},getPageTop(t){let e=t.offsetTop;return t.offsetParent&&(e+=this.getPageTop(t.offsetParent)),e},getPageLeft(t){let e=t.offsetLeft;return t.offsetParent&&(e+=this.getPageLeft(t.offsetParent)),e},getTimestampFromMouse(t,e){let n,i;return this.flipAxis?(n=t.pageX-this.getPageLeft(this.$refs.body)+this.$refs.main.scrollLeft,i=n/this.$refs.body.offsetWidth):(n=t.pageY-this.getPageTop(this.$refs.body)+this.$refs.main.scrollTop,i=n/this.$refs.body.offsetHeight),e+this.start+Math.floor((this.end-this.start)*i)},enableAutoScroll(){this.resizeObserver||(this.resizeObserver=new ResizeObserver(this.scrollToEarliestEvent)),this.resizeObserver.observe(this.$refs.body),this.mutationObserver||(this.mutationObserver=new MutationObserver(t=>{t.some(t=>t.addedNodes.length&&[].some.call(t.addedNodes,t=>t.matches&&t.matches(".fhc-calendar-base-grid-line-event")))&&this.scrollToEarliestEvent()})),this.mutationObserver.observe(this.$refs.body,{subtree:!0,childList:!0}),this.scrollToEarliestEvent()},disableAutoScroll(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=null},scrollToEarliestEvent(){const t=this.$refs.scroller.querySelectorAll(".fhc-calendar-base-grid-line-event");let e=[0,null];for(var n of t.values()){const t=n.offsetTop;(!e[1]||t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Ft={name:"LabelDay",directives:{CalClick:Tt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleFull(){return this.date.toLocaleString({day:"numeric",month:"long",year:"numeric"})},titleLong(){return this.date.toLocaleString({day:"2-digit",month:"2-digit",year:"numeric"})},titleShort(){return this.date.toLocaleString({day:"numeric",month:"numeric"})},titleNarrow(){return this.date.toLocaleString({day:"numeric"})}},template:'\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},Pt={name:"LabelDow",directives:{CalClick:Tt},props:{date:{type:luxon.DateTime,required:!0}},computed:{titleLong(){return this.date.toLocaleString({weekday:"long"})},titleShort(){return this.date.toLocaleString({weekday:"short"})},titleNarrow(){return this.date.toLocaleString({weekday:"narrow"})}},template:'\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t'},It={name:"LabelTime",props:{part:{type:[luxon.Duration,Number,Object],required:!0,validator(t){if(t instanceof Object){if(t instanceof luxon.Duration)return!0;let e=!0,n=!0;return t.start&&(e=t.start instanceof luxon.Duration||Number.isInteger(t.start)),t.end&&(n=t.end instanceof luxon.Duration||Number.isInteger(t.end)),e&&n}return!0}}},computed:{sanitizedTimestamps(){return this.part.start||this.part.end?this.part:{start:this.part}},start(){return this.sanitizedTimestamps.start?this.formatTime(this.sanitizedTimestamps.start):null},end(){return this.sanitizedTimestamps.end?this.formatTime(this.sanitizedTimestamps.end):null}},methods:{formatTime:t=>t.toISOTime({suppressSeconds:!0})},template:'\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t'};var Mt={name:"ModeDay",components:{BaseSlider:xt,DayView:{name:"DayView",components:{CalendarGrid:Ot,LabelDay:Ft,LabelDow:Pt,LabelTime:It},inject:{timeGrid:"timeGrid",originalEvents:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},emptyMessage:String,emptyMessageDetails:String},emits:["requestModalOpen","requestModalClose"],data:()=>({chosenEvent:null,gridMainRef:null}),computed:{axisMain(){return[this.day.startOf("day")]},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))},events(){return this.originalEvents.filter(t=>t.startthis.day).sort((t,e)=>t.start.ts-e.start.ts).map(t=>t.orig)},currentEvent(){if(this.chosenEvent&&this.events.find(t=>t==this.chosenEvent))return this.chosenEvent;let t=null;return this.events&&(t=this.events.find(Boolean)),t&&"loading"==t.type?null:t},isToday(){return this.day.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},watch:{compact(){this.compact?this.chosenEvent&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}):this.$emit("requestModalClose")}},methods:{handleClickDefaults(t){"event"==t.detail.source&&(this.chosenEvent=t.detail.value,this.compact&&this.$emit("requestModalOpen",{event:this.chosenEvent,closeFn:()=>{this.chosenEvent=null}}))}},setup(){const t=Vue.ref(null),{compact:e}=function(t,e){const n=Vue.ref(!1),i=Vue.ref(!1),a=Vue.ref(!1),s=Vue.computed(()=>Vue.isRef(t)?t.value&&t.value.$el?t.value.$el:t.value:t),r=Vue.computed(()=>{const t=Vue.isRef(e)?e.value:e;return Number.isInteger(t)?[["compact",t]]:Array.isArray(t)?t.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]):Object.entries(t).sort((t,e)=>t[1]-e[1])});function o(){if(void 0===s.value.offsetWidth)return;const t=r.value.find(t=>t[1]>s.value.offsetWidth);i.value=t?t[0]:"full",n.value=i.value==r.value[0][0]}const l=new ResizeObserver(()=>{s.value&&o()});function d(){s.value&&(o(),l.observe(s.value),a.value=!0)}function c(){a.value&&l.disconnect()}return Vue.onMounted(d),Vue.onUnmounted(c),Vue.watchEffect(()=>{s.value&&(c(),d())}),{compact:n,size:i}}(t,750);return{container:t,compact:e}},mounted(){this.gridMainRef=this.$refs.grid.$refs.main},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen","requestModalClose"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("day"),e=this.focusDate.endOf("day");return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({days:this.rangeOffset}):e=e.plus({days:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("day").diff(this.focusDate.startOf("day"),"days").days,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({days:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({days:t});return{...this.$attrs,day:e}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Lt={name:"ModeWeek",components:{BaseSlider:xt,WeekView:{name:"WeekView",components:{CalendarGrid:Ot,LabelDay:Ft,LabelDow:Pt,LabelTime:It},inject:{timeGrid:"timeGrid",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0},collapseEmptyDays:Boolean},computed:{start(){return this.day.startOf("week",{useLocaleWeeks:!0})},axisMain(){return Array.from({length:7},(t,e)=>this.start.plus({days:e}))},axisParts(){return this.timeGrid?this.timeGrid.map(t=>({start:luxon.Duration.fromISOTime(t.start),end:luxon.Duration.fromISOTime(t.end)})):Array.from({length:17},(t,e)=>luxon.Duration.fromObject({hours:e+7}))}},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("week",{useLocaleWeeks:!0}),e=this.focusDate.endOf("week",{useLocaleWeeks:!0});return 0!=this.rangeOffset&&(this.rangeOffset<0?t=t.plus({weeks:this.rangeOffset}):e=e.plus({weeks:this.rangeOffset})),luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("week",{useLocaleWeeks:!0}).diff(this.focusDate.startOf("week",{useLocaleWeeks:!0}),"weeks").weeks,this.rangeOffset&&(this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$refs.view.$refs.grid.disableAutoScroll(),this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({weeks:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},viewAttrs(t){const e=this.focusDate.plus({weeks:t});return{...this.$attrs,day:e}},handleClickDefaults(t){switch(t.detail.source){case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range),this.$refs.view.$refs.grid.enableAutoScroll()},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Nt={name:"ModeMonth",components:{BaseSlider:xt,MonthView:{name:"MonthView",components:{CalendarGrid:Ot,LabelWeek:{name:"LabelWeek",directives:{CalClick:Tt},props:{date:{type:luxon.DateTime,required:!0}},computed:{weeks(){const t=this.date.startOf("week",{useLocaleWeeks:!0}),e=this.date.endOf("week",{useLocaleWeeks:!0}),n=[{number:t.localWeekNumber,year:t.localWeekYear},{number:e.localWeekNumber,year:e.localWeekYear}];return n[0].number==n[1].number&&n.pop(),n}},template:'\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t'},LabelDow:Pt,LabelDay:Ft},provide(){return{events:Vue.computed(()=>{const t=this.events.map(t=>{const e=t.start.startOf("day"),n=t.end.plus({days:1}).startOf("day");return{...t,start:e,end:n}});for(var e=5;e>-1;e--)for(var n=6;n>-1;n--){const i=this.axisMain[e].plus(this.axisParts[n]);t.unshift({start:i,end:i.plus({days:1}),orig:"header"})}return t})}},inject:{events:"events",timezone:"timezone"},props:{day:{type:luxon.DateTime,required:!0}},computed:{axisMain(){const t=this.day.startOf("month").startOf("week",{useLocaleWeeks:!0});return Array.from({length:6},(e,n)=>t.plus({weeks:n}))},axisParts:()=>Array.from({length:8},(t,e)=>luxon.Duration.fromObject({days:e}))},methods:{isToday(t){return t.hasSame(luxon.DateTime.now().setZone(this.timezone),"day")}},template:'\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t'}},props:{currentDate:{type:luxon.DateTime,required:!0}},emits:["update:currentDate","update:range","click","requestModalOpen"],data(){return{focusDate:this.currentDate,rangeOffset:0}},computed:{range(){let t=this.focusDate.startOf("month").startOf("week",{useLocaleWeeks:!0}),e=t.plus({days:41}).endOf("day");if(0!=this.rangeOffset){const n=this.focusDate.plus({months:this.rangeOffset}).startOf("month").startOf("week",{useLocaleWeeks:!0});this.rangeOffset<0?t=n:e=n.plus({days:41}).endOf("day")}return luxon.Interval.fromDateTimes(t,e)}},watch:{currentDate(){this.currentDate.locale!=this.focusDate.locale?(this.focusDate=this.currentDate,this.$emit("update:range",this.range)):(this.rangeOffset=this.currentDate.startOf("month").diff(this.focusDate.startOf("month"),"months").months,this.rangeOffset&&(this.$emit("update:range",this.range),this.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage)))}},methods:{prevPage(){this.rangeOffset=this.$refs.slider.target-1,this.$emit("update:range",this.range),this.$refs.slider.prevPage().then(this.updatePage)},nextPage(){this.rangeOffset=this.$refs.slider.target+1,this.$emit("update:range",this.range),this.$refs.slider.nextPage().then(this.updatePage)},updatePage(t){const e=this.focusDate.plus({months:t});this.focusDate=e,this.rangeOffset=0,this.$emit("update:currentDate",this.focusDate),this.$emit("update:range",this.range)},viewAttrs(t){return{day:this.focusDate.plus({months:t})}},handleClickDefaults(t){switch(t.detail.source){case"week":let e=luxon.DateTime.fromObject({localWeekNumber:t.detail.value.number,localWeekYear:t.detail.value.year},{zone:this.currentDate.zoneName,locale:this.currentDate.locale});this.focusDate.hasSame(e.startOf("week",{useLocaleWeeks:!0}),"month")?this.focusDate.hasSame(e.endOf("week",{useLocaleWeeks:!0}),"month")||this.$emit("update:currentDate",e.endOf("week",{useLocaleWeeks:!0})):this.$emit("update:currentDate",e.startOf("week",{useLocaleWeeks:!0}));break;case"day":this.$emit("update:currentDate",t.detail.value);break;case"event":this.$emit("requestModalOpen",{event:t.detail.value})}}},mounted(){this.$emit("update:range",this.range)},template:'\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t'},Rt={name:"CalendarLvPlan",components:{FhcCalendar:Dt},inject:["renderers"],props:{timezone:{type:String,required:!0},date:{type:[Date,String,Number,luxon.DateTime],default:luxon.DateTime.local()},mode:{type:String,default:"Week"},getPromiseFunc:{type:Function,required:!0}},emits:["update:date","update:mode","update:range"],data(){return{modes:{day:Vue.markRaw(Mt),week:Vue.markRaw(Lt),month:Vue.markRaw(Nt)},modeOptions:{day:{emptyMessage:Vue.computed(()=>this.$p.t("lehre/noLvFound")),emptyMessageDetails:Vue.computed(()=>this.$p.t("lehre/noLvFound"))},week:{collapseEmptyDays:!1}},teachingunits:null}},computed:{backgrounds(){let t=luxon.DateTime.now().setZone(this.timezone);return"Month"==this.mode?[{class:"background-past",end:t.startOf("day")}]:[{class:"background-past",end:t,label:t.startOf("minute").toISOTime({suppressSeconds:!0,includeOffset:!1})}]}},methods:{eventStyle(t){if(t.farbe)return"--event-bg:#"+t.farbe},updateRange(t){this.rangeInterval=t,this.$emit("update:range",t)}},setup(t,e){const n=Vue.ref(null),{events:i,lv:a}=function(t,e){let n=0;const i=Vue.ref([]),a=Vue.ref([]),s=Vue.computed(()=>i.value.concat(a.value)),r=Vue.ref(null),o=[],l=(t,e)=>Array.isArray(t)?e.concat(t):(e.push(t),e),d=(t,i)=>{let s=[];if(o.length)if(o[o.length-1]+1==t.ts)o[o.length-1]=i.ts;else if(o[o.length-1]i.ts)o.unshift(t.ts,i.ts);else{let e=o.findIndex(e=>e>=t.ts);if(e%2){if(o[e]>=i.ts)return[];let n=e==o.length-1;if(n||o[e+1]>i.ts){let a=o[e]+1;t=t.plus(a-t.ts),n||o[e+1]!=i.ts+1?o[e]=i.ts:o.splice(e,2)}else{if(o[e+2]=i.ts)return[];let n=o[e+1]+1;s=l(d(t.plus(n-t.ts),i),s)}else{if(o[e+1]=i.ts?s:(a.value.push({loading_id:n++,type:"loading",isostart:t.toISODate()+"T"+t.toISOTime(),isoend:i.toISODate()+"T"+i.toISOTime()}),l(e(t,i),s))};return Vue.watchEffect(()=>{const e=Vue.toValue(t);if(!(e instanceof luxon.Interval))return;const n=d(e.start,e.end);Promise.allSettled(n).then(t=>{t.forEach(t=>{"fulfilled"===t.status&&"success"===t.value.meta.status&&(t.value.meta.lv&&(r.value=t.value.meta.lv),i.value=i.value.concat(t.value.data),a.value=[])})})}),{events:s,lv:r}}(n,t.getPromiseFunc);return Vue.watch(a,t=>{e.emit("update:lv",t)}),{rangeInterval:n,events:i,lv:a}},created(){this.$api.call(Et.getStunden()).then(t=>this.teachingunits=t.data.map(t=>({id:t.stunde,start:t.beginn,end:t.ende})))},template:'\n\t\n\t\t\n\t\t\n\t'},Bt={getAuthUID:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthUID"}),getAuthInfo:()=>({method:"get",url:"/api/frontend/v1/AuthInfo/getAuthInfo"})};var jt={name:"LvPlanLehrveranstaltung",components:{FhcCalendar:Rt},props:{viewData:Object,propsViewData:Object},data:()=>({lv:null}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},currentLv(){return isNaN(parseInt(this.propsViewData?.lv_id))?null:this.propsViewData.lv_id},lvTitle(){return null===this.currentLv?"":this.lv?"English"===this.$p.user_language.value?this.lv.bezeichnung_english:this.lv.bezeichnung:""}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"LvPlan",params:{mode:n,focus_date:i,lv_id:this.currentLv}})},getPromiseFunc(t,e){return[this.$api.call(Et.eventsLv(this.propsViewData.lv_id,t.toISODate(),e.toISODate())),this.$api.call(Et.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){null!==this.currentLv&&this.$api.call(Et.getLv(this.propsViewData?.lv_id)).then(t=>{this.lv=t.data})},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t(\'lehre/noLvFound\') }}\n\t\t
    \n\t\t\n\t
    '};var Ut={name:"LvPlanPersonal",components:{FhcCalendar:Rt},props:{viewData:Object,propsViewData:Object},data:()=>({studiensemester_kurzbz:null,studiensemester_start:null,studiensemester_ende:null,uid:null,isMitarbeiter:!1,isStudent:!1}),computed:{currentDay(){return!this.propsViewData?.focus_date||isNaN(new Date(this.propsViewData?.focus_date))?luxon.DateTime.now().setZone(this.viewData.timezone).toISODate():this.propsViewData?.focus_date},currentMode(){return this.propsViewData?.mode&&["day","week","month"].includes(this.propsViewData?.mode.toLowerCase())?this.propsViewData?.mode:"Week"},downloadLinks(){if(!this.studiensemester_start||!this.studiensemester_ende||!this.uid)return!1;let t=!1;if(t=this.isStudent?"student":t,t=this.isMitarbeiter?"lektor":t,!1===t)return;const e={zone:this.viewData.timezone},n=luxon.DateTime.fromISO(this.studiensemester_start,e).toUnixInteger(),i=luxon.DateTime.fromISO(this.studiensemester_ende,e).toUnixInteger(),a=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/lvplan/stpl_kalender.php?type="+t+"&pers_uid="+this.uid+"&begin="+n+"&ende="+i;return[{title:"excel",icon:"fa-solid fa-file-excel",link:a+"&format=excel"},{title:"csv",icon:"fa-solid fa-file-csv",link:a+"&format=csv"},{title:"ical1",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=1&target=ical"},{title:"ical2",icon:"fa-regular fa-calendar",link:a+"&format=ical&version=2&target=ical"}]}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"MyLvPlan",params:{mode:n,focus_date:i}})},updateRange(t){this.$api.call(Et.studiensemesterDateInterval(t.end.startOf("week").toISODate())).then(t=>{this.studiensemester_kurzbz=t.data.studiensemester_kurzbz,this.studiensemester_start=t.data.start,this.studiensemester_ende=t.data.ende})},getPromiseFunc(t,e){return[this.$api.call(Et.eventsPersonal(t.toISODate(),e.toISODate())),this.$api.call(Et.getLvPlanReservierungen(t.toISODate(),e.toISODate()))]}},created(){this.$api.call(Bt.getAuthInfo()).then(t=>{this.uid=t.data.uid,this.isMitarbeiter=t.data.isMitarbeiter,this.isStudent=t.data.isStudent})},template:'\n\t
    \n\t\t

    \n\t\t\t{{ $p.t(\'lehre/stundenplan\') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t'},Vt={components:{BsModal:s},mixins:[s],props:{pruefungenData:null|Array,bezeichnung:String,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data:()=>({result:!0}),mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this)(null,t)},template:'\n\t\t\n\t\t\n\t'},Ht={getStudentenMail:t=>({method:"get",url:"/api/frontend/v1/Lehre/lvStudentenMail",params:{lehreinheit_id:t}}),getLvInfo:(t,e)=>({method:"get",url:`/api/frontend/v1/Lehre/LV/${t}/${e}`}),getStudentPruefungen:t=>({method:"get",url:`/api/frontend/v1/Lehre/Pruefungen/${t}`})};const qt={};var Gt={props:{studien_semester:String,lehrveranstaltung_id:Number},data:()=>({bezeichnung:null,studiengang_kuerzel:null,semester:null,orgform_kurzbz:null,sprache:null,ects:null,incoming:null,result:!0,info:null}),computed:{lektorNamesLinks(){let t={};return this.info.lektoren.forEach(e=>{let n=((e.titelpre||"")+" "+(e.vorname||"")+" "+(e.nachname||"")+" "+(e.titelpost||"")).trim();t[n]=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/Profil/View/${e.uid}`}),t},lektorNames(){return this.info.lektoren.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim())},lvLeitung(){return this.info.lvLeitung&&this.info.lvLeitung.length?this.info.lvLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},oe(){return this.info.oe.organisationseinheittyp?this.info.oe.organisationseinheittyp+" "+this.info.oe.bezeichnung:""},oeLeitung(){return this.info.oeLeitung&&this.info.oeLeitung.length?this.info.oeLeitung.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):["-"]},koordinator(){return this.info.koordinator&&this.info.koordinator.length?this.info.koordinator.map(t=>((t.titelpre||"")+" "+(t.vorname||"")+" "+(t.nachname||"")+" "+(t.titelpost||"")).trim()):null},currentLang(){return this.info?this.info.lastLang?this.info.lastLang:this.info.lvinfo?this.info.lvinfoDefaultLang&&this.info.lvinfo[this.info.lvinfoDefaultLang]?this.info.lvinfoDefaultLang:Object.keys(this.info.lvinfo).shift():null:null}},created(){this.$api.call(Ht.getLvInfo(this.studien_semester,this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{Object.assign(this,{bezeichnung:t.bezeichnung,studiengang_kuerzel:t.studiengang_kuerzel,semester:t.semester,orgform_kurzbz:t.orgform_kurzbz,sprache:t.sprache,ects:t.ects,incoming:t.incoming??"-"})}),qt[this.lehrveranstaltung_id]?this.info=qt[this.lehrveranstaltung_id]:axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Info/"+this.studien_semester+"/"+this.lehrveranstaltung_id).then(t=>{this.info=qt[this.lehrveranstaltung_id]=t.data.retval||[]}).catch(()=>this.info={})},template:'\n\t\t\t

    {{$p.t(\'lvinfo/lehrveranstaltungsinformationen\')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t(\'lehre/lehrveranstaltung\')}}{{bezeichnung}}
    {{$p.t(\'lehre/studiengang\')}}{{studiengang_kuerzel}}
    {{$p.t(\'lehre/semester\')}}{{semester}}
    {{$p.t(\'lehre/studiensemester\')}}{{studien_semester}}
    {{$p.t(\'lehre/organisationsform\')}}{{orgform_kurzbz}}
    {{$p.t(\'lehre/lehrbeauftragter\')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t(\'lehre/lvleitung\')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t(\'global/sprache\')}}{{sprache}}
    {{$p.t(\'lehre/ects\')}}{{ects}}
    {{$p.t(\'lehre/incomingplaetze\')}}{{incoming}}
    {{$p.t(\'lehre/organisationseinheit\')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t(\'global/leitung\')}}: {{oeLeitung.join(\', \')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    '};const Jt={},Wt={};function Zt(t,e){return t.filter(t=>t.category==e).reduce((t,e)=>(t[e.phrase]||(t[e.phrase]=e.text),t),{})}function Kt(t){for(;Wt[t].length;){var e=Wt[t].pop();e[0].value=Yt(t,e[1],e[2]),Vue.triggerRef(e[0])}}function Yt(t,e,n){let i=Jt[t][e];return i?(n&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),i):"<< PHRASE "+e+">>"}const Qt={t_ref(t,e,n){if(void 0===n&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(n=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input"),"";if(!Jt[t]){var i="";if(void 0!==window.FHC_JS_PHRASES_STORAGE_OBJECT){var a=Zt(FHC_JS_PHRASES_STORAGE_OBJECT,t);void 0!==a[e]&&(i=a[e])}if(!Jt[t]||0===Object.keys(Jt[t]).length){Jt[t]=void 0;let a=Vue.ref(i);return function(t,e,n,i){if(Wt[t])return Wt[t].push([e,n,i]),void(Jt[t]&&Kt(t));Wt[t]=[[e,n,i]],axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Phrasen/loadModule/"+t).then(e=>{e.data.retval?Jt[t]=Zt(e.data.retval,t):Jt[t]={},Kt(t)}).catch(t=>console.error(t))}(t,a,e,n),a}}var s=Yt(t,e,n);return Vue.ref(s)},t(t,e,n){return Vue.unref(this.t_ref(t,e,n))}};var Xt={data:()=>({p:Qt})},te={props:{menu:{type:Array,default:null},containerStyles:Array,rowStyles:Array,hasLvPlanEintraege:{required:!1,default:!0,type:Boolean}},data:()=>({}),methods:{c4_disabled:function(t){return!this.c4_link(t)&&!t.c4_moodle_links?.length||("addon_fhtw_menu_lvplan_lva"==t.id&&!this.hasLvPlanEintraege||null)},c4_target:function(t){return t.c4_moodle_links?.length>0?null:t.c4_target??null},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?null:t.c4_link??null:null,getMenuName(t){return t.phrase?this.$p.t(t.phrase):t.name}},template:'\n\t
    {{$p.t(\'lehre\',\'lehrveranstaltungsUnavailable\')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},ee={getLvMenu:(t,e)=>({method:"get",url:`/api/frontend/v1/LvMenu/getLvMenu/${t}/${e}`})},ne={props:{event:{type:Object,required:!0,default:null},studiensemester:{type:String,required:!1,default:null},titel:{type:String,required:!1,default:null},preselectedMenu:{type:Object,required:!1,default:null}},data:()=>({result:!1,menu:[],isMenuSelected:!1,hasLvPlanEintraege:!0,lvEvaluierungMessage:""}),mixins:[s],components:{BsModal:s,LvMenu:te},inject:["studium_studiensemester"],methods:{hiddenModal:function(){this.isMenuSelected=!1},showModal:function(){if(this.preselectedMenu?this.isMenuSelected=!0:this.$api.call(ee.getLvMenu(this.event.lehrveranstaltung_id,this.studiensemester??this.event.studiensemester_kurzbz)).then(t=>{t.data&&(this.menu=t.data)}),this.studium_studiensemester&&this.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{this.lvEvaluierungMessage=t.message}),this.studiensemester&&this.event)return this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester,this.event.lehreinheit_id??this.event.lehrveranstaltung_id).then(t=>t.data).then(t=>{Array.isArray(t)&&t.length>0?this.hasLvPlanEintraege=!0:this.hasLvPlanEintraege=!1})}},mounted(){this.modal=this.$refs.modalContainer},beforeUnmount(){this.$refs.modalContainer.hide()},template:'\n \n\n\t\t\n \n \n \n\n \n '},ie={components:{MylvSemesterStudiengang:{components:{MylvSemesterStudiengangLv:{components:{LvUebersicht:ne},mixins:[Xt],inject:["studien_semester"],props:{lehrveranstaltung_id:Number,bezeichnung:String,bezeichnung_eng:String,module:String,farbe:String,lvinfo:Boolean,benotung:Boolean,lvnote:String,lvnotebez:Array,znote:String,znotebez:Array,studiengang_kuerzel:String,semester:[String,Number],orgform_kurzbz:String,sprache:String,ects:String,incoming:Number,positiv:Boolean,note_index:String},data:()=>({pruefungenData:null,info:null,menu:null,preselectedMenuItem:null}),computed:{gradeColor(){if(null!=this.positiv)return this.positiv?"var(--fhc-success)":"var(--fhc-danger)"},is_organisatorische_einheit(){return"organisatorische_einheit"==this.menu},emptyMenu(){return!this.menu||!Array.isArray(this.menu)||Array.isArray(this.menu)&&0==this.menu.length},bodyStyle:()=>({}),grade(){const t="English"===this.$p.user_language.value?1:0;return this.benotung&&this.znotebez?.length?this.znotebez[t]:this.benotung&&this.lvnotebez?.length?this.lvnotebez[t]:null},LvHasPruefungenInformation(){return this.pruefungenData&&this.pruefungenData.length>0}},methods:{fetchMenu(t=this.lehrveranstaltung_id,e=this.studien_semester){return this.$api.call(ee.getLvMenu(t,e)).then(t=>{this.menu=t.data}).catch(t=>{this.$fhcAlert.handleSystemError(t),this.menu=[]})},c4_link:t=>t?Array.isArray(t.c4_moodle_links)&&t.c4_moodle_links.length?"#":t.c4_link??null:null,openLvOption(t){"core_menu_mailanstudierende"==t.id||"core_menu_digitale_anwesenheitslisten"==t.id?window.location.href=t.c4_link:(this.preselectedMenuItem=t,Vue.nextTick(()=>{this.$refs.lvUebersicht.show()}))},openPruefungen(){this.LvHasPruefungenInformation&&Vt.popup({pruefungenData:this.pruefungenData,bezeichnung:this.bezeichnung})},openInfos(){this.info||(this.info=!0,Gt.popup({lehrveranstaltung_id:this.lehrveranstaltung_id,bezeichnung:this.bezeichnung,bezeichnung_eng:this.bezeichnung_eng,studiengang_kuerzel:this.studiengang_kuerzel,semester:this.semester,studien_semester:this.studien_semester,orgform_kurzbz:this.orgform_kurzbz,sprache:this.sprache,ects:this.ects,incoming:this.incoming}).then(()=>this.info=!1).catch(()=>this.info=!1))}},watch:{studien_semester(t){this.fetchMenu(this.lehrveranstaltung_id,t)}},created(){this.$api.call(Ht.getStudentPruefungen(this.lehrveranstaltung_id)).then(t=>t.data).then(t=>{this.pruefungenData=t})},mounted(){this.fetchMenu(this.lehrveranstaltung_id,this.studien_semester)},template:'
    \n\t\t\n\n\t\t
    \n\t\t\t\x3c!-- {{module}} if the module of the lv is important then query the module from the api endpoint for LV--\x3e\n\t\t\t
    {{ $p.t(\'lehre/organisationseinheit\') }}:
    \n\t\t\t
    {{$p.user_language.value === \'English\' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t
    '}},mixins:[Xt],props:{bezeichnung:String,kuerzel:String,semester:[String,Number],lvs:Array,sg_bezeichnung_eng:String},computed:{lehrveranstaltungen(){return[...new Map(this.lvs.map(t=>[t.lehrveranstaltung_id,t])).values()]}},methods:{note:t=>t.benotung&&(t.znote||t.lvnote)||null},template:'
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === \'English\' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t(\'lehre/semester\')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '}},provide(){return{studien_semester:Vue.computed(()=>this.semester)}},props:{semester:[String,Number],lvs:Array},computed:{ready(){return null!==this.lvs},studiengaenge(){return[...new Map(this.lvs.map(t=>[t.studiengang_kz+"#"+t.semester,{studiengang_kz:t.studiengang_kz,bezeichnung:t.sg_bezeichnung,sg_bezeichnung_eng:t.sg_bezeichnung_eng,kuerzel:t.studiengang_kuerzel,semester:t.semester}])).values()].sort((t,e)=>t.bezeichnung.toLowerCase()==e.bezeichnung.toLowerCase()?t.semester>e.semester:t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase())}},methods:{lvsForStudiengang(t){return this.lvs.filter(e=>e.studiengang_kz==t.studiengang_kz&&e.semester==t.semester)}},template:'
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    '},ae={components:{MylvSemester:ie},mixins:[Xt],data:()=>({firstLoad:!0,studiensemester:null,lvs:{},currentSemester:null}),computed:{ready(){return null!==this.studiensemester&&(!this.firstLoad||null!==this.current.lvs)},current(){return null===this.currentSemester?{semester:null,lvs:[]}:(void 0===this.lvs[this.currentSemester]&&(this.lvs[this.currentSemester]={semester:this.currentSemester,lvs:null},axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/components/Cis/Mylv/Lvs/"+this.currentSemester).then(t=>{this.lvs[this.currentSemester].lvs=t.data.retval||[],this.firstLoad=!1})),this.lvs[this.currentSemester])},nearestSem(){let t=Date.now(),e=null,n=0;return this.studiensemester.forEach(i=>{let a=new Date(i.start),s=new Date(i.ende);if(t>=a&&t<=s)return e=i.studiensemester_kurzbz,void(n=0);let r=Math.min(Math.abs(t-a),Math.abs(t-s));(null===e||r{this.studiensemester=t.data.retval||[];const e=this.$route.params.studiensemester;e&&this.studiensemester.filter(t=>t.studiensemester_kurzbz==e).length?this.currentSemester=e:this.currentSemester=this.nearestSem})},beforeRouteUpdate(t,e,n){t.params.studiensemester&&this.studiensemester.filter(e=>e.studiensemester_kurzbz==t.params.studiensemester).length&&t.params.studiensemester!=this.currentSemester&&(this.currentSemester=t.params.studiensemester),n()},template:'\n\n\t

    {{$p.t(\'lehre/myLV\')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\n\t
    \n\t
    \n\t\t\n\t
    '};const se={emits:["dataFetched"],props:{refresh:{type:Boolean},apiFunction:{required:!0,type:Function},apiFunctionParameters:{}},watch:{refresh:function(t,e){this.fetchData()}},data:function(){return{loading:!1,error:!1,errorMessage:null}},created:function(){this.fetchData()},methods:{fetchData:function(){if(this.loading=!0,this.error=!1,this.errorMessage=null,"function"==typeof this.apiFunction){let t=this.apiFunction(this.apiFunctionParameters);t instanceof Promise?t.then(this.successHandler).catch(this.errorHandler).finally(this.finallyHandler):this.setError("The called apiFunction does not return a Promise")}else this.setError("Property apiFunction is not a function")},setError:function(t){this.loading=!1,this.error=!0,this.errorMessage=t},successHandler:function(t){this.$emit("dataFetched",t?t.data:void 0)},errorHandler:function(t){t.response?.data?.retval?this.setError(t.response.data.retval):t.data?.message?this.setError(t.data.message):this.setError(t.message)},finallyHandler:function(){this.loading=!1}},template:'\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t'},re="Filter Component New Filter";var oe={props:{filters:{type:Array,default:[]},columns:{type:Array,default:[]},fields:{type:Array,default:[]}},emits:{switchFilter:["filterId"],applyFilterConfig:["filterFields"],saveCustomFilter:["customFilterName"]},data:function(){return{currentFields:[]}},computed:{types(){return this.columns.reduce((t,e)=>{let n=e.type.toLowerCase();return n.indexOf("int")>=0?t[e.name]="Numeric":n.indexOf("varchar")>=0||n.indexOf("text")>=0||n.indexOf("bpchar")>=0?t[e.name]="Text":n.indexOf("timestamp")>=0||n.indexOf("date")>=0?t[e.name]="Date":t[e.name]="",t},{})}},watch:{fields(t){this.currentFields=t}},methods:{switchFilter(t){this.$emit("switchFilter",t.currentTarget.value)},applyFilterConfig(){const t=this.currentFields.filter(t=>t.name!=re);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:re})},removeField(t){this.currentFields.splice(t,1)}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\x3c!-- Numeric --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Text --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\x3c!-- Timestamp and date --\x3e\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\x3c!-- Filter save options --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t'},le={props:{fields:Array,selected:{type:Array,default:[]},names:{type:Object,default:{}}},emits:{hide:["fieldName"],show:["fieldName"]},data:function(){return{selectedFields:[]}},watch:{selected(t){this.selectedFields=t}},methods:{toggle(t){-1!=this.selectedFields.indexOf(t)?(this.selectedFields.splice(this.selectedFields.indexOf(t),1),this.$emit("hide",t)):(this.selectedFields.push(t),this.$emit("show",t))}},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t'};const de={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},ce={jsonLines:"Download as JSONLINES",xlsx:"Download as XLSX",pdf:"Download as PDF",html:"Download as HTML",json:"Download as JSON",csv:"Download as CSV "};var ue={props:{tabulator:Object,config:{type:[Boolean,String,Function,Array,Object],default:!1},iconClass:[String,Array,Object]},computed:{currentConfig(){if(!this.config)return!1;let t=this.config;if(t instanceof Function)return[t];if(null===t)return[];if(!0===this.config&&(t=["csv"]),"[object String]"===Object.prototype.toString.call(t)&&(t=t.split(",")),"object"==typeof t&&!Array.isArray(t)){let a=[];for(var e in t){var n,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(n=this.stringToFileFormatter(i))?a.push({icon:"fa-solid "+de[n],label:i===e?ce[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+de[n],label:i,formatter:n}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(n=this.stringToFileFormatter(e))?a.push({icon:"fa-solid "+de[n],label:ce[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=n),void 0===i.label&&(i.label=ce[n]),void 0===i.icon&&(i.icon=de[n]),a.push(i)):(void 0===i.label&&(i.label=e),a.push(i)))}t=a}if(Array.isArray(t)){if(t=t.map(t=>{if("[object String]"===Object.prototype.toString.call(t)){let e=this.stringToFileFormatter(t);return null===e?null:{icon:"fa-solid "+de[e],label:ce[e],formatter:e}}if(t instanceof Function)return{formatter:t};if("object"==typeof t&&!Array.isArray(t)&&null!==t){if(t.formatter instanceof Function)return t;if(this.validateFileFormatter(t.formatter))return t}return null}).filter(t=>null!==t),t.length<2)return t;if(t.filter(t=>t.label||t.icon).length==t.length)return t;alert("Config not valid")}return[]}},methods:{stringToFileFormatter(t){let e=t.toLowerCase();return"jsonlines"==e?"jsonLines":["xlsx","pdf","html","json","csv"].includes(e)?e:null},validateFileFormatter(t){let e=this.stringToFileFormatter(t);if(!e)return alert(t+" is not a supported file formatter"),!1;if("xlsx"==e&&!window.XLSX)return alert("XLSX Library not loaded"),!1;if("pdf"==e){if(!window.jspdf)return alert("jsPDF Library not loaded"),!1;if(!new jspdf.jsPDF({}).autoTable)return alert("jsPDF-AutoTable Plugin not loaded"),!1}return!0},download(t){this.tabulator.download(t.formatter,t.file,t.options)}},template:'\n\t\n\t'};const pe=new WeakMap;var he={mounted(t,e){let n=!1;pe.set(t,e=>{if(!n)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{n=!0}),t.addEventListener("hide.bs.collapse",()=>{n=!1}),document.addEventListener("click",pe.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",pe.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var n=0,i=this.table.rowManager.element.clientWidth,a=0,s=!1;t.forEach((t,e)=>{t.widthFixed||t.reinitializeWidth(),(this.table.options.responsiveLayout?t.modules.responsive.visible:t.visible&&!t.definition.frozen)&&(s=t),t.visible&&(n+=t.getWidth())}),s?(a=i-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),a>0?s.setWidth(a):s.reinitializeWidth()):this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update()}});var me={saveCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/saveCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,customFilterName:t.customFilterName}}),removeCustomFilter:t=>({method:"post",url:"/api/frontend/v1/filter/removeCustomFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),applyFilterFields:t=>({method:"post",url:"/api/frontend/v1/filter/applyFilterFields",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterFields:t.filterFields}}),addFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/addFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),removeFilterField:t=>({method:"post",url:"/api/frontend/v1/filter/removeFilterField",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterField:t.filterField}}),getFilterById:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType,filterId:t.filterId}}),getFilter:t=>({method:"get",url:"/api/frontend/v1/filter/getFilter",params:{filterUniqueId:t.filterUniqueId,filterType:t.filterType}})},ge=0;const fe={components:{CoreFetchCmpt:se,FilterConfig:oe,FilterColumns:le,TableDownload:ue},directives:{collapseAutoClose:he},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined","headerFilterOn"],props:{onNwNewEntry:Function,title:String,description:String,sideMenu:{type:Boolean,default:!0},filterType:{type:String},tabulatorOptions:Object,tabulatorEvents:Array,tableOnly:Boolean,noColumnFilter:Boolean,reload:Boolean,reloadBtnInfotext:String,download:{type:[Boolean,String,Function,Array,Object],default:!1},newBtnShow:Boolean,newBtnClass:[String,Array,Object],newBtnDisabled:Boolean,newBtnLabel:String,uniqueId:String,idField:String,parentIdField:String,countOnly:Boolean,useSelectionSpan:{type:Boolean,default:!0}},data:function(){return{uuid:0,filterName:null,filterActive:!1,fields:null,dataset:null,datasetMetadata:null,selectedFields:null,filterFields:null,availableFilters:null,selectedFilter:null,fetchCmptRefresh:!1,fetchCmptApiFunction:null,fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchResult:null,tabulator:null,tableBuilt:!1,tabulatorHasSelector:!1,selectedData:[],persistence:{sort:!0,columns:!0,filter:!1,headerFilter:!1,group:!1,page:!1}}},computed:{notSelectedFields(){return this.fields&&this.selectedFields?this.fields.filter(t=>-1===this.selectedFields.indexOf(t)):null},filteredData(){return this.dataset?JSON.parse(JSON.stringify(this.dataset)):[]},filteredColumns(){let t=JSON.parse(JSON.stringify(this.fields))||[],e=JSON.parse(JSON.stringify(this.selectedFields))||[],n=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(n=this.tabulatorOptions.columns),!Array.isArray(n)||Array.isArray(n)&&n.length=0,n.push(t)}}else for(let i of n)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return n},fieldIdsForVisibilty(){return this.tableBuilt?this.tabulator.getColumns().filter(t=>{let e=t.getDefinition();return!e.frozen&&e.title&&"responsiveCollapse"!=e.formatter}).map(t=>t.getField()):[]},fieldNames(){return this.tableBuilt?this.tabulator.getColumns().reduce((t,e)=>(t[e.getField()]=e.getDefinition().title,t),{}):{}},idExtra(){return this.uuid?"-"+this.uuid:""},columnsForFilter(){if(!this.filteredColumns||!this.datasetMetadata)return[];const t=this.filteredColumns.reduce((t,e)=>(t[e.field]=e.title,t),{});return this.datasetMetadata.map(e=>({...e,title:t[e.name]}))}},methods:{reloadTable(){this.tableOnly?this.tabulator.setData():this.getFilter()},async initTabulator(){let t="< Phrasen Plugin not loaded! >";this.$p&&(await this.$p.loadCategory("ui"),t=this.$p.t("ui/keineDatenVorhanden")),this.tableOnly||await new Promise(t=>{const e=window.location.hash?window.location.hash.slice(1):null,n=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(me.getFilter(t)),null,n):this.startFetchCmpt(t=>this.$api.call(me.getFilterById(t)),{filterId:e},n)});let e={layout:"fitDataStretchFrozen",movableColumns:!0,columnDefaults:{tooltip:!0},placeholder:t,persistence:this.persistence,...this.tabulatorOptions||{}};if(void 0===e.height&&void 0===e.minHeight&&void 0===e.maxHeight&&(e.height=500),this.tableOnly?e.columns.forEach(t=>{void 0===t.visible&&(t.visible=!0)}):(e.data=this.filteredData,e.columns=this.filteredColumns),(e.selectable||e.selectableRows||e.columns&&e.columns.filter(t=>"rowSelection"==t.formatter).length)&&(this.tabulatorHasSelector=!0),this.idField&&(this.parentIdField&&(e.dataTree=!0),e.index=this.idField),this.tabulator=new Tabulator(this.$refs.table,e),Array.isArray(this.tabulatorEvents)&&this.tabulatorEvents.length>0)for(let t of this.tabulatorEvents)this.tabulator.on(t.event,t.handler);this.tabulator.on("tableBuilt",()=>{this.tableBuilt=!0,this.$emit("tableBuilt")}),this.tabulator.on("rowSelectionChanged",t=>{this.selectedData=t}),this.parentIdField&&this.idField&&this.tabulator.on("dataLoading",t=>{let e=[];for(let n=0;n{const t=this.tabulator.getColumns();this.fields=t.map(t=>t.getField()),this.selectedFields=t.filter(t=>t.isVisible()).map(t=>t.getField()),this.tabulator.options.persistence.headerFilter&&this._setHeaderFilter()}),this.tabulator.on("dataFiltered",t=>{this.filterActive=t.length>0,this.$emit("headerFilterOn",this.filterActive)})},updateTabulator(){this.tabulator&&(this.tableBuilt?this._updateTabulator():this.tabulator.on("tableBuilt",this._updateTabulator))},_updateTabulator(){this.tabulatorHasSelector=this.tabulatorOptions.selectable||this.tabulatorOptions.selectableRows||this.filteredColumns.filter(t=>"rowSelection"==t.formatter).length,this.tabulator.setColumns(this.filteredColumns),this.tabulator.setData(this.filteredData),this._setHeaderFilter()},clearFilters(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,"")}),this.tabulator.clearFilter(),this.filterActive=!1},_setHeaderFilter(){this.tabulator.getHeaderFilters().forEach(t=>{this.tabulator.setHeaderFilterValue(t.field,t.value)})},getFilter(){null===this.selectedFilter?this.startFetchCmpt(t=>this.$api.call(me.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(me.getFilterById(t)),{filterId:this.selectedFilter},this.render)},setRenderData(t){this.fetchResult=t,this.filterName=t.filterName,this.dataset=t.dataset,this.datasetMetadata=t.datasetMetadata,this.fields=t.fields,this.selectedFields=t.selectedFields,this.filterFields=[];for(let e=0;ethis.$api.call(me.saveCustomFilter(t)),{customFilterName:t},this.getFilter)},handlerRemoveCustomFilter(t){let e=t.currentTarget.getAttribute("href").substring(1);e===this.selectedFilter&&(this.selectedFilter=null),this.startFetchCmpt(t=>this.$api.call(me.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,n=t.currentTarget.getAttribute("href");e=null==n?t.currentTarget.value:n.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(me.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let n=e[this.parentIdField];for(let i=0;i{this.tableOnly||(this.selectedFilter=window.location.hash?window.location.hash.slice(1):null,this.render(this.fetchResult))})},template:'\n\t\t\x3c!-- Load filter data --\x3e\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\x3c!-- Tabulator --\x3e\n\t\t
    \n\t'};var ve={props:{data:Object,title:{type:String}},data:()=>({}),created(){},template:'\n\t'},be={props:{data:{type:String}},data:()=>({}),template:"\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    "},ye={props:{data:{type:String},title:{type:String,required:!0},mobile:{type:Boolean,default:!1}},methods:{hideCollapse:function(){this.collapseOpen=!1},showCollapse:function(){this.collapseOpen=!0}},data:()=>({collapseOpen:!1}),template:'\n
    \n \n \n
    '},we={props:{data:Object,view:String,withZustelladresse:{type:Boolean,default:!0}},data:()=>({}),created(){},template:'\n \n
    \n \n \x3c!-- column 1 in the address row --\x3e\n
    \n \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}
    \n {{data.strasse}} \n
    \n
    \n \n \x3c!-- column 2 in the address row --\x3e\n
    \n
    \n
    {{$p.t(\'global\',\'typ\')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'person\',\'zustelladresse\')}}
    \n
    \n \n
    \n
    \n
    \n
    \n'},ke={props:{view:String,data:Object},data:()=>({}),created(){},template:'\n\t\n'},_e={data:()=>({}),props:{title:{type:String,required:!0},data:{type:Array}},template:'\n
    \n
    \n {{title}}\n
    \n
    \n \x3c!-- HIER SIND DIE EMAILS --\x3e\n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    '},Ae={data:()=>({}),props:{data:{type:Object},title:{type:String}},inject:{studiengang_kz:{from:"studiengang_kz",default:!1}},computed:{getLinkGruppeListe(){return!1===this.studiengang_kz?"":this.data.gruppe?.value&&this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value+"&grp="+this.data.gruppe.value:""},getLinkVerbandListe(){return!1===this.studiengang_kz?"":this.data.verband?.value&&this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value+"&verband="+this.data.verband.value:""},getLinkSemesterListe(){return!1===this.studiengang_kz?"":this.data.semester?.value?FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/stud_in_grp.php?kz="+this.studiengang_kz+"&sem="+this.data.semester.value:""}},created(){},template:'\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\x3c!-- print Telefon link --\x3e\n\t\t\t\t\t\t{{entry.value ?? \'-\'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print semester link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print verband link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- print gruppe link --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\x3c!-- else print information --\x3e\n\t\t\t\t\t\t{{ entry.value ?? \'-\'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    '},$e={profilViewData(t){let e="/api/frontend/v1/Profil/profilViewData";return t&&(e+=`/${t}`),{method:"get",url:e}},fotoSperre:t=>({method:"get",url:`/api/frontend/v1/Profil/fotoSperre/${t}`}),isStudent:t=>({method:"get",url:"/api/frontend/v1/Profil/isStudent",params:{uid:t}}),isMitarbeiter:t=>({method:"get",url:`/api/frontend/v1/Profil/isMitarbeiter/${t}`}),getZustellAdresse:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellAdresse"}),getZustellKontakt:()=>({method:"get",url:"/api/frontend/v1/Profil/getZustellKontakt"}),getGemeinden:(t,e)=>({method:"get",url:`/api/frontend/v1/Profil/getGemeinden/${t}/${e}`}),getAllNationen:()=>({method:"get",url:"/api/frontend/v1/Profil/getAllNationen"})},xe={components:{DmsItem:{emits:["delete"],props:{modelValue:{type:[File,Object],required:!0}},data:()=>({preview:""}),watch:{modelValue(t){"application/x.fhc-dms+json"==t.type&&t.text().then(t=>{const e=JSON.parse(t);this.preview=e.preview||""})}},template:'\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • '}},emits:["update:modelValue"],props:{modelValue:{type:[FileList,Array],required:!0},multiple:Boolean,id:String,name:String,inputClass:[String,Array,Object],noList:Boolean,accept:{type:String,default:""},disabled:{type:Boolean,default:!1}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),addFiles(t){if(!this.multiple)return this.$emit("update:modelValue",t.target.files);const e=new DataTransfer,n=[];for(var i of this.modelValue)e.items.add(i),n.push(this.stringifyFile(i));for(var i of t.target.files)n.indexOf(this.stringifyFile(i))<0&&e.items.add(i);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],n=new DataTransfer;for(var i of this.modelValue)i!==e&&n.items.add(i);this.$emit("update:modelValue",n.files)}},watch:{modelValue(t){if(!t)return;if(t instanceof FileList){if(!this.$refs.upload)return;return this.$refs.upload.files=t}const e=new DataTransfer;for(var n of t)if(n instanceof File)e.items.add(n);else{const t=new File([JSON.stringify(n)],n.name,{type:"application/x.fhc-dms+json"});e.items.add(t)}this.$emit("update:modelValue",e.files)}},template:'\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    '},Se={ //! API calls for profil update requests getStatus:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getStatus"}),getTopic:()=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getTopic"}),acceptProfilRequest:({profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/acceptProfilRequest",params:{profil_update_id:t,uid:e,status_message:n,topic:i,requested_change:a}}),denyProfilRequest:({profil_update_id:t,uid:e,topic:n,status_message:i})=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/denyProfilRequest",params:{profil_update_id:t,uid:e,topic:n,status_message:i}}),insertFile:(t,e=null)=>({method:"post",url:`/api/frontend/v1/ProfilUpdate/insertFile/${e}`,params:t}),updateProfilbild:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilbild",params:t}),getProfilUpdateWithPermission:t=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission"+(""!==t?"/"+encodeURIComponent(t):"")}),getProfilRequestFiles:t=>({method:"get",url:`/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${t}`}),selectProfilRequest:(t=null,e=null)=>({method:"get",url:"/api/frontend/v1/ProfilUpdate/selectProfilRequest",params:{...t?{uid:t}:{},...e?{id:e}:{}}}),insertProfilRequest:(t,e,n=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/insertProfilRequest",params:{topic:t,payload:e,...n?{fileID:n}:{}}}),updateProfilRequest:(t,e,n,i=null)=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/updateProfilRequest",params:{topic:t,payload:e,ID:n,...i?{fileID:i}:{}}}),deleteProfilRequest:t=>({method:"post",url:"/api/frontend/v1/ProfilUpdate/deleteProfilRequest",params:{requestID:t}})},ze={data:()=>({dmsData:[]}),components:{Dms:xe,BsModal:s},mixins:[s],props:{titel:{type:String},files:{type:Array},updateID:{type:Boolean},onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},methods:{async uploadImage(){if(this.dmsData){let t=new FormData;t.append("files[]",this.dmsData[0]),await this.$api.call(Se.updateProfilbild(t)).then(t=>{this.$fhcAlert.alertSuccess(this.$p.t("global","hochgeladen")),this.modal.hide()})}}},mounted(){this.modal=this.$refs.modalContainer.modal,this.files&&(this.dmsData=this.files)},popup(t){return s.popup.bind(this),s.popup(null,t)},template:'\n\n\t\n\t\t\n\t\t\n\t\n '},Te={props:{title:{type:String},data:{type:Object},fotoStatus:{type:Boolean,default:!0}},components:{ImageUpload:ze},data(){return{FotoSperre:this.data.foto_sperre}},emits:["showEditProfilModal"],inject:["isEditable"],methods:{showModal(){this.$refs.imageUpload.show()},sperre_foto_function(){this.data&&this.$api.call($e.fotoSperre(!this.FotoSperre)).then(t=>{this.FotoSperre=t.data.foto_sperre})}},computed:{get_image_base64_src:function(){return this.data.foto?"data:image/jpeg;base64,"+this.data.foto:""},name:function(){return{vorname:this.data.Vorname,nachname:this.data.Nachname}},profilInfo:function(){let t={},e=["Vorname","Nachname","foto_sperre","foto"];return Object.keys(this.data).forEach(n=>{e.includes(n)||(t[n]=this.data[n])}),t}},template:'\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \x3c!-- SQUEEZING THE IMAGE INSIDE THE FIRST INFORMATION COLUMN --\x3e\n \x3c!-- START OF THE FIRST ROW WITH THE PROFIL IMAGE --\x3e\n
    \n
    \n
    \n profile picture\n \x3c!-- LOCKING IMAGE FUNCTIONALITY --\x3e\n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \x3c!-- END OF THE ROW WITH THE IMAGE --\x3e\n
    \n \x3c!-- END OF SQUEEZE --\x3e\n \x3c!-- COLUMNS WITH MULTIPLE ROWS NEXT TO PROFIL PICTURE --\x3e\n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'vorname\')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'nachname\')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profil\',bez)}}
    \n {{wert?wert:\'-\'}} \n
    \n
    \n
    \n
    \n
    \n'},De={name:"EditProfilSelect",components:{Kontakt:ke,EditKontakt:{props:{data:Object},data:()=>({originalValue:null,zustellKontakteCount:null}),inject:["getZustellkontakteCount"],methods:{updateValue:function(t,e){this.data[e]="zustellung"===e?t.target.checked:""===t.target.value?null:t.target.value,this.$emit("profilUpdate",this.isChanged?this.data:null),this.zustellKontakteCount=this.getZustellkontakteCount()}},computed:{showZustellKontakteWarning:function(){if(JSON.parse(this.originalValue).zustellung)return!1;const t=this.zustellKontakteCount.filter(t=>t.kontakttyp===this.data?.kontakttyp);return this.zustellKontakteCount.some(t=>t.kontakt_id===this.data.kontakt_id)?this.kontakteOfSelectedType.length>=2&&this.data.zustellung:this.data.zustellung&&t.length},isChanged:function(){return!(!this.data.kontakt||!this.data.kontakttyp)&&JSON.stringify(this.data)!==this.originalValue}},created(){this.originalValue=JSON.stringify(this.data),this.zustellKontakteCount=this.getZustellkontakteCount()},template:'\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t(\'profilUpdate\',\'kontaktTyp\')}}
    \n\n \n
    \n\n
    \n
    \n\n \x3c!-- rendering KONTAKT emails --\x3e\n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t(\'global\',\'kontakt\')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t(\'global\',\'anmerkung\')}}
    \n\n \n
    \n\n
    \n\n \x3c!-- warning message for too many zustellungs Kontakte --\x3e\n
    \n
    \n {{$p.t(\'profilUpdate\',\'zustell_kontakte_warning\')}}\n
    \n
    \n \x3c!-- End of warning --\x3e\n\n
    \n {{$p.t(\'profilUpdate\',\'zustellungsKontakt\')}}\n\n \n
    \n
    \n '},Adresse:we,EditAdresse:{components:{AutoComplete:primevue.autocomplete,Dms:xe},props:{data:Object,files:{type:Array,default:[]}},inject:["getZustelladressenCount","updateFileID","isMitarbeiter"],data:()=>({gemeinden:[],ortschaftnamen:[],selectedNation:null,nationenList:[],originalValue:null,zustellAdressenCount:null,dmsData:[],fileschanged:!1}),watch:{"data.gemeinde":function(t,e){this.$emit("profilUpdate",this.isChanged?this.data:null)},"data.ort":function(t,e){this.$emit("profilUpdate",this.isChanged?this.data:null)}},methods:{autocompleteSearchGemeinden:function(t){this.gemeinden=this.gemeinden.map(t=>t)},autocompleteSearchOrtschaftsnamen:function(t){this.ortschaftnamen=this.ortschaftnamen.map(t=>t)},getGemeinde:function(){this.data.nation&&"A"===this.data.nation&&this.data.plz&&this.data.plz>999&&this.data.plz<32e3?this.$api.call($e.getGemeinden(this.data.nation,this.data.plz)).then(t=>{t.data.length&&(this.gemeinden=[...new Set(t.data.map(t=>t.name))],this.ortschaftnamen=[...new Set(t.data.map(t=>t.ortschaftsname))])}):this.gemeinden=[]},updateValue:function(t,e){"zustelladresse"===e?this.data[e]=t.target.checked:"files"===e?(this.dmsData.length>0&&"application/x.fhc-dms+json"!==this.dmsData[0].type&&(this.fileschanged=!0),this.updateFileID(this.dmsData)):this.data[e]=""===t.target.value?null:t.target.value,this.$emit("profilUpdate",this.isChanged?this.data:null),this.zustellAdressenCount=this.getZustelladressenCount()},deleteDmsData:function(){this.dmsData=[],this.updateValue(null,"files")}},computed:{showZustellAdressenWarning:function(){return!JSON.parse(this.originalValue).zustelladresse&&(this.zustellAdressenCount.includes(this.data.adresse_id)?this.zustellAdressenCount.length>=2&&this.data.zustelladresse:this.data.zustelladresse&&this.zustellAdressenCount.length)},isChanged:function(){if(!(this.data.strasse&&this.data.plz&&this.data.ort&&this.data.typ&&0!==this.dmsData.length))return!1;return this.originalValue!==JSON.stringify(this.data)||this.fileschanged}},created(){this.$api.call($e.getAllNationen()).then(t=>{this.nationenList=t.data,this.getGemeinde()}),this.originalValue=JSON.stringify(this.data),this.zustellAdressenCount=this.getZustelladressenCount()},mounted(){this.files&&(this.dmsData=this.files)},template:'\n
    \n \x3c!-- warning message for too many zustellungs Adressen --\x3e\n
    \n
    \n\t {{$p.t(\'profilUpdate\',\'zustell_adressen_warning\')}}\n
    \n
    \n \x3c!-- End of warning --\x3e\n\n\n
    \n
    \n \n \n
    \n
    \n\n \x3c!-- NATION --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'nation\')}}*
    \n \n
    \n
    \n\n \x3c!-- PLZ --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'plz\')}}*
    \n \n
    \n
    \n\n \x3c!-- GEMEINDE --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'gemeinde\')}}*
    \n \n
    \n
    \n\n \x3c!-- ORT --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'ort\')}}*
    \n \n
    \n
    \n\n \x3c!-- STRASSE --\x3e\n
    \n
    \n
    {{$p.t(\'person\',\'strasse\')}}*
    \n \n
    \n
    \n \n \x3c!-- ADRESSEN TYP --\x3e\n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'kontaktTyp\')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t(\'profilUpdate\',\'meldebestaetigung\')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n '},Status:{components:{Adresse:we,Kontakt:ke},inject:["profilUpdateTopic"],data:()=>({files:null}),methods:{getDocumentLink:function(t){return FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+`/Cis/ProfilUpdate/show/${t}`}},computed:{getComponentView:function(){return this.topic==this.profilUpdateTopic["Private Adressen"]||this.topic==this.profilUpdateTopic["Add Adresse"]||this.topic==this.profilUpdateTopic["Delete Adresse"]?"Adresse":this.topic==this.profilUpdateTopic["Private Kontakte"]||this.topic==this.profilUpdateTopic["Add Kontakt"]||this.topic==this.profilUpdateTopic["Delete Kontakt"]?"Kontakt":"text_input"},cardHeader:function(){return this.topic==this.profilUpdateTopic["Delete Addresse"]||this.topic==this.profilUpdateTopic["Delete Kontakt"]?"Delete":this.topic==this.profilUpdateTopic["Add Adresse"]||this.topic==this.profilUpdateTopic["Add Kontakt"]?"Add":"Update"}},props:{data:{type:Object},view:{type:String},status:{type:String},status_message:{type:String},status_timestamp:{type:String},updateID:{type:Number},topic:{type:String}},created(){this.$api.call(Se.getProfilRequestFiles(this.updateID)).then(t=>{this.files=t.data})},template:'\n
    \n\n
    \n
    \n
    {{$p.t(\'global\',\'status\')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t(\'global\',\'datum\')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t(\'profilUpdate\',\'statusMessage\')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t(\'profilUpdate\',\'nachweisdokumente\')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n '},TextInputDokument:{data:()=>({dmsData:[],originalValue:null}),components:{Dms:xe},props:{data:{type:Object},withFiles:{type:Boolean,default:!1},files:{type:Array},updateID:{type:Boolean}},inject:["updateFileID"],computed:{didFilesChange:function(){this.updateFileID(this.dmsData);let t=!1;return this.files?(Array.from(this.dmsData).forEach(e=>{this.files.some(t=>t.name!==e.name)&&(t=!0)}),!(this.dmsData.length==this.files.length)||t):!!Array.from(this.dmsData).length},didDataChange:function(){return JSON.stringify(this.data)!==this.originalValue},isChanged:function(){return this.withFiles?this.updateID?(this.didDataChange||this.didFilesChange)&&this.dmsData.length:this.didDataChange&&this.didFilesChange:this.didDataChange}},emits:["profilUpdate"],watch:{dmsData(t){this.emitChanges()}},methods:{stringifyFile:t=>JSON.stringify({lastModified:t.lastModified,lastModifiedDate:t.lastModifiedDate,name:t.name,size:t.size,type:t.type}),emitChanges:function(){this.isChanged?this.$emit("profilUpdate",{value:this.data.value}):this.$emit("profilUpdate",null)}},mounted(){this.originalValue=JSON.stringify(Vue.toRaw(this.data)),this.files&&(this.dmsData=this.files)},template:'\n\n

    {{$p.t(\'profilUpdate\',\'profilUpdateInformationMessage\',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t(\'global\',\'titel\')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n '}},inject:["profilUpdateTopic","isMitarbeiter"],props:{list:Object,size:{type:Number,default:null},ariaLabel:{type:String,required:!0},profilUpdate:String,topic:String,breadcrumb:String},emits:{"update:profilUpdate":null,"update:topic":null,"update:breadcrumb":null,submit:null,select:null},data(){return{view:null,data:null,breadcrumbItems:[],modal_topic:this.topic,properties:null}},methods:{addItem:function(){this.view=this.modal_topic==this.profilUpdateTopic["Private Kontakte"]?"EditKontakt":"EditAdresse",this.modal_topic=this.modal_topic==this.profilUpdateTopic["Private Kontakte"]?this.profilUpdateTopic["Add Kontakt"]:this.profilUpdateTopic["Add Adresse"],this.$emit("update:topic",this.modal_topic),this.breadcrumbItems.push(this.modal_topic),this.$emit("update:breadcrumb",this.breadcrumbItems),this.data="EditAdresse"==this.view?{add:!0,adresse_id:null,strasse:null,typ:null,plz:null,ort:null,zustelladresse:!1}:{add:!0,kontakt_id:null,kontakttyp:null,kontakt:null,anmerkung:null,zustellung:!1}},deleteItem:function(t){t.data.delete=!0,this.$emit("update:profilUpdate",t.data),this.modal_topic=this.modal_topic==this.profilUpdateTopic["Private Adressen"]?this.profilUpdateTopic["Delete Adresse"]:this.profilUpdateTopic["Delete Kontakt"],this.$emit("update:topic",this.modal_topic),this.$emit("submit")},profilUpdateEmit:function(t){this.$emit("update:profilUpdate",t)},updateOptions:function(t,e){this.properties=e,this.data=e.data,this.view=e.view,e.title?(this.modal_topic=e.topic,this.$emit("update:topic",this.modal_topic),this.breadcrumbItems.push(e.title)):e.data.kontakttyp?(this.breadcrumbItems.push(e.data.kontakttyp),this.breadcrumbItems.push(e.data.kontakt)):e.data.strasse&&this.breadcrumbItems.push(e.data.strasse),this.$emit("update:breadcrumb",this.breadcrumbItems)}},computed:{},created(){this.properties={...this.list},this.data=this.list.data?JSON.parse(JSON.stringify(this.list.data)):null,this.view=this.list.view?JSON.parse(JSON.stringify(this.list.view)):null},mounted(){},template:'\n \n \n '},Ee={components:{BsModal:s},props:{timeout:{type:Number,default:300}},data:()=>({t:null,state:0}),methods:{show(){switch(this.state){case 0:return this.timeout?(this.state=1,void(this.t=window.setTimeout(()=>this.$refs.modal.show(),this.timeout))):this.$refs.modal.show();case 4:return window.setTimeout(()=>this.show(),1)}},hide(){switch(this.state){case 1:return window.clearTimeout(this.t);case 2:return window.setTimeout(()=>this.hide(),1);case 3:this.$refs.modal.hide()}}},mounted(){this.$refs.modal.$refs.modal.addEventListener("show.bs.modal",()=>{this.state=2}),this.$refs.modal.$refs.modal.addEventListener("shown.bs.modal",()=>{this.state=3}),this.$refs.modal.$refs.modal.addEventListener("hide.bs.modal",()=>{this.state=4}),this.$refs.modal.$refs.modal.addEventListener("hidden.bs.modal",()=>{this.state=0})},template:'\n\t\n\t\tLoading...\n\t'},Ce={components:{BsModal:s,Alert:r,EditProfilSelect:De,Loader:Ee},mixins:[s],props:{isMitarbeiter:{type:Boolean,default:!1},value:Object,titel:String,zustelladressenCount:Function,zustellkontakteCount:Function,onHideBsModal:Function,onHiddenBsModal:Function,onHidePreventedBsModal:Function,onShowBsModal:Function,onShownBsModal:Function},data(){return{topic:null,profilUpdate:null,editData:this.value,fileID:null,breadcrumb:null,loading:!1,result:!1,info:null}},inject:["setLoading"],provide(){return{updateFileID:this.updateFileIDFunction,isMitarbeiter:this.isMitarbeiter}},methods:{updateFileIDFunction:function(t){this.fileID=t},handleFailedError:function(t){console.error(t),this.loading=!1,this.setLoading(!1),this.result=!1,this.hide()},async submitProfilChange(){if(this.topic&&this.profilUpdate){if(this.fileID){const t=await this.uploadFiles(this.fileID);this.fileID=t||null}const t=t=>{t.data.error?(this.result=!1,r.popup("Ein Fehler ist aufgetreten: "+JSON.stringify(t.data.retval))):(this.result=!0,r.popup("Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert."))};this.loading=!0,this.setLoading(!0),this.editData.updateID?this.$api.call(Se.updateProfilRequest(this.topic,this.profilUpdate,this.editData.updateID,this.fileID?this.fileID[0]:null)).then(e=>{t(e)}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.loading=!1,this.setLoading(!1),this.hide()}):this.$api.call(Se.insertProfilRequest(this.topic,this.profilUpdate,this.fileID?this.fileID[0]:null)).then(e=>{t(e)}).catch(t=>this.$fhcAlert.handleSystemError).finally(()=>{this.loading=!1,this.setLoading(!1),this.hide()})}},uploadFiles:async function(t){if("application/x.fhc-dms+json"!==t[0].type){let e=new FormData;e.append("files[]",t[0]);return this.editData.updateID?await this.$api.call(Se.insertFile(e,this.editData.updateID)).then(t=>t.data?.map(t=>t.dms_id)):await this.$api.call(Se.insertFile(e)).then(t=>t.data?.map(t=>t.dms_id))}return!1}},computed:{showFooter:function(){switch(this.value.view){case"Status":case"Kontakt":case"Adresse":return!1;default:return!0}}},created(){this.editData.topic&&(this.topic=this.editData.topic)},mounted(){this.modal=this.$refs.modalContainer.modal},popup(t){return s.popup.bind(this),s.popup(null,t)},template:'\n\n\t\n\t\n\t\x3c!-- optional footer --\x3e\n\t\n \x3c!-- end of optional footer --\x3e \n'},Oe={components:{EditProfil:Ce},props:{data:{type:Object}},inject:["getZustellkontakteCount","getZustelladressenCount","profilUpdateStates","profilUpdateTopic"],emits:["fetchUpdates"],data(){return{showUpdateModal:!1,content:null,editProfilTitle:this.$p.t("profil","profilBearbeiten")}},methods:{hideEditProfilModal:function(){this.$refs.updateEditModal.result&&this.$emit("fetchUpdates"),this.showUpdateModal=!1},async showEditProfilModal(t){let e=this.getView(t.topic,t.status),n=null,i=null,a=null,s=!1;if("TextInputDokument"===e){n={titel:t.topic,value:t.requested_change.value};a=await this.$api.call(Se.getProfilRequestFiles(t.profil_update_id)).then(t=>t.data),a&&(s=!0)}else n=t.requested_change;if(i={updateID:t.profil_update_id,view:e,data:n,withFiles:s,topic:t.topic,files:a},"EditAdresse"===e){const e=await this.$api.call($e.isMitarbeiter(t.uid)).then(t=>t.data);e&&(i.isMitarbeiter=e);a=await this.$api.call(Se.getProfilRequestFiles(t.profil_update_id)).then(t=>t.data),i.files=a}t.status!==this.profilUpdateStates.Pending&&(i.status=t.status,i.status_message=t.status_message,i.status_timestamp=t.status_timestamp),this.content=i,this.editProfilTitle=t.topic,i&&(this.showUpdateModal=!0,Vue.nextTick(()=>{this.$refs.updateEditModal.show()}))},deleteRequest:function(t){this.$api.call(Se.deleteProfilRequest(t.profil_update_id)).then(t=>{t.data.error?console.error("error happened",t.data):this.$emit("fetchUpdates")})},getView:function(t,e){if(e!==this.profilUpdateStates.Pending)return"Status";switch(t){case this.profilUpdateTopic["Private Kontakte"]:case this.profilUpdateTopic["Add Kontakt"]:return"EditKontakt";case this.profilUpdateTopic["Delete Kontakt"]:return"Kontakt";case this.profilUpdateTopic["Private Adressen"]:case this.profilUpdateTopic["Add Adresse"]:return"EditAdresse";case this.profilUpdateTopic["Delete Adresse"]:return"Adresse";default:return"TextInputDokument"}}},created(){},computed:{},template:'\n
    \n \n
    {{$p.t(\'profilUpdate\',\'profilUpdates\')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t(\'profilUpdate\',\'topic\')}}{{$p.t(\'global\',\'status\')}}{{$p.t(\'global\',\'datum\')}}{{$p.t(\'ui\',\'aktion\')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n'};function Fe(t,e,n){let i=document.createElement("div"),a=null,s=t.getValue();if(Array.isArray(s)){const t=s[0]?new Date(s[0]):null,e=s[1]?new Date(s[1]):null;a=[t,e]}return Vue.createApp({components:{PrimevueCalendar:primevue.calendar},data:()=>({val:a}),watch:{val(t){n(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(i),i}primevue||console.error("PrimeVue not loaded!"),Tabulator.extendModule("filter","filters",{dates:(t,e)=>{if(!t)return!0;let n=new Date(e);if(Array.isArray(t)){let e=new Date(t[0]);if(t[1]){let i=new Date(t[1]);return i.setHours(23,59,59,999),n>=e&&n<=i}return n.toDateString()===e.toDateString()}let i=new Date(t);return n.toDateString()===i.toDateString()}});var Pe={components:{CoreFilterCmpt:fe,Mailverteiler:ve,AusweisStatus:be,QuickLinks:ye,Adresse:we,Kontakt:ke,ProfilEmails:_e,RoleInformation:Ae,ProfilInformation:Te,FetchProfilUpdates:Oe,EditProfil:Ce},inject:["sortProfilUpdates","collapseFunction","language","isEditable"],data(){return{showModal:!1,collapseIconBetriebsmittel:!0,editDataFilter:null,preloadedPhrasen:{},zutrittsgruppen_table_options:{persistenceID:"filterTableStudentProfilZutrittsgruppen",persistence:{columns:!1},minHeight:200,layout:"fitColumns",columns:[{title:Vue.computed(()=>this.preloadedPhrasen.zutrittsGruppenPhrase),field:"bezeichnung"}]},betriebsmittel_table_options:{persistenceID:"filterTableStudentProfilBetriebsmittel",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction},{title:Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),field:"betriebsmittel",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.inventarnummerPhrase),field:"Nummer",headerFilter:!0,resizable:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.ausgabedatum),field:"Ausgegeben_am",headerFilterFunc:"dates",headerFilter:Fe,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()}]}}},props:{data:Object,editData:Object},provide(){return{studiengang_kz:Vue.computed({get:()=>this.data.studiengang_kz})}},methods:{betriebsmittelTableBuilt:function(){this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel)},zutrittsgruppenTableBuilt:function(){this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns),this.$refs.zutrittsgruppenTable.tabulator.setData(this.data.zuttritsgruppen)},fetchProfilUpdates:function(){this.$api.call(Se.selectProfilRequest()).then(t=>{!t.error&&t&&(this.data.profilUpdates=t.data?.length?t.data.sort(this.sortProfilUpdates):null)})},hideEditProfilModal:function(){this.$refs.editModal.result&&this.$api.call(Se.selectProfilRequest()).then(t=>{!t.error&&t.data?(this.data.profilUpdates=t.data,this.data.profilUpdates.sort(this.sortProfilUpdates)):console.error("Error when fetching profile updates: "+t)}).catch(t=>{console.error(t)}),this.showModal=!1,this.editDataFilter=null},showEditProfilModal(t){t&&(this.editDataFilter=t),this.showModal=!0,Vue.nextTick(()=>{this.$refs.editModal.show()})},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},computed:{fotoStatus(){return this.data?.fotoStatus??null},filteredEditData(){return this.editDataFilter?this.editData.data[this.editDataFilter]:this.editData},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("person","personenkennzeichen")}`,value:this.data.personenkennzeichen},studiengang:{label:`${this.$p.t("lehre","studiengang")}`,value:this.data.studiengang},semester:{label:`${this.$p.t("lehre","semester")}`,value:this.data.semester},verband:{label:`${this.$p.t("lehre","lehrverband")}`,value:this.data.verband},gruppe:{label:`${this.$p.t("lehre","gruppe")}`,value:this.data.gruppe.trim()}}:{}}},created(){this.$p.loadCategory("profil").then(()=>{this.preloadedPhrasen.zutrittsGruppenPhrase=this.$p.t("profil/zutrittsGruppen"),this.preloadedPhrasen.entlehnteBetriebsmittelPhrase=this.$p.t("profil/entlehnteBetriebsmittel"),this.preloadedPhrasen.inventarnummerPhrase=this.$p.t("profil/inventarnummer"),this.preloadedPhrasen.ausgabedatum=this.$p.t("profil/ausgabedatum"),this.preloadedPhrasen.loaded=!0}),this.data.profilUpdates?.sort(this.sortProfilUpdates)},watch:{"language.value"(t){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.zutrittsgruppenTable&&this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)}},template:'\n
    \n \n \x3c!-- ROW --\x3e\n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n
    \n \x3c!--TODO: uncomment when implemented\n\t\t\t
    \n
    \n \n
    \n
    --\x3e\n\n\t\t\t\x3c!-- Bearbeiten Button --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\x3c!-- MOBILE PROFIL UPDATES --\x3e\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n\n\t\t\t\x3c!-- MAIN PANNEL --\x3e\n\t\t\t
    \n\t\t\t\t\x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n\t\t\t\t\x3c!-- INFORMATION CONTENT START --\x3e\n\t\t\t\t\x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- PROFIL INFORMATION --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- STUDENT INFO --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- EMAILS --\x3e\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\x3c!-- PRIVATE KONTAKTE--\x3e\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t(\'profil\',\'privateKontakte\')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\x3c!-- PRIVATE ADRESSEN--\x3e\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t(\'profil\',\'privateAdressen\')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- SECOND ROW UNDER THE PROFIL IMAGE AND INFORMATION WITH THE TABLES --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\x3c!-- END OF MAIN CONTENT COL --\x3e\n\t\t
    \n\t\t\x3c!-- START OF SIDE PANEL --\x3e\n\t\t
    \n\t\t\t\x3c!--TODO: uncomment when implemented\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    --\x3e\n\t\t\t\x3c!-- Bearbeiten Button --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\x3c!-- PROFIL UPDATES --\x3e\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\x3c!-- START OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\x3c!-- HIER SIND DIE MAILVERTEILER --\x3e\n\t\t\t\t\t\n\t\t\t\t
    \n \x3c!-- END OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n\x3c!-- END OF CONTAINER --\x3e\n
    \n'},Ie={components:{CoreFilterCmpt:fe,EditProfil:Ce,Adresse:we,Kontakt:ke,FetchProfilUpdates:Oe,AusweisStatus:be,Mailverteiler:ve,QuickLinks:ye,ProfilEmails:_e,RoleInformation:Ae,ProfilInformation:Te},inject:["sortProfilUpdates","collapseFunction","language","isEditable"],data(){return{showModal:!1,editDataFilter:null,preloadedPhrasen:{},funktionen_table_options:{persistenceID:"filterTableMaProfilFunktionen",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.bezeichnungPhrase),field:"Bezeichnung",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.organisationseinheitPhrase),field:"Organisationseinheit",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.gueltigVonPhrase),field:"Gültig_von",headerFilterFunc:"dates",headerFilter:Fe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.preloadedPhrasen.gueltigBisPhrase),field:"Gültig_bis",headerFilterFunc:"dates",headerFilter:Fe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.preloadedPhrasen.wochenstundenPhrase),field:"Wochenstunden",headerFilter:!0,minWidth:200,visible:!0}]},betriebsmittel_table_options:{persistenceID:"filterTableMaProfilBetriebsmittel",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,data:[{betriebsmittel:"",Nummer:"",Ausgegeben_am:""}],columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),field:"betriebsmittel",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.inventarnummerPhrase),field:"Nummer",headerFilter:!0,resizable:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.preloadedPhrasen.ausgabedatumPhrase),field:"Ausgegeben_am",headerFilterFunc:"dates",headerFilter:Fe,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()}]}}},props:{data:Object,editData:Object},methods:{betriebsmittelTableBuilt:function(){this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel)},funktionenTableBuilt:function(){this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns),this.$refs.funktionenTable.tabulator.setData(this.data.funktionen)},hideEditProfilModal:function(){this.$refs.editModal.result&&this.$api.call(Se.selectProfilRequest()).then(t=>{!t.error&&t.data?(this.data.profilUpdates=t.data,this.data.profilUpdates.sort(this.sortProfilUpdates)):console.error("Error when fetching profile updates: "+t)}).catch(t=>{console.error(t)}),this.showModal=!1,this.editDataFilter=null},showEditProfilModal(t){t&&(this.editDataFilter=t),this.showModal=!0,Vue.nextTick(()=>{this.$refs.editModal.show()})},fetchProfilUpdates:function(){this.$api.call(Se.selectProfilRequest()).then(t=>{!t.error&&t&&(this.data.profilUpdates=t.data?.length?t.data.sort(this.sortProfilUpdates):null)})},setTableColumnTitles(){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns),this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},computed:{fotoStatus(){return this.data?.fotoStatus??null},getTelefonValue(){return this.data.standort_telefon?.kontakt?this.data.standort_telefon.kontakt+" "+this.data.telefonklappe:this.data.standort_telefon?this.data.standort_telefon+" "+this.data.telefonklappe:this.data.telefonklappe},filteredEditData(){return this.editDataFilter?this.editData.data[this.editDataFilter]:this.editData},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("profil","Kurzzeichen")}`,value:this.data.kurzbz},telefon:{label:`${this.$p.t("profil","Telefon")}`,value:this.getTelefonValue},office:{label:`${this.$p.t("profil","Büro")}`,value:this.data.ort_kurzbz}}:{}}},created(){this.$p.loadCategory(["ui","lehre","global","profil"]).then(()=>{this.preloadedPhrasen.bezeichnungPhrase=this.$p.t("ui/bezeichnung"),this.preloadedPhrasen.organisationseinheitPhrase=this.$p.t("lehre/organisationseinheit"),this.preloadedPhrasen.gueltigVonPhrase=this.$p.t("global/gueltigVon"),this.preloadedPhrasen.gueltigBisPhrase=this.$p.t("global/gueltigBis"),this.preloadedPhrasen.wochenstundenPhrase=this.$p.t("profil/wochenstunden"),this.preloadedPhrasen.entlehnteBetriebsmittelPhrase=this.$p.t("profil/entlehnteBetriebsmittel"),this.preloadedPhrasen.inventarnummerPhrase=this.$p.t("profil/inventarnummer"),this.preloadedPhrasen.ausgabedatumPhrase=this.$p.t("profil/ausgabedatum"),this.preloadedPhrasen.loaded=!0}),this.data.profilUpdates?.sort(this.sortProfilUpdates)},watch:{"data.funktionen"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setData(t)},"data.mittel"(t){this.$refs.betriebsmittelTable&&this.$refs.betriebsmittelTable.tabulator.setData(t)},"language.value"(t){this.setTableColumnTitles()}},template:'\n
    \n \n
    \n
    \n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n
    \n
    --\x3e\n \x3c!-- Bearbeiten Button --\x3e\n
    \n
    \n \n
    \n
    \n
    \n
    \n \x3c!-- MOBILE PROFIL UPDATES --\x3e\n \n
    \n
    \n
    \n \x3c!-- END OF HIDDEN ROW (HIDDEN IN VIEWPORTS GREATER THEN-EQUAL MD) --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- PROFIL INFORMATION --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- MITARBEITER INFO --\x3e\n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- PRIVATE KONTAKTE--\x3e\n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t(\'profil\',\'privateKontakte\')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \x3c!-- PRIVATE ADRESSEN--\x3e\n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t(\'profil\',\'privateAdressen\')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \x3c!-- FUNKTIONEN TABELLE --\x3e\n \n
    \n
    \n \x3c!-- BETRIEBSMITTEL TABELLE --\x3e\n \n
    \n
    \n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!--TODO: uncomment when implemented\n
    \n \n
    \n \n \n \n \n \n
    \n
    --\x3e\n \x3c!-- Bearbeiten Button --\x3e\n
    \n
    \n \n
    \n
    \n
    \n
    \n \x3c!-- PROFIL UPDATES --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- AUSWEIS STATUS --\x3e\n \n
    \n
    \n
    \n
    \n \x3c!-- MAILVERTEILER --\x3e\n \n
    \n
    \n
    \n
    \n
    \n\n \n '},Me={data:()=>({}),components:{QuickLinks:ye,Mailverteiler:ve,ProfilEmails:_e,RoleInformation:Ae,ProfilInformation:Te},props:["data"],provide(){return{studiengang_kz:Vue.computed({get:()=>this.data.studiengang_kz})}},methods:{},computed:{fotoStatus(){return this.data?.fotoStatus??null},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},personEmails(){return this.data?.emails?this.data.emails:[]},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("person","personenkennzeichen")}`,value:this.data.personenkennzeichen},studiengang:{label:`${this.$p.t("lehre","studiengang")}`,value:this.data.studiengang},semester:{label:`${this.$p.t("lehre","semester")}`,value:this.data.semester},verband:{label:`${this.$p.t("lehre","lehrverband")}`,value:this.data.verband},gruppe:{label:`${this.$p.t("lehre","gruppe")}`,value:this.data.gruppe.trim()}}:{}}},mounted(){},template:' \n\n
    \n \x3c!-- ROW --\x3e \n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n \x3c!-- uncomment when implemented\n
    \n \n \n \n
    --\x3e\n \x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e \n
    \n \x3c!-- FIRST KAESTCHEN --\x3e\n
    \n
    \n
    \n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n \x3c!-- END OF PROFIL INFORMATION ROW --\x3e\n \x3c!-- INFORMATION CONTENT END --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n \x3c!-- SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n
    \n
    \n \n
    \n
    \n \x3c!-- END OF SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n \x3c!-- END OF THE SECOND INFORMATION COLUMN --\x3e\n
    \n \x3c!-- START OF THE SECOND PROFIL INFORMATION ROW --\x3e \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION END --\x3e\n
    \n \x3c!-- END OF MAIN CONTENT COL --\x3e\n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!-- SRART OF QUICK LINKS IN THE SIDE PANEL --\x3e\n \x3c!-- START OF THE FIRDT ROW IN THE SIDE PANEL --\x3e\n \x3c!-- THESE QUCK LINKS ARE ONLY VISIBLE UNTIL VIEWPORT MD --\x3e\n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n \n \n
    \n
    --\x3e\n \x3c!-- START OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n
    \n \x3c!-- HIER SIND DIE MAILVERTEILER --\x3e\n \n
    \n \x3c!-- END OF THE SECOND ROW IN THE SIDE PANEL --\x3e\n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n \x3c!-- END OF CONTAINER --\x3e\n
    \n '},Le={components:{CoreFilterCmpt:fe,Mailverteiler:ve,QuickLinks:ye,RoleInformation:Ae,ProfilEmails:_e,ProfilInformation:Te},inject:["collapseFunction","language"],data(){return{collapseIconFunktionen:!0,preloadedPhrasen:{},funktionen_table_options:{persistenceID:"filterTableMaViewProfilFunktionen",persistence:{columns:!1},minHeight:300,layout:"fitColumns",responsiveLayout:"collapse",responsiveLayoutCollapseUseFormatters:!1,responsiveLayoutCollapseFormatter:Vue.$collapseFormatter,columns:[{title:"",field:"collapse",headerSort:!1,headerFilter:!1,formatter:"responsiveCollapse",maxWidth:40,headerClick:this.collapseFunction,visible:!0},{title:Vue.computed(()=>this.$p.t("ui/bezeichnung")),field:"Bezeichnung",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.$p.t("lehre/organisationseinheit")),field:"Organisationseinheit",headerFilter:!0,minWidth:200,visible:!0},{title:Vue.computed(()=>this.$p.t("global/gueltigVon")),field:"Gültig_von",headerFilterFunc:"dates",headerFilter:Fe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.$p.t("global/gueltigBis")),field:"Gültig_bis",headerFilterFunc:"dates",headerFilter:Fe,resizable:!0,minWidth:200,visible:!0,formatter:"datetime",formatterParams:this.datetimeFormatterParams()},{title:Vue.computed(()=>this.$p.t("profil/wochenstunden")),field:"Wochenstunden",headerFilter:!0,minWidth:200,visible:!0}]}}},props:["data"],methods:{funktionenTableBuilt:function(){this.$refs.funktionenTable.tabulator.setData(this.data.funktionen)},datetimeFormatterParams:function(){return{inputFormat:"yyyy-MM-dd",outputFormat:"dd.MM.yyyy",invalidPlaceholder:"(invalid date)",timezone:FHC_JS_DATA_STORAGE_OBJECT.timezone}}},watch:{"data.funktionen"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setData(t)},"language.value"(t){this.$refs.funktionenTable&&this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)}},computed:{getTelefonValue(){return this.data.standort_telefon?.kontakt?this.data.standort_telefon.kontakt+" "+this.data.telefonklappe:this.data.standort_telefon?this.data.standort_telefon+" "+this.data.telefonklappe:this.data.telefonklappe},fotoStatus(){return this.data?.fotoStatus??null},personEmails(){return this.data?.emails?this.data.emails:[]},profilInformation(){return this.data?{Vorname:this.data.vorname,Nachname:this.data.nachname,Username:this.data.username,Anrede:this.data.anrede,Titel:this.data.titel,Postnomen:this.data.postnomen,foto_sperre:this.data.foto_sperre,foto:this.data.foto}:{}},roleInformation(){return this.data?{geburtsdatum:{label:`${this.$p.t("profil","Geburtsdatum")}`,value:this.data.gebdatum},geburtsort:{label:`${this.$p.t("profil","Geburtsort")}`,value:this.data.gebort},personenkennzeichen:{label:`${this.$p.t("profil","Kurzzeichen")}`,value:this.data.kurzbz},telefon:{label:`${this.$p.t("profil","Telefon")}`,value:this.getTelefonValue},office:{label:`${this.$p.t("profil","Büro")}`,value:this.data.ort_kurzbz}}:{}}},created(){this.$p.loadCategory(["ui","lehre","global","profil"]).then(()=>{this.preloadedPhrasen.bezeichnungPhrase=this.$p.t("ui/bezeichnung"),this.preloadedPhrasen.organisationseinheitPhrase=this.$p.t("lehre/organisationseinheit"),this.preloadedPhrasen.gueltigVonPhrase=this.$p.t("global/gueltigVon"),this.preloadedPhrasen.gueltigBisPhrase=this.$p.t("global/gueltigBis"),this.preloadedPhrasen.wochenstundenPhrase=this.$p.t("profil/wochenstunden"),this.preloadedPhrasen.loaded=!0})},template:'\n\n
    \n \x3c!-- ROW --\x3e\n
    \n \x3c!-- HIDDEN QUICK LINKS --\x3e\n \x3c!-- TODO: uncomment when implemented\n
    \n\n \n\n
    \n --\x3e\n \x3c!-- END OF HIDDEN QUCK LINKS --\x3e\n \x3c!-- MAIN PANNEL --\x3e\n
    \n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION --\x3e\n \x3c!-- INFORMATION CONTENT START --\x3e\n \x3c!-- ROW WITH THE PROFIL INFORMATION --\x3e\n
    \n \x3c!-- FIRST KAESTCHEN --\x3e\n
    \n
    \n
    \n \x3c!-- Profil Informationen --\x3e\n \n
    \n
    \n \x3c!-- START OF SECOND PROFIL INFORMATION COLUMN --\x3e\n \x3c!-- END OF PROFIL INFORMATION ROW --\x3e\n \x3c!-- INFORMATION CONTENT END --\x3e\n
    \n
    \n
    \n
    \n \x3c!-- EMAILS --\x3e\n \n
    \n
    \n \x3c!-- SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n
    \n
    \n \x3c!-- roleInformation --\x3e\n \n
    \n
    \n \x3c!-- END OF SECOND ROW OF SECOND COLUMN IN MAIN CONTENT --\x3e\n \x3c!-- END OF THE SECOND INFORMATION COLUMN --\x3e\n
    \n \x3c!-- START OF THE SECOND PROFIL INFORMATION ROW --\x3e\n \x3c!-- ROW WITH PROFIL IMAGE AND INFORMATION END --\x3e\n
    \n \x3c!-- SECOND ROW UNDER THE PROFIL IMAGE AND INFORMATION WITH THE TABLES --\x3e\n
    \n \x3c!-- FIRST TABLE --\x3e\n
    \n \n
    \n \x3c!-- END OF THE ROW WITH THE TABLES UNDER THE PROFIL INFORMATION --\x3e\n
    \n \x3c!-- END OF MAIN CONTENT COL --\x3e\n
    \n \x3c!-- START OF SIDE PANEL --\x3e\n
    \n \x3c!-- VISIBLE UNTIL VIEWPORT MD --\x3e\n \x3c!--TODO: uncomment when implemented\n
    \n
    \n \n \n \n
    \n
    \n --\x3e\n
    \n
    \n \x3c!-- MAILVERTEILER --\x3e\n \n
    \n
    \n \x3c!-- END OF SIDE PANEL --\x3e\n
    \n \x3c!-- END OF CONTAINER ROW--\x3e\n
    \n \x3c!-- END OF CONTAINER --\x3e\n
    \n'};Vue.$collapseFormatter=function(t){var e=document.createElement("div");e.classList.add("tabulator-collapsed-row"),e.classList.add("text-break");var n=document.createElement("div");return n.classList.add("row"),e.appendChild(n),t.forEach(function(t){let e=document.createElement("div");e.classList.add("col-6");let i=document.createElement("div");i.classList.add("col-6"),e.innerHTML=""+t.title+"",i.innerHTML=t.value?t.value:"-",n.appendChild(e),n.appendChild(i)}),Object.keys(t).length?e:""};const Ne={name:"Profil",components:{StudentProfil:Pe,MitarbeiterProfil:Ie,ViewStudentProfil:Me,ViewMitarbeiterProfil:Le,Loading:Ee},props:{uid:{type:String,required:!1},viewData:{type:Object}},data(){return{loading:!1,profilUpdateStates:null,profilUpdateTopic:null,view:null,data:null,notFoundUID:null,isEditable:this.viewData.editable??!1}},provide(){return{isEditable:Vue.computed(()=>this.isEditable),profilUpdateStates:Vue.computed(()=>!!this.profilUpdateStates&&this.profilUpdateStates),profilUpdateTopic:Vue.computed(()=>!!this.profilUpdateTopic&&this.profilUpdateTopic),setLoading:t=>{this.loading=t},getZustellkontakteCount:this.zustellKontakteCount,getZustelladressenCount:this.zustellAdressenCount,collapseFunction:(t,e)=>{void 0===this[t.target.id]&&(this[t.target.id]=!0),this[t.target.id]=!this[t.target.id];let n=e._column.cells.map(t=>t.element.children[0]);this[t.target.id]?t.target.classList.replace("fa-angle-up","fa-angle-down"):t.target.classList.replace("fa-angle-down","fa-angle-up"),this[t.target.id]?n.filter(t=>!t.classList.contains("open")).forEach(t=>{t.click()}):n.filter(t=>t.classList.contains("open")).forEach(t=>{t.click()})},sortProfilUpdates:(t,e)=>{let n=0;return n="pending"===t.status.toLowerCase()||"accepted"===t.status.toLowerCase()&&"rejected"===e.status.toLowerCase()?-1:1,t.status===e.status&&(n=new Date(e.insertamum.split(".").reverse().join("-"))-new Date(t.insertamum.split(".").reverse().join("-"))),n}}},methods:{async load(){await this.$api.call(Se.getStatus()).then(t=>{this.profilUpdateStates=t.data}).catch(t=>{console.error(t)}),this.$api.call(Se.getTopic()).then(t=>{this.profilUpdateTopic=t.data}).catch(t=>{console.error(t)}),this.$api.call($e.profilViewData(this.$route.params.uid??null)).then(t=>t.data).then(t=>{this.view=t?.profil_data.view,this.data=t?.profil_data.data,this.isEditable=t?.editable??!1}).catch(t=>{console.error(t)})},zustellAdressenCount(){if(!this.data||!this.data.adressen)return null;let t=[];return this.data.profilUpdates?.length&&(t=t.concat(this.data.profilUpdates.filter(t=>t.requested_change.zustelladresse).map(t=>t.requested_change.adresse_id))),this.data.profilUpdates?.length&&this.data.adressen.filter(t=>t.zustelladresse).every(t=>this.data.profilUpdates.some(e=>e.requested_change.adresse_id==t.adresse_id))||(t=t.concat(this.data.adressen.filter(t=>t.zustelladresse).map(t=>t.adresse_id))),[...new Set(t)]},zustellKontakteCount(){if(!this.data||!this.data.kontakte)return null;let t=[];return this.data.profilUpdates?.length&&(t=t.concat(this.data.profilUpdates.filter(t=>"Pending"===t.status&&t.requested_change.zustellung).map(t=>({kontakt_id:t.requested_change.kontakt_id,kontakttyp:t.requested_change.kontakttyp})))),this.data.profilUpdates?.length&&this.data.kontakte.filter(t=>t.zustellung).every(t=>this.data.profilUpdates.some(e=>"Pending"===e.status&&e.requested_change.kontakt_id==t.kontakt_id))||(t=t.concat(this.data.kontakte.filter(t=>t.zustellung).map(t=>({kontakt_id:t.kontakt_id,kontakttyp:t.kontakttyp})))),[...new Set(t)]}},computed:{filteredEditData(){if(this.data)return{view:null,data:{Personen_Informationen:{title:this.$p.t("profil","personenInformationen"),topic:"Personen_informationen",view:null,data:{vorname:{title:this.$p.t("person","vorname"),topic:this.profilUpdateTopic?.Vorname,view:"TextInputDokument",withFiles:!0,data:{titel:"vorname",value:this.data.vorname}},nachname:{title:this.$p.t("person","nachname"),topic:this.profilUpdateTopic?.Nachname,view:"TextInputDokument",withFiles:!0,data:{titel:"nachname",value:this.data.nachname}},titel:{title:this.$p.t("global","titel"),topic:this.profilUpdateTopic?.Titel,view:"TextInputDokument",withFiles:!0,data:{titel:"titel",value:this.data.titel}},postnomen:{title:this.$p.t("profil","postnomen"),topic:this.profilUpdateTopic?.Postnomen,view:"TextInputDokument",withFiles:!0,data:{titel:"postnomen",value:this.data.postnomen}}}},Private_Kontakte:{title:this.$p.t("profil","privateKontakte"),topic:this.profilUpdateTopic?.["Private Kontakte"],data:this.data.kontakte?.filter(t=>!this.data.profilUpdates?.some(e=>e.status===this.profilUpdateStates.Pending&&e.requested_change?.kontakt_id===t.kontakt_id)).map(t=>({listview:"Kontakt",view:"EditKontakt",data:t}))},Private_Adressen:{title:this.$p.t("profil","privateAdressen"),topic:this.profilUpdateTopic?.["Private Adressen"],data:this.data.adressen?.filter(t=>!this.data.profilUpdates?.some(e=>e.status===this.profilUpdateStates.Pending&&e.requested_change?.adresse_id==t.adresse_id)).map(t=>({listview:"Adresse",view:"EditAdresse",data:t}))}}}}},watch:{loading:function(t){t?this.$refs.loadingModalRef.show():this.$refs.loadingModalRef.hide()},uid(t,e){this.load()}},created(){this.load()},template:'\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    '};var Re={getContentID:t=>({method:"get",url:"/api/frontend/v1/Ort/ContentID",params:{ort_kurzbz:t}}),getRooms:(t,e,n,i,a=0)=>({method:"get",url:"/api/frontend/v1/Ort/getRooms",params:{datum:t,von:e,bis:n,typ:i,personenanzahl:a}}),getRoomTypes:()=>({method:"get",url:"/api/frontend/v1/Ort/getTypes",params:{}})};const Be={name:"Raumsuche",props:{},components:{VueDatePicker:a,CoreFilterCmpt:fe,InputNumber:primevue.inputnumber},data(){return{phrasenPromise:null,phrasenResolved:!1,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,roomtypes:null,defaultType:{raumtyp_kurzbz:"",beschreibung:Vue.computed(()=>this.$p.t("global/alle"))},anzahl:1,selectedType:null,datum:new Date,von:Vue.ref({hours:(new Date).getHours(),minutes:(new Date).getMinutes()}),bis:Vue.ref({hours:(new Date).getHours()+1,minutes:(new Date).getMinutes()}),datepickerTextInputOptions:{enterSubmit:!0,tabSubmit:!0,selectOnFocus:!0,format:"dd.MM.yyyy",escClose:!0},timepickerTextInputOptions:{enterSubmit:!0,tabSubmit:!0,selectOnFocus:!0,format:"HH:mm",escClose:!0},raumsucheTableOptions:{height:Vue.ref(400),index:"ort_kurzbz",layout:"fitColumns",placeholder:this.$p.t("global/noDataAvailable"),columns:[{title:Vue.computed(()=>this.$p.t("rauminfo/raum_kurzbz")),field:"ort_kurzbz",widthGrow:1},{title:Vue.computed(()=>this.$p.t("global/bezeichnung")),field:"bezeichnung",widthGrow:2},{title:Vue.computed(()=>this.$p.t("rauminfo/raumnummer")),field:"nummer",widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/personcap")),field:"personen",widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/rauminfo")),field:"linkInfo",formatter:this.linkFormatter,widthGrow:1},{title:Vue.computed(()=>this.$p.t("rauminfo/roomReservations")),field:"linkRes",formatter:this.linkFormatter,widthGrow:1}],persistence:!1},raumsucheTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}}]}},methods:{tableResolve(t){this.tableBuiltResolve=t},linkFormatter(t){const e=t.getValue(),n="linkInfo"===t.getField()?this.$p.t("rauminfo/rauminfo"):this.$p.t("rauminfo/roomReservations");return e?'
    ':'
    -
    '},roomPlanLink:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t.ort_kurzbz,roomInfoLink:t=>FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content/"+t.content_id,getTimeString:t=>`${String(t.hours).padStart(2,"0")}:${String(t.minutes).padStart(2,"0")}`,setupData(t){const e=t.map(t=>({ort_kurzbz:t.ort_kurzbz,bezeichnung:t.bezeichnung.replace("&","&"),nummer:t.planbezeichnung,personen:t.max_person,linkInfo:t.content_id?this.roomInfoLink(t):null,linkRes:this.roomPlanLink(t)}));this.$refs.raumsucheTable.tabulator.setData(e)},loadRoomTypes(){this.$api.call(Re.getRoomTypes()).then(t=>{t?.data?.forEach(t=>{t.beschreibung=t.beschreibung.replace("&","&")}),this.selectedType=this.defaultType,this.roomtypes=t?.data??[]})},loadRooms(){this.$api.call(Re.getRooms(this.datum.toISOString(),this.getTimeString(this.von),this.getTimeString(this.bis),this.selectedType?.raumtyp_kurzbz??"",this.anzahl)).then(t=>{t?.data?.retval&&this.setupData(t.data.retval)})},handleUuidDefined(t){this.tabulatorUuid=t},search(){this.loadRooms()},setRoute(t){},dateFormat:t=>`${String(t.getDate()).padStart(2,"0")}.${String(t.getMonth()+1).padStart(2,"0")}.${t.getFullYear()}`,timeFormat:t=>`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`,async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadRoomTypes(),this.loadRooms();const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect(),i=window.visualViewport.height-n.top-100;this.$refs.raumsucheTable&&this.$refs.raumsucheTable.$refs.table.style.setProperty("height",i+"px")}},computed:{isDarkMode(){return"dark"==this.$theme.theme_name.value}},created(){this.phrasenPromise=this.$p.loadCategory(["rauminfo","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0})},mounted(){this.setupMounted()},template:'\n\t

    {{$p.t(\'rauminfo/roomSearch\')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n '};var je={components:{paginator:primevue.paginator},emits:["update:rows"],props:{maxPageCount:{type:Number,default:0},page_size:{type:Number,required:!0}},data:()=>({}),methods:{newPageEvent:function(t){}},mounted(){},template:'\n \t\x3c!-- Desktop --\x3e\n\t
    \n\t\t\n\t\t\n\t
    \n\t\x3c!-- Mobile --\x3e\n\t
    \n\t\t\n\t\t\n\t
    \n '},Ue={props:{uid:String,vorname:String,nachname:String,titelpre:String,kontakt:String,telefoneklappe:String,email:String,planbezeichnung:String,foto:String,displayWidget:{type:Boolean,default:!1}},template:'\n\t
    \n\t\t
    \n\t\t\tmitarbeiter_foto\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t',computed:{formattedEmail:function(){if(!this.email)return null;let t=this.email.replace("mailto:","").split("@");return t[0]+"@"+t[1]},fullname:function(){return this.titelpre&&this.vorname&&this.nachname?`${this.titelpre} ${this.vorname} ${this.nachname}`:this.vorname&&this.nachname?`${this.vorname} ${this.nachname}`:this.nachname?this.vorname:null},phone:function(){return this.kontakt&&this.telefoneklappe?{link:"tel:".concat(this.kontakt).concat(" "+this.telefoneklappe),number:this.kontakt.concat(" "+this.telefoneklappe)}:this.kontakt?{link:"tel:".concat(this.kontakt),number:this.kontakt}:null},email_link:function(){return this.email?"mailto:".concat(this.email):null},base64Image:function(){return this.foto?"data:image/png;base64,".concat(this.foto):null},ort:function(){return this.planbezeichnung??null},profilViewLink:function(){return this.uid?FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat("/Cis/Profil/View/").concat(this.uid):null}}},Ve={props:{title:String,vertretungsList:Array,showBezeichnung:Boolean},template:'\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t',methods:{profilViewLink:function(t){return t?FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat("/Cis/Profil/View/").concat(t):null},vertretungFormatedName:function(t){return t?`${t.vorname??""} ${t.nachname??""} ${t.bezeichnung&&this.showBezeichnung?"(".concat(t.bezeichnung.replace("(","").replace(")","")).concat(")"):""}`:null}}},He={studiengangInformation:()=>({method:"get",url:"/api/frontend/v1/Studgang/getStudiengangInfo"}),getStudiengangByKz:t=>({method:"get",url:"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz",params:{studiengang_kz:t}})},qe={data:()=>({studiengang:null,semester:null,stg_ltg:null,gf_ltg:null,stv_ltg:null,ass:null,hochschulvertr:null,stdv:null,jahrgangsvertr:null}),props:{displayWidget:{type:Boolean,default:!1}},components:{StudiengangPerson:Ue,StudiengangVertretung:Ve},template:'\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n',computed:{collection_array:function(){let t=[];return Array.isArray(this.stg_ltg)&&1==this.stg_ltg.length&&Array.isArray(this.ass)&&1==this.ass.length?t.push({title:`${this.$p.t("global","studiengangsleitung")}/${this.$p.t("studiengangInformation","assistenz")}`,collection:[...this.stg_ltg,...this.ass]}):(t.push({title:this.$p.t("global","studiengangsleitung"),collection:this.stg_ltg}),t.push({title:this.$p.t("studiengangInformation","assistenz"),collection:this.ass})),Array.isArray(this.gf_ltg)&&1==this.gf_ltg.length&&Array.isArray(this.stv_ltg)&&1==this.stv_ltg.length?t.push({title:this.$p.t("studiengangInformation","geschaeftsfuehrende_stellvertretende_leitung"),collection:[...this.gf_ltg,...this.stv_ltg]}):(t.push({title:this.$p.t("studiengangInformation","geschaeftsfuehrende_leitung"),collection:this.gf_ltg}),t.push({title:this.$p.t("studiengangInformation","stellvertretende_leitung"),collection:this.stv_ltg})),t},moodleLink:function(){if(this.studiengang&&this.studiengang.studiengang_kz)return"https://moodle.technikum-wien.at/course/view.php?idnumber=dl"+this.studiengang.studiengang_kz}},mounted(){this.$api.call(He.studiengangInformation()).then(t=>t.data).then(t=>{Object.assign(this,t)})}},Ge={content:(t,e=null,n=null,i=null)=>({method:"get",url:"/api/frontend/v1/Cms/content",params:{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...i?{sichtbar:i}:{}}}),getNews:(t=1,e=10,n)=>({method:"get",url:"/api/frontend/v1/Cms/getNews",params:{page:t,page_size:e,sprache:n}}),news:t=>({method:"get",url:"/api/frontend/v1/Cms/news",params:{limit:t}}),getNewsRowCount:()=>({method:"get",url:"/api/frontend/v1/Cms/getNewsRowCount"}),getNewsExtra:()=>({method:"get",url:"/api/frontend/v1/Cms/getStudiengangInfoForNews"})},Je={name:"NewsComponent",components:{Pagination:je,StudiengangInformation:qe},data:()=>({content:null,maxPageCount:0,page_size:10,page:1}),watch:{"$p.user_language.value":function(t){this.fetchNews()}},computed:{sprache:function(){return this.$p.user_language.value}},methods:{fetchNews(){return this.$api.call(Ge.getNews(this.page,this.page_size,this.sprache)).then(t=>t.data).then(t=>{this.content=t,document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),o.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),Vue.nextTick(()=>{document.querySelectorAll(".card-header").forEach(t=>{t.classList.add("fhc-primary")}),document.querySelectorAll(".row").forEach(t=>{t.classList.add("w-100"),t.classList.add("align-items-center")}),document.querySelectorAll(".row h2").forEach(t=>{t.classList.add("mb-0")})})})},loadNewPageContent(t){this.$api.call(Ge.getNews(t.page,t.rows)).then(t=>t.data).then(t=>{this.content=t})}},created(){this.fetchNews(),this.$api.call(Ge.getNewsRowCount()).then(t=>t.data).then(t=>{this.maxPageCount=t})},template:'\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n '},We={name:"RaumComponent",data:()=>({imgContent:null}),props:{content:{type:String,required:!0},content_id:{type:[Number,String]}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})}},mounted(){let t=document.getElementsByClassName("tablesorter");for(let e of t)this.sanitizeLegacyTables(e),new Tabulator(e,{layout:"fitDataStretch",columnDefaults:{formatter:"html",resizable:!1,minWidth:"100px"}});let e=document.getElementsByTagName("h1");if(e=e.length?e[0]:null,e&&e.innerText){let t=e.innerText,n=new RegExp("\\w*\\s([a-zA-Z][0-9\\.]+)$"),i=t.match(n);if(i){t=i[0],t=t.replace(" ","_");let n=document.createElement("a");n.href=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/getRoomInformation/"+t,n.appendChild(e.cloneNode(!0)),e.replaceWith(n);let a=document.querySelectorAll('.menubox a[href*="stpl_week.php"]');for(let t of a)t.href=n.href}else console.error(`the regular expression did not match the room name: ${t}`);return}const n=(new DOMParser).parseFromString(`
    ${this.content}
    `,"text/html").querySelector("img");if(n&&n.title){const t={};for(let e of n.attributes)t[e.name]=e.value;this.imgContent=t}console.error("was not able to get the title of the raum_contentmittitel")},template:'\n \x3c!-- div that contains the content --\x3e\n\x3c!-- TODO: test with more img content from cms--\x3e\n
    \n
    \n

    Content was not found

    \n '};const Ze={relative:[{priority:1,regex:new RegExp(/^\.\.\/cms\/content\.php\?content_id=([0-9]+)/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/content",group_replacement_strategy:"PATH_SEGMENTS"},{priority:2,regex:new RegExp(/^\.\.\/cms\/news\.php/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/CisVue/Cms/news"},{priority:3,regex:new RegExp(/^\.\.\/index\.ci\.php/),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router},{priority:10,regex:new RegExp(/^\.\.\//),replacement:FHC_JS_DATA_STORAGE_OBJECT.app_root}],absolute:[{}]},Ke=Ze.relative.sort((t,e)=>t.priority-e.priority).map(t=>({regex:t.regex,replacement:t.replacement,group_replacement_strategy:t.group_replacement_strategy}));function Ye(t){for(let{regex:e,replacement:n,group_replacement_strategy:i}of Ke){let a=t.match(e);if(a){let s=t.replace(e,n);switch(i){case"QUERY_PARAMETERS":s=s.concat(`?${a[1]}`);for(let t of a.slice(2))s=s.concat(`&${t}`);break;case"PATH_SEGMENTS":for(let t of a.slice(1))s=s.concat(`/${t}`)}return s}}return t}Ze.absolute.sort((t,e)=>t.priority-e.priority).map(t=>({regex:t.regex,replacement:t.replacement,group_replacement_strategy:t.group_replacement_strategy}));var Qe={name:"GeneralComponent",props:{content:{type:String,required:!0}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})},prepareContent(){Array.from(document.getElementsByClassName("tablesorter")).forEach((t,e)=>{this.sanitizeLegacyTables(t),new Tabulator(t,{index:e,layout:"fitDataFill",columnDefaults:{formatter:"html",resizable:!0,minWidth:"100px"}})}),document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),BsConfirm.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),document.querySelectorAll("[href]").forEach(t=>{let e=Ye(t.getAttribute("href"));t.href=e}),document.querySelectorAll("[style*=background-color]").forEach(t=>{"rgb(255, 255, 255)"==t.style.backgroundColor&&(t.style.backgroundColor="var(--fhc-background)"),t.querySelector("*[style*=background-color]")&&(t.style.backgroundColor="var(--fhc-tertiary)")})}},updated(){this.prepareContent()},mounted(){this.prepareContent()},template:'\n \x3c!-- div that contains the content --\x3e\n
    \n \t
    \n
    \n

    Content was not found

    \n '},Xe={name:"ContentComponent",props:{content_id:{type:[Number,String],required:!0},version:{type:[String,Number],default:null},sichtbar:{type:[String,Number],default:null}},components:{raum_contentmittitel:We,news_content:{name:"NewsContentType",props:{content:{type:String,required:!0}},methods:{sanitizeLegacyTables(t){t.querySelectorAll("table").forEach(t=>{const e=t.textContent.trim(),n=document.createElement("p");n.textContent=e,t.parentNode.replaceChild(n,t)});t.querySelectorAll("ul").forEach(t=>{Array.from(t.children).forEach(e=>{const n=document.createElement("p");n.textContent=e.textContent,t.parentNode.appendChild(n)}),t.parentNode.removeChild(t)});Array.from(t.querySelectorAll("td")).filter(t=>t.scrollWidth>100).forEach(t=>{if(t.firstChild?.nodeType===Node.TEXT_NODE&&t.firstChild.length>10){const e=document.createElement("p");e.appendChild(t.firstChild),t.appendChild(e)}});Array.from(t.querySelectorAll("th")).forEach(t=>{t.children.length>1&&(t.innerHTML=Array.from(t.childNodes).find(t=>t.textContent).textContent)});t.querySelectorAll("p").forEach(t=>{t.style.setProperty("word-wrap","break-word"),t.style.setProperty("white-space","normal"),t.style.setProperty("max-width","400px")})}},mounted(){Array.from(document.getElementsByClassName("tablesorter")).forEach((t,e)=>{this.sanitizeLegacyTables(t),new Tabulator(t,{index:e,layout:"fitDataFill",columnDefaults:{formatter:"html",resizable:!0,minWidth:"100px"}})}),document.querySelectorAll("#cms [data-confirm]").forEach(t=>{t.addEventListener("click",e=>{e.preventDefault(),BsConfirm.popup(t.dataset.confirm).then(()=>{Axios.get(t.href).then(t=>{location=location}).catch(t=>console.error("ERROR:",t))}).catch(()=>{})})}),document.querySelectorAll("#cms [data-href]").forEach(t=>{t.href=t.dataset.href.replace(/^ROOT\//,FHC_JS_DATA_STORAGE_OBJECT.app_root)}),document.querySelectorAll("[href]").forEach(t=>{let e=Ye(t.getAttribute("href"));t.href=e}),document.querySelectorAll("[style*=background-color]").forEach(t=>{"rgb(255, 255, 255)"==t.style.backgroundColor&&(t.style.backgroundColor="var(--fhc-background)"),t.querySelector("*[style*=background-color]")&&(t.style.backgroundColor="var(--fhc-tertiary)")}),Vue.nextTick(()=>{document.querySelectorAll(".card-header").forEach(t=>{t.classList.add("fhc-primary")}),document.querySelectorAll(".row").forEach(t=>{t.classList.add("w-100"),t.classList.add("align-items-center")}),document.querySelectorAll(".row h2").forEach(t=>{t.classList.add("mb-0")})})},template:'\n\t \x3c!-- div that contains the content --\x3e\n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t '},general:Qe,iframe_content:{name:"iframe_content",props:{content:{type:String,required:!0}},computed:{srcUrl(){const t=(new DOMParser).parseFromString(`
    ${this.content}
    `,"text/html").querySelector("iframe[src]");if(!t)return"";return Ye(t.getAttribute("src")||"")}},template:'\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t'}},data(){return{content_type:null,content:null,content_id_internal:this.content_id}},methods:{fetchContent(){this.$api.call(Ge.content(this.content_id_internal,this.version,this.sprache,this.sichtbar)).then(t=>{this.$nextTick(function(){this.content=t.data.content,this.content_type=t.data.type})})}},watch:{sprache:function(t){this.fetchContent()},"$route.params.content_id"(t){this.content_id_internal=t,this.fetchContent()}},computed:{sprache(){return this.$p.user_language.value},computeContentType:function(){switch(this.content_type){case"raum_contentmittitel":return"raum_contentmittitel";case"news":return"news_content";case"iframe":return"iframe_content";default:return"general"}}},created(){this.fetchContent()},template:'\n \x3c!-- div that contains the content --\x3e\n\t
    \n \t\n\t
    \n

    No content is available to display

    \n '};const tn="Week";var en={name:"RoomInformation",components:{FhcCalendar:Rt},props:{viewData:Object,propsViewData:Object},computed:{currentDay(){return this.propsViewData?.focus_date||luxon.DateTime.now().setZone(this.viewData.timezone).toISODate()},currentMode(){return this.propsViewData?.mode||tn}},methods:{handleChangeDate(t,e){return this.handleChangeMode(e,t)},handleChangeMode(t,e){const n=t[0].toUpperCase()+t.slice(1),i=e.toISODate();this.$router.push({name:"RoomInformation",params:{mode:n,focus_date:i,ort_kurzbz:this.propsViewData.ort_kurzbz}})},getPromiseFunc(t,e){return[this.$api.call(Et.getRoomInfo(this.propsViewData.ort_kurzbz,t.toISODate(),e.toISODate())),this.$api.call(Et.getOrtReservierungen(this.propsViewData.ort_kurzbz,t.toISODate(),e.toISODate()))]}},template:'\n\t
    \n\t\t

    {{ $p.t(\'rauminfo/rauminfo\') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    '},nn={getConfig:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getConfig"}),getConfigStudent:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getConfigStudent"}),getStudentProjektarbeiten:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudentProjektarbeiten",params:{uid:t}}),getStudentProjektabgaben:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudentProjektabgaben",params:{projektarbeit_id:t.projektarbeit_id,student_uid:t.student_uid}}),postStudentProjektarbeitEndupload:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),postStudentProjektarbeitZwischenabgabe:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),getMitarbeiterProjektarbeiten:t=>({method:"get",url:"/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten",params:{showall:t}}),postProjektarbeitAbgabe(t){let e=t.datum;if(t.datum instanceof Date){e=`${t.datum.getFullYear()}-${String(t.datum.getMonth()+1).padStart(2,"0")}-${String(t.datum.getDate()).padStart(2,"0")}`}return{method:"post",url:"/api/frontend/v1/Abgabe/postProjektarbeitAbgabe",params:{paabgabe_id:t.paabgabe_id,paabgabetyp_kurzbz:t.bezeichnung.paabgabetyp_kurzbz,datum:e,note:t.note_pk,upload_allowed:!!t.upload_allowed,beurteilungsnotiz:t.beurteilungsnotiz??"",fixtermin:t.fixtermin,insertvon:t.insertvon,kurzbz:t.kurzbz,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.betreuer_person_id}}},deleteProjektarbeitAbgabe:t=>({method:"post",url:"/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe",params:{paabgabe_id:t}}),postSerientermin:(t,e,n,i,a,s,r)=>({method:"post",url:"/api/frontend/v1/Abgabe/postSerientermin",params:{datum:t,paabgabetyp_kurzbz:e,bezeichnung:n,kurzbz:i,upload_allowed:a,projektarbeit_ids:s,fixtermin:r}}),fetchDeadlines:t=>({method:"post",url:"/api/frontend/v1/Abgabe/fetchDeadlines",params:{person_id:t}}),getPaAbgabetypen:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getPaAbgabetypen"}),getNoten:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getNoten"}),getProjektarbeitenForStudiengang:(t,e=0)=>({method:"get",url:"/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang",params:{studiengang_kz:t,benotet:e}}),getStudiengaenge:()=>({method:"get",url:"/api/frontend/v1/Abgabe/getStudiengaenge"}),postStudentProjektarbeitZusatzdaten:t=>({method:"post",url:"/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten",params:t,config:{Headers:{"Content-Type":"multipart/form-data"}}}),getSignaturStatusForProjektarbeitAbgaben:(t,e)=>({method:"post",url:"/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben",params:{paabgabe_ids:t,student_uid:e}})};const an={name:"FhcOverlay",props:{active:{type:Boolean,default:!1}},template:'\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t'},sn={name:"AbgabeStudentDetail",components:{Upload:xe,BsModal:s,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,Accordion:primevue.accordion,AccordionTab:primevue.accordiontab,Message:primevue.message,Inplace:primevue.inplace,VueDatePicker:a,FhcOverlay:an},inject:["notenOptions","isMobile","isViewMode","moodle_link"],props:{projektarbeit:{type:Object,default:null},viewMode:{type:Boolean,default:!1}},data:()=>({loading:!1,eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}),methods:{getNoteBezeichnung(t){const e=this.notenOptions.find(e=>e.note==t.note);return e?.bezeichnung?e?.positiv?this.$capitalize(this.$p.t("abgabetool/c4positivBenotet"))+" ✅":this.$capitalize(this.$p.t("abgabetool/c4negativBenotet"))+" ❌":!0!==e?.benotbar||t.note?"":this.$capitalize(this.$p.t("abgabetool/c4notYetGraded"))},async validate(t,e=!1){return t.file.length?!e||!1!==await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/confirmEnduploadSpeichern"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"p-button-primary",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"p-button-secondary"}):(this.$fhcAlert.alertWarning(this.$capitalize(this.$p.t("global/warningChooseFile"))),!1)},async triggerEndupload(){if(!await this.validate(this.enduploadTermin,!0))return!1;const t=new FormData;t.append("paabgabetyp_kurzbz",this.enduploadTermin.paabgabetyp_kurzbz),t.append("projektarbeit_id",this.enduploadTermin.projektarbeit_id),t.append("paabgabe_id",this.enduploadTermin.paabgabe_id),t.append("student_uid",this.projektarbeit.student_uid),t.append("bperson_id",this.projektarbeit.bperson_id),t.append("sprache",this.form.sprache.sprache),t.append("abstract",this.form.abstract),t.append("abstract_en",this.form.abstract_en),t.append("schlagwoerter",this.form.schlagwoerter),t.append("schlagwoerter_en",this.form.schlagwoerter_en),t.append("seitenanzahl",this.form.seitenanzahl);for(let e=0;e{this.handleUploadRes(t,this.enduploadTermin)}).finally(()=>{this.loading=!1}),this.$refs.modalContainerEnduploadZusatzdaten.hide()},downloadAbgabe(t){const e=`/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;window.open(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+e)},formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},async upload(t){if(!await this.validate(t))return!1;if("end"===t.bezeichnung?.paabgabetyp_kurzbz)this.enduploadTermin=t,this.$refs.modalContainerEnduploadZusatzdaten.show();else{const e=new FormData;e.append("paabgabetyp_kurzbz",t.paabgabetyp_kurzbz),e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("paabgabe_id",t.paabgabe_id),e.append("student_uid",this.projektarbeit.student_uid),e.append("bperson_id",this.projektarbeit.bperson_id);for(let n=0;n{this.handleUploadRes(e,t)}).finally(()=>{this.loading=!1})}},handleUploadRes(t,e){"success"==t.meta.status?(this.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t("abgabetool/c4fileUploadSuccessv3"))),e.abgabedatum=(new Date).toISOString().split("T")[0],void 0!==t?.data?.signatur&&(e.signatur=t.data.signatur)):this.$fhcAlert.alertError(this.$capitalize(this.$p.t("abgabetool/c4fileUploadErrorv3"))),t.meta.signaturInfo&&this.$fhcAlert.alertInfo(t.meta.signaturInfo)},getOptionLabel:t=>t.sprache,getTerminNoteBezeichnung(t){const e=this.notenOptions.find(e=>e.note==t.note);return e?e.bezeichnung:""}},watch:{projektarbeit(t){this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract??"",this.form.abstract_en=t.abstract_en??"",this.form.schlagwoerter=t.schlagwoerter??"",this.form.schlagwoerter_en=t.schlagwoerter_en??"",this.form.kontrollschlagwoerter=t.kontrollschlagwoerter??"",this.form.seitenanzahl=t.seitenanzahl??1}},computed:{getMoodleLink(){return this.moodle_link+this.projektarbeit.studiengang_kz},getMessagePtStyle:()=>({root:{style:{margin:"0px"}},wrapper:{style:{padding:"6px"}}}),getEid(){return this.$capitalize(this.$p.t("abgabetool/c4eidesstattlicheErklaerung"))},allowedToSaveZusatzdaten(){return this.form.schlagwoerter.length>0&&this.form.schlagwoerter_en.length>0&&this.form.abstract.length>0&&this.form.abstract_en.length>0&&this.form.seitenanzahl>0},getAllowedToSendEndupload(){return this.eidAkzeptiert&&this.allowedToSaveZusatzdaten},qualityGateTerminAvailable(){let t=!1;return this.projektarbeit?.abgabetermine.forEach(e=>{"qualgate1"!=e.paabgabetyp_kurzbz&&"qualgate2"!=e.paabgabetyp_kurzbz||(t=!0)}),t},getTooltipVerspaetet(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipVerspaetet")),class:"custom-tooltip"}},getTooltipVerpasst(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipVerpasst")),class:"custom-tooltip"}},getTooltipAbzugeben(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbzugeben")),class:"custom-tooltip"}},getTooltipStandard(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipStandardv2")),class:"custom-tooltip"}},getTooltipAbgegeben(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgegeben")),class:"custom-tooltip"}},getTooltipFixtermin(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipFixtermin")),class:"custom-tooltip"}},getTooltipAbgabeDetected(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgabeDetected")),class:"custom-tooltip"}},getTooltipNotAllowedToUpload(){return this.isViewMode?{value:this.$capitalize(this.$p.t("abgabetool/c4studentAbgabeNotAllowedInViewMode")),class:"custom-tooltip"}:{value:this.$capitalize(this.$p.t("abgabetool/c4studentAbgabeNotAllowedRegular")),class:"custom-tooltip"}},getTooltipBeurteilungerforderlich(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipBeurteilungerforderlich")),class:"custom-tooltip"}},getTooltipBestanden(){return{value:this.$p.t("abgabetool/c4tooltipBestanden"),class:"custom-tooltip"}},getTooltipNichtBestanden(){return{value:this.$p.t("abgabetool/c4tooltipNichtBestanden"),class:"custom-tooltip"}}},created(){},mounted(){},template:'\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t(\'abgabetool/c4abgabeStudentenbereich\') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'person/student\') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'abgabetool/c4titel\') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t(\'abgabetool/c4betreuerv2\') ) }}: {{projektarbeit ? $p.t(\'abgabetool/c4betrart\' + projektarbeit.betreuerart_kurzbz) + \' \' + projektarbeit.betreuer : \'\'}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t(\'abgabetool/c4checkoutStgMoodleInfos\') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t(\'abgabetool/c4keineAbgabetermineGefunden\') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n '},rn="Europe/Vienna",on=luxon.DateTime.now().setZone(rn);function ln(t,e){const n=luxon.DateTime.fromISO(t.datum,{zone:rn}).endOf("day"),i=t.abgabedatum?luxon.DateTime.fromISO(t.abgabedatum,{zone:rn}):null;t.diffindays=n.diff(on,"days").days;const a=i&&i>n;if(t.note){const n="object"==typeof t.note?t.note:e.find(e=>e.note==t.note);if(!0===n?.positiv)return"bestanden";if(!1===n?.positiv)return"nichtbestanden"}return t.bezeichnung?.benotbar&&n<=on?"beurteilungerforderlich":t.upload_allowed?t.abgabedatum?a?"verspaetet":"abgegeben":nthis.notenOptions),isViewMode:Vue.computed(()=>this.isViewMode),moodle_link:Vue.computed(()=>this.moodle_link)}},props:{student_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({uid:""}),validator:t=>t&&t.uid}},data:()=>({activeTabIndex:[0],abgabeTypeOptions:null,phrasenPromise:null,phrasenResolved:!1,loading:!1,notenOptions:null,detail:null,projektarbeiten:null,selectedProjektarbeit:null,moodle_link:null}),methods:{checkQualityGatesStrict(t){let e=!1,n=!1;return t.forEach(t=>{const i=this.notenOptions?.find(e=>e.note==t.note);i&&i.positiv&&("qualgate1"==t.paabgabetyp_kurzbz?e=!0:"qualgate2"==t.paabgabetyp_kurzbz&&(n=!0))}),e&&n},checkQualityGatesOptional(t){const e=t.find(t=>"qualgate1"==t.paabgabetyp_kurzbz),n=t.find(t=>"qualgate2"==t.paabgabetyp_kurzbz);let i=!0;e&&(i=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate1"==t.paabgabetyp_kurzbz&&(i=!0)}));let a=!0;return n&&(a=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate2"==t.paabgabetyp_kurzbz&&(a=!0)})),i&&a},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){this.loading=!0,this.loadAbgaben(t).then(e=>{const n=this.projektarbeiten?.find(e=>e.projektarbeit_id==t.projektarbeit_id);n.abgabetermine=e.data[0].retval;const i=null!==n.note;n.abgabetermine.forEach(t=>{if(t.file=[],t.allowedToUpload=!1,"end"==t.paabgabetyp_kurzbz){const e=!t.fixtermin||!this.isPastDate(t.datum);t.allowedToUpload=e&&this.checkQualityGatesOptional(n.abgabetermine)}else t.fixtermin?t.allowedToUpload=!this.isPastDate(t.datum):t.allowedToUpload=t.upload_allowed;i&&(t.allowedToUpload=!1),t.bezeichnung=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz===t.paabgabetyp_kurzbz),t.dateStyle=ln(t,this.notenOptions)}),n.betreuer=this.buildBetreuer(n),n.student_uid=this.student_uid,this.selectedProjektarbeit=n,this.$refs.modalContainerAbgabeDetail.show()}).finally(()=>{this.loading=!1})},centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",detailFormatter(t){const e=t.getValue();return"detailTermine"===e.mode?'
    ':"beurteilungDownload"===e.mode?'
    ':void 0},mailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",buildMailToLink:t=>"mailto:"+t.email,buildBetreuer:t=>(t.btitelpre?t.btitelpre+" ":"")+t.bvorname+" "+t.bnachname+(t.btitelpost?" "+t.btitelpost:""),async setupData(t){const e=t[0]??null;e&&(this.projektarbeiten=e.map(t=>({...t,details:{student_uid:this.student_uid,projektarbeit_id:t.projektarbeit_id,betreuer_person_id:t.bperson_id,betreuerart_kurzbz:t.betreuerart_kurzbz,mode:"detailTermine"},beurteilung1:t.downloadLink1??null,beurteilung2:t.downloadLink2??null,sem:t.studiensemester_kurzbz,stg:t.kurzbzlang,mail:this.buildMailToLink(t),betreuer:this.buildBetreuer(t),typ:t.projekttypbezeichnung,titel:t.titel})))},loadProjektarbeiten(){this.$api.call(nn.getStudentProjektarbeiten(this.student_uid)).then(t=>{t?.data&&this.setupData(t.data)})},loadAbgaben(t){return new Promise(e=>{this.$api.call(nn.getStudentProjektabgaben(t)).then(t=>{e(t)})})},async setupMounted(){this.loadProjektarbeiten()},getAccTabHeaderForProjektarbeit(t){let e="";return e+=t.titel??this.$p.t("abgabetool/keinTitel"),e},getMailLink:t=>t.email?"mailto:"+t.email:"",getNoteBezeichnung(t){if(t.note&&this.notenOptions){const e=this.notenOptions.find(e=>e.note==t.note);return e?.bezeichnung}return""},handleDownloadBeurteilung1(t){window.open(t.beurteilung1)},handleDownloadBeurteilung2(t){window.open(t.beurteilung2)}},watch:{},computed:{isViewMode(){return this.student_uid!==this.viewData.uid},student_uid(){return this.student_uid_prop||this.viewData?.uid||null}},async created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0}),this.loading=!0,await this.$api.call(nn.getNoten()).then(t=>{"success"==t.meta.status&&(this.notenOptions=t.data[0],this.allowedNotenOptions=this.notenOptions.filter(e=>t.data[1].includes(e.note)))}).finally(()=>{this.loading=!1}),this.$api.call(nn.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1}),this.$api.call(nn.getConfigStudent()).then(t=>{this.moodle_link=t.data?.moodle_link}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\n '},cn={name:"AbgabeMitarbeiterDetail",components:{BsModal:s,InputNumber:primevue.inputnumber,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,SpeedDial:primevue.speeddial,Accordion:primevue.accordion,AccordionTab:primevue.accordiontab,Message:primevue.message,VueDatePicker:a},emits:["paUpdated"],inject:["abgabeTypeOptions","abgabetypenBetreuer","allowedNotenOptions","notenOptionsNonFinal","turnitin_link","old_abgabe_beurteilung_link"],props:{projektarbeit:{type:Object,default:null},isFullscreen:{type:Boolean,default:!1},assistenzMode:{type:Boolean,default:!1}},data(){return{showAutomagicModalPhrase:!1,eidAkzeptiert:!1,enduploadTermin:null,allActiveLanguages:FHC_JS_DATA_STORAGE_OBJECT.server_languages,speedDialItems:[{label:Vue.computed(()=>this.$p.t("abgabetool/c4newAbgabetermin")),icon:"fa fa-plus",command:this.openCreateNewAbgabeModal,disabled:Vue.computed(()=>!this.getAllowedToCreateNewTermin)},{label:Vue.computed(()=>this.$p.t("abgabetool/c4benoten")),icon:"fa fa-user-check",command:this.openBenotung,disabled:Vue.computed(()=>1==this.assistenzMode)},{label:Vue.computed(()=>this.$p.t("abgabetool/c4plagiatcheck_link")),icon:"fa fa-clipboard-check",command:this.openPlagiatcheck},{label:Vue.computed(()=>this.$p.t("abgabetool/c4student_perspective")),icon:"fa fa-eye",command:this.openStudentPage}],newTermin:null,form:Vue.reactive({sprache:"",abstract:"",abstract_en:"",schlagwoerter:"",schlagwoerter_en:"",kontrollschlagwoerter:"",seitenanzahl:1})}},methods:{getNoteBezeichnung(t){return t.noteBackend?.bezeichnung?t.noteBackend?.positiv?this.$capitalize(this.$p.t("abgabetool/c4positivBenotet"))+" ✅":this.$capitalize(this.$p.t("abgabetool/c4negativBenotet"))+" ❌":!0!==t.bezeichnung?.benotbar||t.noteBackend?"":this.$capitalize(this.$p.t("abgabetool/c4notYetGraded"))},getPlaceholderTermin(t){return t?.bezeichnung?this.$p.t("abgabetool/c4paatyp"+t.paabgabetyp_kurzbz):this.$p.t("abgabetool/abgabetypPlaceholder")},saveTermin(t){return t.paabgabe_id,t.note_pk=t.note?.note??null,t.betreuer_person_id=this.projektarbeit.betreuer_person_id,t.fixtermin=!t.invertedFixtermin,this.$api.call(nn.postProjektarbeitAbgabe(t)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert"));const n=this.allowedNotenOptions.find(t=>t.note==e.data[0].note),i={allowedToSave:!0,allowedToDelete:!0,...e.data[0]};i.note&&(i.note=n,i.noteBackend=n),i.invertedFixtermin=!i.fixtermin;const a=e.data[1],s=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==i.paabgabetyp_kurzbz);if(i.bezeichnung={bezeichnung:t.bezeichnung?.bezeichnung,paabgabetyp_kurzbz:t.bezeichnung?.paabgabetyp_kurzbz,benotbar:s.benotbar},a){const e=this.allowedNotenOptions.find(t=>t.note==a.note);a.note=e,t.paabgabetyp_kurzbz=i.paabgabetyp_kurzbz,t.noteBackend=n,t.dateStyle=ln(t,this.notenOptions)}else i.dateStyle=ln(i,this.notenOptions),this.projektarbeit.abgabetermine.push(i);this.projektarbeit.abgabetermine.sort((t,e)=>new Date(t.datum)-new Date(e.datum)),this.projektarbeit.abgabetermine.findIndex(e=>t.paabgabe_id==e.paabgabe_id);const r=!a&&!i.note?.positiv&&null!==i.note,o=a&&!i.note?.positiv&&null!==i.note&&(a.note?.positiv||void 0===a.note);r||o?(this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:!1,paabgabetyp_kurzbz:"",bezeichnung:this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===i.paabgabetyp_kurzbz),abgabedatum:null,insertvon:this.viewData?.uid??""},this.showAutomagicModalPhrase=!0,this.$refs.modalContainerCreateNewAbgabe.show()):this.showAutomagicModalPhrase=!1,this.$emit("paUpdated",this.projektarbeit)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},openZusatzdatenModal(){this.$refs.modalContainerZusatzdaten.show()},async saveZusatzdaten(){if(!await this.validateZusatzdaten())return!1;const t=this.projektarbeit,e=new FormData;e.append("projektarbeit_id",this.projektarbeit.projektarbeit_id),e.append("sprache",this.form.sprache.sprache),e.append("abstract",this.form.abstract),e.append("abstract_en",this.form.abstract_en),e.append("schlagwoerter",this.form.schlagwoerter),e.append("schlagwoerter_en",this.form.schlagwoerter_en),e.append("seitenanzahl",this.form.seitenanzahl),this.loading=!0,this.$api.call(nn.postStudentProjektarbeitZusatzdaten(e)).then(e=>{if("success"==e.meta.status){if(this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert")),!data?.retval?.[0])return;const e=data.retval[0];t.seitenanzahl=e.seitenanzahl??1,t.kontrollschlagwoerter=e.kontrollschlagwoerter??"",t.schlagwoerter=e.schlagwoerter??"",t.sprache=e.sprache??"",t.schlagwoerter_en=e.schlagwoerter_en??"",t.abstract=e.abstract??"",t.abstract_en=e.abstract_en??""}}).finally(()=>{this.loading=!1}),this.$refs.modalContainerZusatzdaten.hide()},async validateZusatzdaten(){return!1!==await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/confirmZusatzdatenSpeichern"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"p-button-primary",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"p-button-secondary"})},async handleDeleteTermin(t){if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4confirm_delete"),acceptLabel:"Löschen",acceptClass:"p-button-danger",rejectLabel:"Zurück",rejectClass:"p-button-secondary"}))return!1;this.deleteTermin(t)},deleteTermin(t){this.$api.call(nn.deleteProjektarbeitAbgabe(t.paabgabe_id)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/genericDeleted",[this.$p.t("abgabetool/abgabe")]));const e=this.projektarbeit.abgabetermine.findIndex(e=>e.paabgabe_id===t.paabgabe_id);this.projektarbeit.abgabetermine.splice(e,1),this.$emit("paUpdated",this.projektarbeit)}else"error"==e?.meta?.status&&this.$fhcAlert.alertError()})},validate:function(t){return!!t.file.length||(this.$fhcAlert.alertWarning(this.$p.t("global/warningChooseFile")),!1)},downloadAbgabe(t){const e=`/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${t.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;window.open(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+e)},openBeurteilungLink(t){window.open(t,"_blank")},getOptionLabelSprache:t=>t.sprache,getOptionLabelAbgabetyp(t){return this.$p.t("abgabetool/c4paatyp"+t.paabgabetyp_kurzbz)},getOptionDisabled:t=>!t.aktiv,getNotenOptionLabel:t=>t.bezeichnung,openStudentPage(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Student/"+this.projektarbeit?.student_uid;window.open(t,"_blank")},openPlagiatcheck(){const t=this.turnitin_link;window.open(t,"_blank")},async openBenotung(){if(this.getSemesterBenotbar&&this.projektarbeit?.abgabetermine.find(t=>"end"==t.paabgabetyp_kurzbz&&null!==t.abgabedatum)&&this.projektarbeit?.beurteilungLinkNew){const t=this.projektarbeit?.beurteilungLinkNew;window.open(t,"_blank")}else if(this.projektarbeit?.abgabetermine.find(t=>"end"==t.paabgabetyp_kurzbz&&null!==t.abgabedatum)&&this.projektarbeit?.beurteilungLinkOld){if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4aeltereParbeitBenotenv2"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"btn btn-danger",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"btn btn-outline-secondary"}))return!1;const t=this.projektarbeit?.beurteilungLinkOld;window.open(t,"_blank")}else if(!1===await this.$fhcAlert.confirm({message:this.$p.t("abgabetool/c4keinEnduploadErfolgt"),acceptLabel:this.$capitalize(this.$p.t("abgabetool/c4AcceptAndProceed")),acceptClass:"btn btn-danger",rejectLabel:this.$capitalize(this.$p.t("abgabetool/c4Cancel")),rejectClass:"btn btn-outline-secondary"}))return!1},formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},openCreateNewAbgabeModal(){if("Zweitbegutachter"!=this.projektarbeit?.betreuerart_kurzbz){if(!this.newTermin){const t=this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz);this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:t.upload_allowed_default,paabgabetyp_kurzbz:"",bezeichnung:t,abgabedatum:null,insertvon:this.viewData?.uid??""}}this.$refs.modalContainerCreateNewAbgabe.show()}else this.$fhcAlert.alertWarning("Terminanlage disabled")},validateTermin:t=>!0,async handleSaveNewAbgabe(t){if(!this.validateTermin(t))return this.$fhcAlert.alertWarning("invalid termin"),!1;await this.saveTermin(t),this.$refs.modalContainerCreateNewAbgabe.hide(),this.newTermin={paabgabe_id:-1,projektarbeit_id:this.projektarbeit.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:!1,paabgabetyp_kurzbz:"",bezeichnung:this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz),abgabedatum:null,insertvon:this.viewData?.uid??""}},handleChangeAbgabetyp(t){"qualgate1"===t.bezeichnung?.paabgabetyp_kurzbz||"qualgate2"===t.bezeichnung?.paabgabetyp_kurzbz?t.kurzbz=t.bezeichnung.bezeichnung:t.kurzbz=""}},computed:{getAllowedToCreateNewTermin(){if(this.assistenzMode)return!0;if("Zweitbegutachter"==this.projektarbeit?.betreuerart_kurzbz)return!1;if(void 0!==this.projektarbeit?.note&&null!==this.projektarbeit.note){return!!this.notenOptionsNonFinal.find(t=>t.note)}return!0},allowedToSaveZusatzdaten(){return this.form.schlagwoerter.length>0&&this.form.schlagwoerter_en.length>0&&this.form.abstract.length>0&&this.form.abstract_en.length>0&&this.form.seitenanzahl>0},getAllowedAbgabeTypeOptions(){return this.assistenzMode?this.abgabeTypeOptions:this.abgabeTypeOptions.filter(t=>this.abgabetypenBetreuer.includes(t.paabgabetyp_kurzbz))},getMessagePtStyle:()=>({root:{style:{margin:"0px"}},wrapper:{style:{padding:"6px"}}}),getEid(){return this.$p.t("abgabetool/c4eidesstattlicheErklaerung")},getEnduploadErlaubt(){return!this.eidAkzeptiert},getSemesterBenotbar(){return this.projektarbeit?.isCurrent??!1},endUploadVorhanden(){return this.projektarbeit?.abgabetermine.find(t=>"end"===t.paabgabetyp_kurzbz&&null!==t.abgabedatum)},qualityGateTerminAvailable(){let t=!1;return this.projektarbeit?.abgabetermine.forEach(e=>{"qualgate1"!=e.bezeichnung?.paabgabetyp_kurzbz&&"qualgate2"!=e?.bezeichnung?.paabgabetyp_kurzbz||(t=!0)}),t},getSpeedDialStyle:()=>"position: static !important;",getSpeedDialWrapperStyle:()=>"position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;",getTooltipVerspaetet(){return{value:this.$p.t("abgabetool/c4tooltipVerspaetet"),class:"custom-tooltip"}},getTooltipVerpasst(){return{value:this.$p.t("abgabetool/c4tooltipVerpasst"),class:"custom-tooltip"}},getTooltipAbzugeben(){return{value:this.$p.t("abgabetool/c4tooltipAbzugeben"),class:"custom-tooltip"}},getTooltipStandard(){return{value:this.$p.t("abgabetool/c4tooltipStandardv2"),class:"custom-tooltip"}},getTooltipBeurteilungerforderlich(){return{value:this.$p.t("abgabetool/c4tooltipBeurteilungerforderlich"),class:"custom-tooltip"}},getTooltipAbgegeben(){return{value:this.$p.t("abgabetool/c4tooltipAbgegeben"),class:"custom-tooltip"}},getTooltipFixtermin(){return{value:this.$p.t("abgabetool/c4tooltipFixtermin"),class:"custom-tooltip"}},getTooltipAbgabeDetected(){return{value:this.$capitalize(this.$p.t("abgabetool/c4tooltipAbgabeDetected")),class:"custom-tooltip"}},getTooltipNotAllowedToSave(){return{value:this.$p.t("abgabetool/c4notAllowedToEditAbgabeTermin"),class:"custom-tooltip"}},getTooltipNotAllowedToDelete(){return{value:this.$p.t("abgabetool/c4notAllowedToDeleteAbgabeTermin"),class:"custom-tooltip"}},getTooltipBestanden(){return{value:this.$p.t("abgabetool/c4tooltipBestanden"),class:"custom-tooltip"}},getTooltipNichtBestanden(){return{value:this.$p.t("abgabetool/c4tooltipNichtBestanden"),class:"custom-tooltip"}},getProjektarbeitTitel(){return this.projektarbeit?.titel?this.$capitalize(this.$p.t("abgabetool/c4titel"))+": "+this.projektarbeit.titel:""},getProjektarbeitStudent(){return this.projektarbeit?.student?this.$capitalize(this.$p.t("person/student"))+": "+this.projektarbeit.student:""}},watch:{"newTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.newTermin.kurzbz=t.bezeichnung),this.newTermin.upload_allowed=t.upload_allowed_default},projektarbeit(t){const e=this.abgabeTypeOptions.find(t=>"zwischen"===t.paabgabetyp_kurzbz);this.newTermin={paabgabe_id:-1,projektarbeit_id:t.projektarbeit_id,fixtermin:!1,invertedFixtermin:!0,kurzbz:"",datum:(new Date).toISOString().split("T")[0],note:this.allowedNotenOptions.find(t=>9==t.note),beurteilungsnotiz:"",upload_allowed:e.upload_allowed_default,paabgabetyp_kurzbz:"",bezeichnung:e,abgabedatum:null,insertvon:this.viewData?.uid??""},t?.abgabetermine?.forEach(t=>t.invertedFixtermin=!t.fixtermin),this.form.sprache=t.sprache?this.allActiveLanguages.find(e=>e.sprache==t.sprache):this.allActiveLanguages.find(t=>"German"==t.sprache),this.form.abstract=t.abstract??"",this.form.abstract_en=t.abstract_en??"",this.form.schlagwoerter=t.schlagwoerter??"",this.form.schlagwoerter_en=t.schlagwoerter_en??"",this.form.kontrollschlagwoerter=t.kontrollschlagwoerter??"",this.form.seitenanzahl=t.seitenanzahl??1}},created(){},mounted(){},template:'\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t(\'abgabetool/c4abgabeMitarbeiterbereich\') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\x3c!--\t\t\t\tTODO: tooltip why this button is disabled--\x3e\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t(\'abgabetool/c4keineAbgabetermineGefunden\') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n'};async function un(t,e,n,i,a){let s=t.join(","),r="";const o=n&&"string"==typeof n?n.length+9:0;if(s.length>2024&&!1===await i.confirm({message:a.t("stv","zuvieleEMails")}))return;let l=!0,d=e?.ctrlKey||e?.metaKey;for(;s.length>0;){if(s.length+o>2024){let t=s.lastIndexOf(",",1900);r=s.substring(0,t),s=s.substring(t+1)}else r=s,s="";let t=d?`mailto:?bcc=${r}`:`mailto:${r}`;n&&"string"==typeof n&&(t+=`?subject=${n}`),l?(window.location.href=t,l=!1):!0===await i.confirm({message:a.t("stv","weitereEMail")})&&(window.location.href=t)}}const pn={name:"AbgabetoolMitarbeiter",components:{BsModal:s,CoreFilterCmpt:fe,AbgabeDetail:cn,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,TieredMenu:primevue.tieredmenu,VueDatePicker:a,FhcOverlay:an},provide(){return{abgabeTypeOptions:Vue.computed(()=>this.abgabeTypeOptions),abgabetypenBetreuer:Vue.computed(()=>this.abgabetypenBetreuer),allowedNotenOptions:Vue.computed(()=>this.allowedNotenOptions),notenOptionsNonFinal:Vue.computed(()=>this.notenOptionsNonFinal),turnitin_link:Vue.computed(()=>this.turnitin_link),old_abgabe_beurteilung_link:Vue.computed(()=>this.old_abgabe_beurteilung_link)}},props:{viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.uid}},data(){return{tableData:null,abgabetypenBetreuer:null,detailIsFullscreen:!1,phrasenPromise:null,phrasenResolved:!1,turnitin_link:null,old_abgabe_beurteilung_link:null,BETREUER_SAMMELMAIL_BUTTON_STUDENT:null,saving:!1,loading:!1,abgabeTypeOptions:null,notenOptions:null,allowedNotenOptions:null,notenOptionsNonFinal:null,serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:"",upload_allowed:!1}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitDataStretch",placeholder:Vue.computed(()=>this.$p.t("global/noDataAvailable")),selectable:!0,selectableCheck:this.selectionCheck,rowHeight:40,columns:[{formatter:function(t,e,n){if(!t.getRow().getData().selectable)return;let i=document.createElement("input");i.type="checkbox",i.addEventListener("click",n=>{n.stopPropagation(),e&&e.handleClick&&e.handleClick(n,t)}),t.getRow().getData().checkbox=i;let a=document.createElement("div");return a.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",a.appendChild(i),a},titleFormatter:function(t,e,n){let i=document.createElement("input");return i.type="checkbox",i.addEventListener("click",n=>{n.stopPropagation(),e&&e.handleClick&&e.handleClick(n,t)}),i},hozAlign:"center",headerSort:!1,formatterParams:{handleClick:this.selectHandler},titleFormatterParams:{handleClick:this.selectAllHandler},width:50,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4details"))),field:"details",formatter:this.detailFormatter,headerFilter:!1,headerSort:!1,widthGrow:1,tooltip:!1,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4personenkennzeichen"))),headerFilter:!0,field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4vorname"))),field:"vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nachname"))),field:"nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4projekttyp"))),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"studiensemester_kurzbz",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4titel"))),field:"titel",headerFilter:!0,formatter:this.centeredTextFormatter,maxWidth:500,widthGrow:8},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4betreuerartv2"))),field:"betreuerart_beschreibung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4prevAbgabetermin"))),field:"prevTermin",headerFilter:Fe,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nextAbgabetermin"))),field:"nextTermin",headerFilter:Fe,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate1Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate1Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate2Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate2Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1}],persistence:!1,persistenceID:"abgabeTableBetreuer2026-02-26"},abgabeTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{"details"===e.getColumn().getField()?(this.setDetailComponent(e.getValue()),this.undoSelection(e)):"mail"===e.getColumn().getField()&&this.undoSelection(e)}},{event:"rowSelectionChanged",handler:async t=>{this.selectedData.filter(e=>!t.includes(e)).forEach(t=>{t.checkbox&&(t.checkbox.checked=!1)}),t.forEach(t=>{t.checkbox&&(t.checkbox.checked=!0)}),this.selectedData=t}}]}},methods:{handlePaUpdated(t){this.checkAbgabetermineProjektarbeit(t),this.$refs.abgabeTable.tabulator.redraw(!0)},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});un([...new Set(e)],t.originalEvent,"",this.$fhcAlert,this.$p)},getQGateStatusList(){return[this.$p.t("abgabetool/c4keinTerminVorhanden"),this.$p.t("abgabetool/c4positivBenotet"),this.$p.t("abgabetool/c4negativBenotet"),this.$p.t("abgabetool/c4notYetGraded"),this.$p.t("abgabetool/c4notSubmitted"),this.$p.t("abgabetool/c4notHappenedYet")]},sortFuncTerminCol:(t,e,n,i,a,s,r)=>null==t?1:null==e?-1:"prevTermin"==a._column.field?Math.abs(e.diffMs)-Math.abs(t.diffMs):"nextTermin"==a._column.field?Math.abs(t.diffMs)-Math.abs(e.diffMs):Math.abs(e.diffMs)-Math.abs(t.diffMs),headerFilterTerminCol(t,e){if(!e||!e.luxonDate||!e.luxonDate.isValid)return!1;const n=e.luxonDate,i=t=>{if(!t)return null;let e;return e=t instanceof Date?luxon.DateTime.fromJSDate(t):"string"==typeof t?luxon.DateTime.fromISO(t):luxon.DateTime.fromMillis(Number(t)),e.isValid?e:null},a=i(t[0]),s=i(t[1]);return a&&!s?n.hasSame(a,"day"):!(!a||!s)&&(n>=a.startOf("day")&&n<=s.endOf("day"))},loadState(){return JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID)||"null")},saveState(t){if(!this.stateRestored)return;const e={columns:t.getColumnLayout().map(t=>({field:t.field,visible:t.visible,width:t.width})),sort:t.getSorters().map(t=>({field:t.field,dir:t.dir})),filters:t.getFilters(),headerFilters:t.getHeaderFilters()};localStorage.setItem(this.abgabeTableOptions.persistenceID,JSON.stringify(e))},handleTableBuilt(){const t=this.$refs.abgabeTable.tabulator;this.tableBuiltResolve(),t.on("columnMoved",()=>{this.saveState(t)}),t.on("columnResized",()=>{this.saveState(t)}),t.on("columnVisibilityChanged",()=>{this.saveState(t)}),t.on("filterChanged",()=>{this.saveState(t)}),t.on("headerFilterChanged",()=>{this.saveState(t)}),t.on("dataSorted",()=>{this.saveState(t)}),t.on("columnSorted",()=>{this.saveState(t)}),t.on("sortersChanged",()=>{this.saveState(t)});const e=this.loadState();t.on("renderComplete",()=>{if(!this.stateRestored){if(e?.columns&&!this.colLayoutRestored){const n=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(n),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let n of e.headerFilters)t.setHeaderFilterValue(n.field,n.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const n=e.sort.map(e=>{const n=t.columnManager.findColumn(e.field);return n?{column:n,dir:e.dir}:null}).filter(Boolean);t.setSort(n)},100)),this.stateRestored=!0}})},checkQualityGateStatus(t){const e=[],n=[];t.qgate1Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate1StatusRank=0,t.qgate2Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate2StatusRank=0,t.abgabetermine.forEach(t=>{"qualgate1"==t.paabgabetyp_kurzbz&&e.push(t),"qualgate2"==t.paabgabetyp_kurzbz&&n.push(t)}),e.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate1Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate1StatusRank=5):(t.qgate1Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate1StatusRank=4)}else null==e.note&&t.qgate1StatusRank<=3?(t.qgate1Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate1StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate1StatusRank<=2?(t.qgate1Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate1StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate1StatusRank<=1&&(t.qgate1Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate1StatusRank=1)}),n.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate2Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate2StatusRank=5):(t.qgate2Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate2StatusRank=4)}else null==e.note&&t.qgate2StatusRank<=3?(t.qgate2Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate2StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate2StatusRank<=2?(t.qgate2Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate2StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate2StatusRank<=1&&(t.qgate2Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate2StatusRank=1)})},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(n=>{n.dateStyle=ln(n,this.notenOptions);const i=luxon.DateTime.fromISO(n.datum).endOf("day");n.luxonDate=i,n.diffMs=i.toMillis()-e.toMillis(),n.diffMs<0?(!t.prevTermin||n.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=n):n.diffMs>0&&(!t.nextTermin||n.diffMs
    '+t+'

    '+n+" - "+this.formatDate(e.datum)+"

    "}return""},selectHandler(t,e){const n=e.getRow();return n.isSelected()?n.deselect():n.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const n=e.getTable().getRows().filter(t=>t.getData().selectable);return n.every(t=>t.isSelected())?n.forEach(t=>t.deselect()):n.forEach(t=>t.select()),t.stopPropagation(),!1},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},toggleShowAll(t){this.showAll=t,this.loading=!0,this.loadProjektarbeiten(t,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1})},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){this.saving=!0,this.$api.call(nn.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.serienTermin.upload_allowed,this.selectedData?.map(t=>t.projektarbeit_id),!1)).then(t=>{if("success"===t.meta.status&&t.data){this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert"));const t=this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft,e=this.$refs.abgabeTable?.tabulator.rowManager.scrollTop;this.loading=!0,this.loadProjektarbeiten(this.showAll,()=>{this.$refs.abgabeTable?.tabulator.redraw(!0),this.$refs.abgabeTable?.tabulator.setSort([]),this.loading=!1,Vue.nextTick(()=>{const n=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");n&&(n.scrollLeft=t,n.scrollTop=e)})})}else this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"))}).finally(()=>{this.saving=!1}),this.$refs.modalContainerAddSeries.hide()},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){this.loading=!0;const e=this.projektarbeiten?.retval?.find(e=>e.projektarbeit_id==t.projektarbeit_id);let n=!1;if(void 0!==e.note&&null!==e.note){this.notenOptionsNonFinal.find(t=>t.note)&&(n=!1),n=!0}e?.abgabetermine?.length&&this.$api.call(nn.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const n=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);n&&void 0!==t.signatur&&(n.signatur=t.signatur)})}),e.abgabetermine.forEach(t=>{const e=this.allowedNotenOptions.find(e=>e.note==t.note);e&&(t.note=e),t.file=[],!t.noteBackend&&e&&(t.noteBackend=e),t.allowedToSave=!n,t.allowedToDelete=t.allowedToSave&&!t.abgabedatum,t.bezeichnung=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz===t.paabgabetyp_kurzbz)}),e.student_uid=t.student_uid,e.student=`${e.vorname} ${e.nachname}`,this.selectedProjektarbeit=e,this.$refs.modalContainerAbgabeDetail.show(),this.loading=!1},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'",tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.uid+"@"+this.domain},buildPKZ:t=>`${t.uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.tableData=t[0]?.retval?.map(t=>(this.checkAbgabetermineProjektarbeit(t),t.selectable="Zweitbegutachter"!==t.betreuerart_kurzbz,{...t,details:{student_uid:t.uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),typ:t.projekttyp_kurzbz,titel:t.titel})),this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns),this.$refs.abgabeTable.tabulator.setData(this.tableData)},loadProjektarbeiten(t=!1,e){this.$api.call(nn.getMitarbeiterProjektarbeiten(t)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()})},loadAbgaben(t){return new Promise(e=>{this.$api.call(nn.getStudentProjektabgaben(t)).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-n.top-80,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadProjektarbeiten(),this.calcMaxTableHeight()}},watch:{"serienTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.serienTermin.kurzbz=t.bezeichnung),this.serienTermin.upload_allowed=t.upload_allowed_default}},computed:{emailItems(){const t=[];return this.BETREUER_SAMMELMAIL_BUTTON_STUDENT&&t.push({label:this.$p.t("abgabetool/c4sendEmailStudierendev2",[this.uniqueStudentEmailCount]),command:this.sammelMailStudent}),t},uniqueStudentEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.student_uid&&t.add(e.student_uid)}),t.size},getAllowedAbgabeTypeOptions(){return this.abgabeTypeOptions.filter(t=>this.abgabetypenBetreuer.includes(t.paabgabetyp_kurzbz))}},created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0}),this.$api.call(nn.getConfig()).then(t=>{this.turnitin_link=t.data?.turnitin_link,this.old_abgabe_beurteilung_link=t.data?.old_abgabe_beurteilung_link,this.abgabetypenBetreuer=t.data?.abgabetypenBetreuer,this.BETREUER_SAMMELMAIL_BUTTON_STUDENT=t.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT}).catch(t=>{this.loading=!1}),this.$api.call(nn.getNoten()).then(t=>{"success"==t.meta.status&&(this.notenOptions=t.data[0],this.allowedNotenOptions=this.notenOptions.filter(e=>t.data[1].includes(e.note)),this.notenOptionsNonFinal=this.notenOptions.filter(e=>t.data[2].includes(e.note)))}).catch(t=>{this.loading=!1}),this.$api.call(nn.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '};var hn={name:"BootstrapOffcanvas",data:()=>({offcanvas:null}),props:{backdrop:{type:[Boolean,String],default:!0,validator:t=>["static",!0,!1].includes(t)},keyboard:{type:Boolean,default:!0},scroll:{type:Boolean,default:!1},placement:{type:String,default:"start",validator:t=>["start","end","top","bottom"].includes(t)},noCloseBtn:Boolean,headerClass:{type:[String,Array,Object],default:""},bodyClass:{type:[String,Array,Object],default:"p-4"},footerClass:{type:[String,Array,Object],default:""},dialogClass:[String,Array,Object]},emits:["hideBsOffcanvas","hiddenBsOffcanvas","hidePreventedBsOffcanvas","showBsOffcanvas","shownBsOffcanvas"],methods:{dispose(){return this.offcanvas?.dispose()},hide(){return this.offcanvas?.hide()},show(t){return this.offcanvas?.show(t)},toggle(){return this.offcanvas?.toggle()},popup(t,e,n,i){const a=this,s={};void 0!==t&&(s.default=()=>t),void 0!==n&&(s.title=()=>n),void 0!==i&&(s.footer=()=>i);let r=!1;return"undefined"!=typeof primevue&&(r=!0),new Promise((t,n)=>{const i=Vue.createApp({name:"OffcanvasTmpApp",setup:()=>()=>Vue.h(a,{class:"offcanvas-wrapper",ref:"offcanvas",...e},s),mounted(){this.$refs.offcanvas.show()},beforeUnmount(){this.$refs.offcanvas&&(!1!==this.$refs.offcanvas.result?t(this.$refs.offcanvas.result):n())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");r&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return lt}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})}},mounted(){this.$refs.offcanvas&&(this.offcanvas=new bootstrap.Offcanvas(this.$refs.offcanvas,{backdrop:this.backdrop,keyboard:this.keyboard,scroll:this.scroll}))},template:'\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t\n\t\t
    \n\t'},mn={getAllStudiensemesterAndAktOrNext:()=>({method:"get",url:"/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext"}),getAll:(t=null,e=null)=>({method:"get",url:"api/frontend/v1/organisation/studiensemester/getAll",params:{order:t,start:e}})};const gn={name:"AbgabetoolAssistenz",components:{AbgabeterminStatusLegende:{name:"AbgabeterminStatusLegende",template:'\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipVerspaetet\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipVerpasst\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipAbzugeben\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipStandardv2\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipAbgegeben\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipBeurteilungerforderlich\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipBestanden\')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t(\'abgabetool/c4tooltipNichtBestanden\')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t'},BsModal:s,BsOffcanvas:hn,CoreFilterCmpt:fe,AbgabeDetail:cn,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Inplace:primevue.inplace,Textarea:primevue.textarea,Timeline:primevue.timeline,TieredMenu:primevue.tieredmenu,VueDatePicker:a,FhcOverlay:an},provide(){return{abgabeTypeOptions:Vue.computed(()=>this.abgabeTypeOptions),allowedNotenOptions:Vue.computed(()=>this.allowedNotenOptions),notenOptionsNonFinal:Vue.computed(()=>this.notenOptionsNonFinal),turnitin_link:Vue.computed(()=>this.turnitin_link),old_abgabe_beurteilung_link:Vue.computed(()=>this.old_abgabe_beurteilung_link),abgabetypenBetreuer:Vue.computed(()=>this.abgabeTypeOptions)}},props:{stg_kz_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.uid}},data(){return{tableData:null,studiensemesterOptions:null,allSem:null,curSem:null,notenOptionFilter:null,inplaceToggle:!1,headerFiltersRestored:!1,filtersRestored:!1,colLayoutRestored:!1,sortRestored:!1,stateRestored:!1,timelineProjekt:null,selectedStudiengangOption:null,studiengaengeOptions:null,detailIsFullscreen:!1,allConfigPromise:null,phrasenPromise:null,phrasenResolved:!1,turnitin_link:null,old_abgabe_beurteilung_link:null,ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT:null,ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER:null,saving:!1,loading:!1,abgabeTypeOptions:null,notenOptions:null,allowedNotenFilterOptions:null,allowedNotenOptions:null,notenOptionsNonFinal:null,serienTermin:Vue.reactive({datum:new Date,bezeichnung:{paabgabetyp_kurzbz:"zwischen",bezeichnung:"Zwischenabgabe"},kurzbz:"",fixtermin:!1,invertedFixtermin:!0,upload_allowed:!1}),showAll:!1,tabulatorUuid:Vue.ref(0),selectedData:[],domain:"",student_uid:null,detail:null,detailOffset:0,projektarbeiten:null,selectedProjektarbeit:null,tableBuiltResolve:null,tableBuiltPromise:null,abgabeTableOptions:{minHeight:250,index:"projektarbeit_id",layout:"fitData",placeholder:Vue.computed(()=>this.$capitalize(this.$p.t("global/noDataAvailable"))),selectable:!0,selectableCheck:this.selectionCheck,rowHeight:40,renderVerticalBuffer:2e3,columns:[{formatter:function(t,e,n){if(!t.getRow().getData().selectable)return;let i=document.createElement("input");i.type="checkbox",i.addEventListener("click",n=>{n.stopPropagation(),e&&e.handleClick&&e.handleClick(n,t)}),t.getRow().getData().checkbox=i;let a=document.createElement("div");return a.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",a.appendChild(i),a},titleFormatter:function(t,e,n){let i=document.createElement("input");return i.type="checkbox",i.addEventListener("click",n=>{n.stopPropagation(),e&&e.handleClick&&e.handleClick(n,t)}),i},hozAlign:"center",headerSort:!1,formatterParams:{handleClick:this.selectHandler},titleFormatterParams:{handleClick:this.selectAllHandler},width:50,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4details"))),field:"details",headerFilter:!1,headerSort:!1,formatter:this.formAction,tooltip:!1,minWidth:150,cssClass:"sticky-col"},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4personenkennzeichen"))),headerFilter:!0,field:"pkz",formatter:this.pkzTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4vorname"))),field:"student_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nachname"))),field:"student_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4studstatus"))),field:"studienstatus",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4orgform"))),field:"orgform",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4projekttyp"))),field:"projekttyp_kurzbz",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4note"))),field:"note_bez",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"studiensemester_kurzbz",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4titel"))),field:"titel",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerv2"))),field:"erstbetreuer",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerTitelPre"))),field:"betreuer_titelpre",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerVorname"))),field:"betreuer_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerNachname"))),field:"betreuer_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4erstbetreuerTitelPost"))),field:"betreuer_titelpost",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerv2"))),field:"zweitbetreuer",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerTitelPre"))),field:"zweitbetreuer_titelpre",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerVorname"))),field:"zweitbetreuer_vorname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerNachname"))),field:"zweitbetreuer_nachname",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zweitbetreuerTitelPost"))),field:"zweitbetreuer_titelpost",headerFilter:!0,formatter:this.centeredTextFormatter,widthGrow:1,visible:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4prevAbgabetermin"))),headerFilter:Fe,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,field:"prevTermin",formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4nextAbgabetermin"))),field:"nextTermin",headerFilter:Fe,headerFilterFunc:this.headerFilterTerminCol,sorter:this.sortFuncTerminCol,formatter:this.abgabterminFormatter,widthGrow:1,width:250,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate1Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate1Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4qgate2Status"))),headerFilter:"list",headerFilterParams:{valuesLookup:this.getQGateStatusList},field:"qgate2Status",formatter:this.centeredTextFormatter,widthGrow:1,width:220,tooltip:!1}],persistence:!1,persistenceID:"abgabetool_2026_02_26"},abgabeTableEventHandlers:[{event:"rowSelectionChanged",handler:async t=>{this.selectedData.filter(e=>!t.includes(e)).forEach(t=>{t.checkbox&&(t.checkbox.checked=!1)}),t.forEach(t=>{t.checkbox&&(t.checkbox.checked=!0)}),this.selectedData=t}}]}},methods:{handlePaUpdated(t){this.checkAbgabetermineProjektarbeit(t),this.$refs.abgabeTable.tabulator.redraw(!0)},getQGateStatusList(){return[this.$p.t("abgabetool/c4keinTerminVorhanden"),this.$p.t("abgabetool/c4positivBenotet"),this.$p.t("abgabetool/c4negativBenotet"),this.$p.t("abgabetool/c4notYetGraded"),this.$p.t("abgabetool/c4notSubmitted"),this.$p.t("abgabetool/c4notHappenedYet")]},sortFuncTerminCol:(t,e,n,i,a,s,r)=>null==t?1:null==e?-1:"prevTermin"==a._column.field?Math.abs(e.diffMs)-Math.abs(t.diffMs):"nextTermin"==a._column.field?Math.abs(t.diffMs)-Math.abs(e.diffMs):Math.abs(e.diffMs)-Math.abs(t.diffMs),headerFilterTerminCol(t,e){if(!e||!e.luxonDate||!e.luxonDate.isValid)return!1;const n=e.luxonDate,i=t=>{if(!t)return null;let e;return e=t instanceof Date?luxon.DateTime.fromJSDate(t):"string"==typeof t?luxon.DateTime.fromISO(t):luxon.DateTime.fromMillis(Number(t)),e.isValid?e:null},a=i(t[0]),s=i(t[1]);return a&&!s?n.hasSame(a,"day"):!(!a||!s)&&(n>=a.startOf("day")&&n<=s.endOf("day"))},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});const n=[...new Set(e)],i=this.$p.t("abgabetool/c4sammelmailStudentBetreff",[this.selectedStudiengangOption?.bezeichnung]);un(n,t.originalEvent,i,this.$fhcAlert,this.$p)},sammelMailBetreuer(t){const e=[];this.selectedData.forEach(t=>{t.betreuer_mail&&e.push(t.betreuer_mail),t.zweitbetreuer_mail&&e.push(t.zweitbetreuer_mail)});const n=[...new Set(e)],i=this.$p.t("abgabetool/c4sammelmailBetreuerBetreff",[this.selectedStudiengangOption?.bezeichnung]);un(n,t.originalEvent,i,this.$fhcAlert,this.$p)},selectHandler(t,e){const n=e.getRow();return n.isSelected()?n.deselect():n.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const n=e.getTable().getRows().filter(t=>t.getData().selectable);return n.every(t=>t.isSelected())?n.forEach(t=>t.deselect()):n.forEach(t=>t.select()),t.stopPropagation(),!1},checkQualityGateStatus(t){const e=[],n=[];t.qgate1Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate1StatusRank=0,t.qgate2Status=this.$p.t("abgabetool/c4keinTerminVorhanden"),t.qgate2StatusRank=0,t.abgabetermine.forEach(t=>{"qualgate1"==t.paabgabetyp_kurzbz&&e.push(t),"qualgate2"==t.paabgabetyp_kurzbz&&n.push(t)}),e.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate1Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate1StatusRank=5):(t.qgate1Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate1StatusRank=4)}else null==e.note&&t.qgate1StatusRank<=3?(t.qgate1Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate1StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate1StatusRank<=2?(t.qgate1Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate1StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate1StatusRank<=1&&(t.qgate1Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate1StatusRank=1)}),n.forEach(e=>{if(null!=e.note&&t.qgate1StatusRank<=5){("object"!=typeof e.note?this.notenOptions.find(t=>t.note==e.note):e.note).positiv?(t.qgate2Status=this.$p.t("abgabetool/c4positivBenotet"),t.qgate2StatusRank=5):(t.qgate2Status=this.$p.t("abgabetool/c4negativBenotet"),t.qgate2StatusRank=4)}else null==e.note&&t.qgate2StatusRank<=3?(t.qgate2Status=this.$p.t("abgabetool/c4notYetGraded"),t.qgate2StatusRank=3):1==e.upload_allowed&&null==e.abgabedatum&&t.qgate2StatusRank<=2?(t.qgate2Status=this.$p.t("abgabetool/c4notSubmitted"),t.qgate2StatusRank=2):0==e.upload_allowed&&e.diffMs<=0&&t.qgate2StatusRank<=1&&(t.qgate2Status=this.$p.t("abgabetool/c4notHappenedYet"),t.qgate2StatusRank=1)})},getItemBezeichnung:t=>t.bezeichnung?t?.bezeichnung?.bezeichnung??t?.bezeichnung:"",getItemNote(t){if(!t?.note)return"";if(t.note?.bezeichnung)return t.note.bezeichnung;const e=this.notenOptions.find(e=>e.note==t.note);return e?e.bezeichnung:t.note},handleChangeAbgabetypSerientermin(t){"qualgate1"===t.bezeichnung?.paabgabetyp_kurzbz||"qualgate2"===t.bezeichnung?.paabgabetyp_kurzbz?t.kurzbz=t.bezeichnung.bezeichnung:t.kurzbz=""},semesterChanged(t){if(this.$refs.abgabeTable.tabulator){const e=this.$refs.abgabeTable.tabulator,n=e.getFilters().filter(t=>"studiensemester_kurzbz"!=t.field),i=t.value.studiensemester_kurzbz==this.$p.t("abgabetool/c4all")?"":t.value.studiensemester_kurzbz,a={field:"studiensemester_kurzbz",type:t.value.studiensemester_kurzbz==this.$p.t("abgabetool/c4all")?"!=":"=",value:i};e.setFilter([...n,a])}},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(n=>{n.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===n.paabgabetyp_kurzbz),n.dateStyle=ln(n,this.notenOptions);const i=luxon.DateTime.fromISO(n.datum).endOf("day");n.luxonDate=i,n.diffMs=i.toMillis()-e.toMillis(),n.diffMs<0?(!t.prevTermin||n.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=n):n.diffMs>0&&(!t.nextTermin||n.diffMs({field:t.field,visible:t.visible,width:t.width})),sort:t.getSorters().map(t=>({field:t.field,dir:t.dir})),filters:t.getFilters(),headerFilters:t.getHeaderFilters()};localStorage.setItem(this.abgabeTableOptions.persistenceID,JSON.stringify(e))},handleTableBuilt(){const t=this.$refs.abgabeTable.tabulator;this.tableBuiltResolve(),t.on("columnMoved",()=>{this.saveState(t)}),t.on("columnResized",()=>{this.saveState(t)}),t.on("columnVisibilityChanged",()=>{this.saveState(t)}),t.on("filterChanged",()=>{this.saveState(t)}),t.on("headerFilterChanged",()=>{this.saveState(t)}),t.on("dataSorted",()=>{this.saveState(t)}),t.on("columnSorted",()=>{this.saveState(t)}),t.on("sortersChanged",()=>{this.saveState(t)});const e=this.loadState();t.on("renderComplete",()=>{if(!this.stateRestored){if(e?.columns&&!this.colLayoutRestored){const n=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(n),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let n of e.headerFilters)t.setHeaderFilterValue(n.field,n.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const n=e.sort.map(e=>{const n=t.columnManager.findColumn(e.field);return n?{column:n,dir:e.dir}:null}).filter(Boolean);t.setSort(n)},100)),this.stateRestored=!0}})},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,getOptionLabelStg:t=>t.kurzbzlang+" "+t.bezeichnung,getOptionLabelStudiensemester:t=>t.studiensemester_kurzbz,getNotenFilterOptionLabel:t=>t.bezeichnung,formatDate(t){if(null===t)return"";const e=new Date(t),n=t=>String(t).padStart(2,"0"),i=n(e.getMonth()+1);return`${n(e.getDate())}.${i}.${e.getFullYear()}`},formAction(t){const e=document.createElement("div");e.className="d-flex gap-3",e.style.display="flex",e.style.alignItems="stretch",e.style.justifyContent="center",e.style.height="100%";const n=t.getValue(),i=(t,e,n)=>{const i=document.createElement("button");return i.className="btn btn-outline-secondary",i.style.display="flex",i.style.alignItems="center",i.style.justifyContent="center",i.style.height="100%",i.style.aspectRatio="1 / 1",i.style.padding="0","fa fa-timeline"==t&&(i.style.transform="rotate(90deg)"),i.innerHTML=``,i.title=this.$capitalize(this.$p.t(e)),i.addEventListener("click",t=>{t.stopPropagation(),t.stopImmediatePropagation(),n()}),i};return e.append(i("fa fa-folder-open","abgabetool/c4details",()=>this.setDetailComponent(n)),i("fa fa-timeline","abgabetool/c4termineTimeLine",()=>this.openTimeline(n))),e},undoSelection(t){const e=t.getRow();e.isSelected()&&e.deselect()},selectionCheck(t){const e=t.getData();return"Zweitbegutachter"!=e?.betreuerart_kurzbz},showDeadlines(){const t=FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/Cis/Abgabetool/Deadlines";window.open(t,"_blank")},openAddSeriesModal(){this.$refs.modalContainerAddSeries.show()},addSeries(){const t=this.selectedData?.map(t=>t.projektarbeit_id),e=[...this.selectedData];this.saving=!0,this.serienTermin.fixtermin=!this.serienTermin.invertedFixtermin,this.$api.call(nn.postSerientermin(this.serienTermin.datum.toISOString(),this.serienTermin.bezeichnung.paabgabetyp_kurzbz,this.serienTermin.bezeichnung.bezeichnung,this.serienTermin.kurzbz,this.serienTermin.upload_allowed,t,this.serienTermin.fixtermin)).then(e=>{"success"===e.meta.status&&e.data?this.$fhcAlert.alertSuccess(this.$p.t("abgabetool/serienTerminGespeichert")):this.$fhcAlert.alertError(this.$p.t("abgabetool/errorSerienterminSpeichern"));const n=e.data;t.forEach(t=>{const e=n.find(e=>e.projektarbeit_id==t),i=this.projektarbeiten.find(e=>e.projektarbeit_id==t);e.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==e.paabgabetyp_kurzbz),i.abgabetermine.push(e),i.abgabetermine.sort((t,e)=>new Date(t.datum)-new Date(e.datum))});const i=this.$refs.abgabeTable.tabulator,a=i.rowManager.scrollLeft,s=i.rowManager.scrollTop,r=this.mapProjekteToTableData(this.projektarbeiten);i.setData(r),i.redraw(!0),Vue.nextTick(()=>{const t=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");t&&(t.scrollLeft=a,t.scrollTop=s)})}).finally(()=>{this.saving=!1,this.selectedData=e}),this.$refs.modalContainerAddSeries.hide()},mapProjekteToTableData(t){return t.map(t=>{if(t.selectable=!0,t.prevTermin=null,t.nextTermin=null,this.checkAbgabetermineProjektarbeit(t),this.notenOptions&&t.note){const e=this.notenOptions.find(e=>e.note==t.note);t.note_bez=e.bezeichnung}return{...t,abgabetermine:t.abgabetermine,details:{student_uid:t.student_uid,projektarbeit_id:t.projektarbeit_id},pkz:this.buildPKZ(t),beurteilung:t.beurteilungLink??null,sem:t.studiensemester_kurzbz,stg:this.buildStg(t),mail:this.buildMailToLink(t),erstbetreuer:this.buildErstbetreuer(t),zweitbetreuer:this.buildZweitbetreuer(t),typ:t.projekttyp_kurzbz,titel:t.titel}})},createInfoString(t){let e="";return t.forEach(t=>{e+=t,e+="; "}),e},isPastDate(t){const e=luxon.DateTime.fromISO(t,{zone:"Europe/Vienna"}).endOf("day");return luxon.DateTime.now().setZone("Europe/Vienna")>e},setDetailComponent(t){const e=this.projektarbeiten.find(e=>e.projektarbeit_id==t.projektarbeit_id);e?.abgabetermine?.length&&this.$api.call(nn.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const n=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);n&&void 0!==t.signatur&&(n.signatur=t.signatur)})});const n=null!==e.note;e.abgabetermine.forEach(t=>{"object"!=typeof t.note&&(t.note=this.allowedNotenOptions.find(e=>e.note==t.note)),!t.noteBackend&&t.note&&(t.noteBackend=t.note),t.file=[],t.allowedToSave=!n,t.allowedToDelete=!n&&!t.abgabedatum});const i=e.vorname??e.student_vorname,a=e.nachname??e.student_nachname;e.student=`${i} ${a}`,this.selectedProjektarbeit=e,this.$refs.modalContainerAbgabeDetail.show()},openTimeline(t){const e=this.projektarbeiten.find(e=>e.projektarbeit_id==t.projektarbeit_id);e?(e.abgabetermine.forEach(t=>{const e=this.abgabeTypeOptions.find(e=>e.paabgabetyp_kurzbz==t.paabgabetyp_kurzbz);t.benotbar=e.benotbar}),this.timelineProjekt=e,this.$refs.drawer.show()):this.$fhcAlert.alertInfo("Keine projektarbeit gefunden")},centeredTextFormatter(t){const e=t.getValue();if(e)return'

    '+e+"

    "},detailFormatter:t=>'
    ',mailFormatter:t=>'
    ',timelineFormatter:()=>'
    ',beurteilungFormatter:t=>t.getValue()?'
    ':"-",pkzTextFormatter:t=>'",abgabterminFormatter(t){const e=t.getValue();if(e){let t="";switch(e.dateStyle){case"verspaetet":t='';break;case"verpasst":t='';break;case"abzugeben":t='';break;case"standard":t='';break;case"abgegeben":t='';break;case"beurteilungerforderlich":t='';break;case"bestanden":t='';break;case"nichtbestanden":t=''}const n=e.bezeichnung?.bezeichnung??e.bezeichnung;return'
    '+t+'

    '+n+" - "+this.formatDate(e.datum)+"

    "}return""},tableResolve(t){this.tableBuiltResolve=t},buildMailToLink(t){return"mailto:"+t.student_uid+"@"+this.domain},buildPKZ:t=>`${t.student_uid} / ${t.matrikelnr}`,buildStg:t=>(t.typ+t.kurzbz)?.toUpperCase(),buildErstbetreuer:t=>t.erstbetreuer_full_name?t.erstbetreuer_full_name:t.betreuer_vorname+" "+t.betreuer_nachname,buildZweitbetreuer:t=>t.zweitbetreuer_full_name??"",async setupData(t){this.projektarbeiten=t[0],this.domain=t[1],this.tableData=this.mapProjekteToTableData(this.projektarbeiten),await this.tableBuiltPromise,this.$refs.abgabeTable.tabulator.setData(this.tableData)},loadProjektarbeiten(t=!1,e){this.loading=!0,this.$api.call(nn.getProjektarbeitenForStudiengang(this.selectedStudiengangOption.studiengang_kz,this.notenOptionFilter?.benotet??0)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()}).finally(()=>{this.loading=!1})},loadAbgaben(t){return new Promise(e=>{this.$api.call(nn.getStudentProjektabgaben(t)).then(t=>{e(t)})})},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-n.top-80,this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,await this.allConfigPromise,this.calcMaxTableHeight()},getOptionDisabled:t=>!t.aktiv},computed:{emailItems(){const t=[];return this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT&&t.push({label:this.$p.t("abgabetool/c4sendEmailStudierendev2",[this.uniqueStudentEmailCount]),command:this.sammelMailStudent}),this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER&&t.push({label:this.$p.t("abgabetool/c4sendEmailBetreuerv3",[this.uniqueBetreuerEmailCount]),command:this.sammelMailBetreuer}),t},uniqueBetreuerEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.betreuer_mail&&t.add(e.betreuer_mail),e.zweitbetreuer_mail&&t.add(e.zweitbetreuer_mail)}),t.size},uniqueStudentEmailCount(){const t=new Set;return this.selectedData.forEach(e=>{e.student_uid&&t.add(e.student_uid)}),t.size}},watch:{"serienTermin.bezeichnung"(t){"qualgate1"!==t?.paabgabetyp_kurzbz&&"qualgate2"!==t?.paabgabetyp_kurzbz||(this.serienTermin.kurzbz=t.bezeichnung),this.serienTermin.upload_allowed=t.upload_allowed_default},selectedStudiengangOption(t,e){null!==this.notenOptionFilter&&null!==this.selectedStudiengangOption&&this.loadProjektarbeiten()},notenOptionFilter(t){null!==this.notenOptionFilter&&null!==this.selectedStudiengangOption&&this.loadProjektarbeiten()},selectedData(t){const e=this.$refs.abgabeTable?.tabulator;if(!e)return;const n=e.getRows();t.forEach(t=>{const e=n.find(e=>{if(e.getData().projektarbeit_id==t.projektarbeit_id)return e});e.select();const i=e.getElement().children[0]?.children[0]?.children[0];i&&(i.checked=!0)})}},created(){this.loading=!0,this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0});const t=[this.$api.call(nn.getConfig()),this.$api.call(nn.getStudiengaenge()),this.$api.call(mn.getAllStudiensemesterAndAktOrNext()),this.$api.call(nn.getNoten()),this.$api.call(nn.getPaAbgabetypen())];this.allConfigPromise=Promise.allSettled(t).then(t=>{if("fulfilled"===t[0].status){const e=t[0].value;this.turnitin_link=e.data?.turnitin_link,this.old_abgabe_beurteilung_link=e.data?.old_abgabe_beurteilung_link,this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT=e.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT,this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER=e.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER}if("fulfilled"===t[1].status){const e=t[1].value;this.studiengaengeOptions=e.data,this.studiengaengeOptions?.length&&(this.selectedStudiengangOption=this.stg_kz_prop?e.data.find(t=>t.studiengang_kz==this.stg_kz_prop):e.data[0])}if("fulfilled"===t[2].status){const e=t[2].value;this.allSem=e.data[0];const n={studiensemester_kurzbz:this.$p.t("abgabetool/c4all")};this.curSem=n,this.studiensemesterOptions=[n,...this.allSem]}if("fulfilled"===t[3].status){const e=t[3].value;"success"===e.meta?.status&&(this.notenOptions=e.data[0],this.allowedNotenOptions=this.notenOptions.filter(t=>e.data[1].includes(t.note)),this.notenOptionsNonFinal=this.notenOptions.filter(t=>e.data[2].includes(t.note))),this.allowedNotenFilterOptions=[{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/keineNoteEingetragen")),benotet:0},{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/c4benotet")),benotet:1},{bezeichnung:Vue.computed(()=>this.$p.t("abgabetool/showAll")),benotet:-1}],this.notenOptionFilter=this.allowedNotenFilterOptions[0]}if("fulfilled"===t[4].status){const e=t[4].value;this.abgabeTypeOptions=e.data}}).finally(()=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '},fn={name:"DeadlineOverview",components:{CoreFilterCmpt:fe},props:{person_uid_prop:{default:null},viewData:{type:Object,required:!0,default:()=>({name:"",uid:""}),validator:t=>t&&t.name&&t.uid}},data(){return{fullName:null,deadlines:null,tabulatorUuid:Vue.ref(0),tableBuiltResolve:null,tableBuiltPromise:null,phrasenPromise:null,phrasenResolved:!1,deadlineTableOptions:{height:700,index:"projektarbeit_id",layout:"fitColumns",placeholder:Vue.computed(()=>this.$p.t("global/noDataAvailable")),columns:[{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4zieldatumv2"))),field:"datum",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4fixterminv4"))),field:"fixterminstring",formatter:this.centeredTextFormatter,widthGrow:1,tooltip:!1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4abgabetyp"))),field:"typ_bezeichnung",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4abgabekurzbzv2"))),field:"kurzbz",formatter:this.centeredTextFormatter,widthGrow:3},{title:Vue.computed(()=>this.$capitalize(this.$p.t("person/studentIn"))),field:"student",formatter:this.centeredTextFormatter,widthGrow:2},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4stg"))),field:"stg",formatter:this.centeredTextFormatter,widthGrow:1},{title:Vue.computed(()=>this.$capitalize(this.$p.t("abgabetool/c4sem"))),field:"semester",formatter:this.centeredTextFormatter,widthGrow:1}],persistence:!1},deadlineTableEventHandlers:[{event:"tableBuilt",handler:async()=>{this.tableBuiltResolve()}},{event:"cellClick",handler:async(t,e)=>{if("details"===e.getColumn().getField()){const t=e.getValue();if("detailTermine"===t.mode)this.setDetailComponent(e.getValue());else if("beurteilungDownload"===t.mode){const e=FHC_JS_DATA_STORAGE_OBJECT.app_root+"cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz="+t.betreuerart_kurzbz+"&projektarbeit_id="+t.projektarbeit_id+"&person_id="+t.betreuer_person_id;window.open(e,"_blank")}}else if("beurteilung"===e.getColumn().getField()){const t=e.getValue();"-"!=t&&window.open(t,"_blank")}t.stopPropagation()}}]}},methods:{centeredTextFormatter:t=>'

    '+t.getValue()+"

    ",tableResolve(t){this.tableBuiltResolve=t},loadDeadlines(){this.$api.call(nn.fetchDeadlines(this.person_uid_prop??null)).then(t=>{t?.data&&this.setupData(t.data)})},setupData(t){this.deadlines=t,this.deadlines.forEach(t=>{t.student=(t.stud_titelpre?t.stud_titelpre+" ":"")+t.stud_vorname+" "+t.stud_nachname+(t.stud_titelpost?" "+t.stud_titelpost:""),t.fixterminstring=t.fixtermin?this.$p.t("abgabetool/c4yes"):this.$p.t("abgabetool/c4no")}),this.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns),this.$refs.deadlineTable.tabulator.setData(this.deadlines)},handleUuidDefined(t){this.tabulatorUuid=t},calcMaxTableHeight(){const t=this.tabulatorUuid?"-"+this.tabulatorUuid:"",e=document.getElementById("filterTableDataset"+t);if(!e)return;const n=e.getBoundingClientRect();this.deadlineTableOptions.height=window.visualViewport.height-n.top-30,this.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)},async setupMounted(){this.tableBuiltPromise=new Promise(this.tableResolve),await this.tableBuiltPromise,this.loadDeadlines(),this.calcMaxTableHeight()}},watch:{},computed:{},created(){this.phrasenPromise=this.$p.loadCategory(["abgabetool","global"]),this.phrasenPromise.then(()=>{this.phrasenResolved=!0})},mounted(){this.setupMounted()},template:'\n\t\t

    {{$p.t(\'abgabetool/deadlinesTitle\')}} {{ fullName ? (\'-\' + fullName) : \'\'}}

    \n\t\t
    \n\t\t\t\n\t\t \n '};var vn={data:()=>({studienSemester:[],selectedStudiensemester:null,studiengaenge:[],selectedStudiengang:null,studienOrdnung:[],selectedStudienordnung:null,semester:[],selectedSemester:null,lehrveranstaltungen:[],selectedLehrveranstaltung:null,menu:null}),provide(){return{studium_studiengang:Vue.computed(()=>this.selectedStudiengang),studium_studiensemester:Vue.computed(()=>this.selectedStudiensemester),studium_semester:Vue.computed(()=>this.selectedSemester),studium_studienordnung:Vue.computed(()=>this.selectedStudienordnung)}},components:{LvUebersicht:ne},watch:{selectedStudiensemester:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("sudiensemester");t&&(!e||e&&e!=t)&&this.storeDataToLocalStorage("sudiensemester",t)}},selectedSemester:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("semester");(!e||e&&e!=t)&&this.storeDataToLocalStorage("semester",t)}},selectedStudiengang:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("studiengang");(!e||e&&e!=t)&&this.storeDataToLocalStorage("studiengang",JSON.stringify(t))}},selectedStudienordnung:function(t,e){if(t&&t!=e){const e=this.getDataFromLocalStorage("studienordnung");(!e||e&&e!=t)&&this.storeDataToLocalStorage("studienordnung",JSON.stringify(t))}}},methods:{changeStudiensemester(t){let e=this.$refs.studiensemester;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedStudienSemester(e.value)},changeStudiengang(t){let e=this.$refs.studiengaenge;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedStudienGang(e.value)},changeSemester(t){let e=this.$refs.semester;e.selectedIndex=(e.selectedIndex+t+e.options.length)%e.options.length,this.changeSelectedSemester(e.value)},changeStudienordnung(t){let e=this.$refs.studienordnung,n=(e.selectedIndex+t+e.options.length)%e.options.length;e.options[n].disabled&&(n=(n+t+e.options.length)%e.options.length),e.selectedIndex=n,this.changeSelectedStudienPlan(e.value)},storeDataToLocalStorage(t,e){localStorage.setItem(t,e)},getDataFromLocalStorage:t=>localStorage.getItem(t),changeSelectedStudienSemester(t){this.$fhcApi.factory.studium.getAllStudienSemester(t,this.selectedStudiengang,this.selectedSemester,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedStudienGang(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,t,this.selectedSemester,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedSemester(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,this.selectedStudiengang,t,this.selectedStudienordnung).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},changeSelectedStudienPlan(t){this.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester,this.selectedStudiengang,this.selectedSemester,t).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},openLvUebersicht(t){this.selectedLehrveranstaltung=t,this.selectedLehrveranstaltung.type="lehreinheit",this.selectedLehrveranstaltung.lehreinheit_id=this.selectedLehrveranstaltung.lehrveranstaltung_id,this.selectedLehrveranstaltung&&Vue.nextTick(()=>{this.$refs.lvUebersicht.show()})},sortStudienSemester(t){let e=new RegExp(/^(WS|SS)([0-9]{4})/);t.sort((t,n)=>{let[i,a,s]=t.studiensemester_kurzbz.match(e),[r,o,l]=n.studiensemester_kurzbz.match(e);return s==l?a>o?-1:1:s>l?-1:1})},setHash(t){location.hash=t},extractPropertyValues(t){let{studienSemester:e,studiengang:n,semester:i,studienplan:a,lehrveranstaltungen:s}=t;this.sortStudienSemester(e.all),this.studienSemester=e.all,this.selectedStudiensemester=e.preselected.studiensemester_kurzbz,this.studiengaenge=n.all,this.selectedStudiengang=n.preselected?.studiengang_kz,this.semester=i.all,this.selectedSemester=i?.preselected,this.studienOrdnung=a.all,this.selectedStudienordnung=a.preselected?.studienplan_id,this.lehrveranstaltungen=s,this.lehrveranstaltungen.sort((t,e)=>t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase()?1:t.bezeichnung.toLowerCase(){t.lehrveranstaltungen.sort((t,e)=>t.bezeichnung.toLowerCase()>e.bezeichnung.toLowerCase()?1:t.bezeichnung.toLowerCase()t?`${t?.bezeichnung}-${t?.orgform_kurzbz} ( ${t?.orgform_bezeichnung}, ${t?.sprache} )`:"",studiengangTitel:t=>t?`${t?.kurzbzlang} (${t?.bezeichnung})`:"",studiensemesterTitel(t){if(!t)return"";let e=new RegExp(/^(WS|SS)([0-9]{4})/),n=t.match(e);switch(n[1]){case"WS":return`Wintersemester ${n[2]}`;case"SS":return`Sommersemester ${n[2]}`;default:return`${t}`}}},computed:{selectedLehrveranstaltungTitel(){const t=this.studiengaenge.find(t=>t.studiengang_kz==this.selectedStudiengang);return`${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${t.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`},computedStudienOrdnung(){return this.studienOrdnung?Object.values(this.studienOrdnung).reduce((t,e)=>(t[e.bezeichnung]||(t[e.bezeichnung]=[]),t[e.bezeichnung].push(e),t),{}):null},computedStudienOrdnungSelectValues(){if(!this.computedStudienOrdnung)return null;let t=[];return Object.entries(this.computedStudienOrdnung).forEach(([e,n])=>{t.push({bezeichnung:`Studienordnung: ${e}`,disabled:!0}),n.forEach(e=>{t.push({studienplan:e,diabled:!1,bezeichnung:`${e?.bezeichnung}-${e?.orgform_kurzbz} ( ${e?.orgform_bezeichnung}, ${e?.sprache} )`})})}),t}},created(){const t=this.getDataFromLocalStorage("sudiensemester")??void 0,e=JSON.parse(this.getDataFromLocalStorage("studiengang"))??void 0,n=this.getDataFromLocalStorage("semester")??void 0,i=JSON.parse(this.getDataFromLocalStorage("studienordnung"))??void 0;this.$fhcApi.factory.studium.getAllStudienSemester(t,e,n,i).then(t=>t.data).then(t=>{this.extractPropertyValues(t)})},template:'\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t'},bn={loadRenderers:()=>({method:"get",url:"/api/frontend/v1/RendererLoader/GetRenderers",params:{}})},yn={info:(t,e)=>({method:"post",url:"/api/frontend/v1/RouteInfo/info",params:{app:t,path:e}})};const wn=FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g,"")+FHC_JS_DATA_STORAGE_OBJECT.ci_router,kn=VueRouter.createRouter({history:VueRouter.createWebHistory(`/${wn}`),routes:[{path:"/Cis/Studium",name:"Studium",component:vn,props:!0},{path:"/Cis/Profil/View/:uid",name:"ProfilView",component:Ne,props:!0},{path:"/Cis/Profil",name:"Profil",component:Ne,props:!0},{path:"/Cis/Abgabetool/Student/:student_uid_prop?",name:"AbgabetoolStudent",component:dn,props:!0},{path:"/Cis/Abgabetool/Mitarbeiter",name:"AbgabetoolMitarbeiter",component:pn,props:!0},{path:"/Cis/Abgabetool/Assistenz/:stg_kz_prop?",name:"AbgabetoolAssistenz",component:gn,props:!0},{path:"/Cis/Abgabetool/Deadlines/:person_uid_prop?",name:"DeadlineOverview",component:fn,props:!0},{path:"/Cis/Raumsuche",name:"Raumsuche",component:Be,props:!0},{path:"/CisVue/Cms/getRoomInformation/:ort_kurzbz",name:"RoomInformationOld",component:en,redirect:t=>({name:"RoomInformation",params:{ort_kurzbz:t.params.ort_kurzbz,mode:tn,focus_date:(new Date).toISOString().split("T")[0]}})},{path:"/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz",name:"RoomInformation",component:en,props:t=>{const e=t.params.mode&&["Month","Week","Day"].includes(t.params.mode.charAt(0).toUpperCase()+t.params.mode.slice(1).toLowerCase())?t.params.mode.charAt(0).toUpperCase()+t.params.mode.slice(1).toLowerCase():tn,n=new Date(t.params.focus_date);return{propsViewData:{mode:e,focus_date:isNaN(n)?(new Date).toISOString().split("T")[0]:t.params.focus_date,ort_kurzbz:t.params.ort_kurzbz}}},beforeEnter:(t,e,n)=>{t.params.mode&&t.params.focus_date?n():n({name:"RoomInformation",params:{mode:t.params.mode||tn,focus_date:t.params.focus_date||(new Date).toISOString().split("T")[0],ort_kurzbz:route.params.ort_kurzbz}})}},{path:"/CisVue/Cms/Content/:content_id",name:"Content",component:Xe,props:!0},{path:"/CisVue/Cms/News",name:"News",component:Je,props:!0},{path:"/Cis/MyLv/:studiensemester?",name:"MyLv",component:ae,props:!0},{path:"/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id",name:"LvInfo",component:Gt,props:!0},{path:"/Cis/LvPlan/:lv_id(\\d+)",name:"LvPlanOld",component:jt,redirect(t){const e=Vue.unref(kn.currentRoute),{mode:n,focus_date:i}=e.params;return{name:"LvPlan",params:{mode:n,focus_date:i,lv_id:t.params.lv_id}}}},{path:"/Cis/LvPlan/:mode?/:focus_date?/:lv_id?",name:"LvPlan",component:jt,props:t=>({propsViewData:t.params})},{path:"/Cis/MyLvPlan/:mode?/:focus_date?",name:"MyLvPlan",component:Ut,props:t=>({propsViewData:t.params})},{path:"/Cis4",name:"Cis4",component:k,props:{dashboard:"CIS"}},{path:"/",name:"FhcDashboard",component:k,props:{dashboard:"CIS"}},{path:"/:pathMatch(.*)*",name:"Fallback",component:k,props:{dashboard:"CIS"},redirect:()=>({name:"Cis4",params:{dashboard:"CIS"}})}]}),_n=Vue.createApp({name:"FhcApp",data:()=>({appSideMenuEntries:{},renderers:null}),components:{},computed:{isMobile:()=>window.matchMedia("(max-width: 767px)").matches},provide(){return{language:Vue.computed(()=>this.$p.user_language),renderers:Vue.computed(()=>this.renderers),isMobile:this.isMobile}},methods:{isInternalRoute(t){const e=window.location.origin;return t.startsWith(e)},handleClick(t){const e=t.target.closest("a");if("skiplink"!=e?.id&&e&&this.isInternalRoute(e.href)){const n=new URL(e.href).pathname,i=this.$router.options.history.base,a=n.replace(i,"")||"/",s=this.$router.resolve(a);if(!s?.matched?.length||"Fallback"===s.name)return;if(t.preventDefault(),this.isMobile){document.getElementById("nav-main").classList.contains("show")&&document.getElementById("nav-main-btn").click()}this.$router.push(a)}}},async created(){await this.$api.call(bn.loadRenderers()).then(t=>t.data).then(t=>{for(let i of Object.keys(t)){let a=null,s=null,r=null;if(t[i].modalTitle&&(a=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].modalTitle)))),t[i].modalContent&&(s=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].modalContent)))),t[i].calendarEvent&&(r=Vue.markRaw(Vue.defineAsyncComponent(()=>import(t[i].calendarEvent)))),t[i].calendarEventStyles){var e=document.head;if(!e.querySelector(`link[href="${t[i].calendarEventStyles}"]`)){var n=document.createElement("link");n.type="text/css",n.rel="stylesheet",n.href=t[i].calendarEventStyles,e.appendChild(n)}}null===this.renderers&&(this.renderers={}),this.renderers[i]||(this.renderers[i]={}),this.renderers[i].modalTitle=a,this.renderers[i].modalContent=s,this.renderers[i].calendarEvent=r}})},mounted(){document.addEventListener("click",this.handleClick)},beforeUnmount(){document.removeEventListener("click",this.handleClick)}});!function(){const t=/Chrome/.test(navigator.userAgent),e=/Firefox/.test(navigator.userAgent);if(t){const t=function(){const t=document.createElement("div");t.style.position="absolute",t.style.top="-9999px",t.style.width="100px",t.style.height="100px",t.style.overflow="scroll",document.body.appendChild(t);const e=t.offsetWidth-t.clientWidth;return document.body.removeChild(t),e}()+"px";document.body.style.setProperty("--scrollbar-width",t)}else e&&document.body.style.setProperty("--scrollbar-width","0px")}(),_n.config.globalProperties.$capitalize=function(t){return t?t[0].toUpperCase()+t.slice(1):""},FhcApps.router.makeExtendable(kn),FhcApps.makeExtendable(_n),_n.use(kn),_n.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),_n.directive("tooltip",primevue.tooltip),_n.use(ot),_n.use(pt),_n.directive("contrast",gt),_n.mount("#fhccontent"),kn.afterEach((t,e,n)=>{_n.config.globalProperties.$api.call(yn.info("cis4",t.fullPath))}); //# sourceMappingURL=Fhc.js.map diff --git a/public/dist/js/apps/Dashboard/Fhc.js.map b/public/dist/js/apps/Dashboard/Fhc.js.map index 4e45d81aa..dfa5d2ee2 100644 --- a/public/dist/js/apps/Dashboard/Fhc.js.map +++ b/public/dist/js/apps/Dashboard/Fhc.js.map @@ -1 +1 @@ -{"version":3,"file":"Fhc.js","sources":["../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Bootstrap/Alert.js","../../../../js/components/Bootstrap/Confirm.js","../../../../js/components/Drop/Grid/Item.js","../../../../js/composables/GridLogic.js","../../../../js/components/Drop/Grid.js","../../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../../js/components/Dashboard/Item.js","../../../../js/components/Tranistion/HeightTransition.js","../../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../../js/components/Dashboard/Section.js","../../../../js/components/Dashboard/Widget/Picker.js","../../../../js/helpers/ObjectUtils.js","../../../../js/api/factory/cis/dashboard.js","../../../../js/components/Dashboard/Dashboard.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/plugins/Theme.js","../../../../js/directives/contrast.js","../../../../js/helpers/DragAndDrop.js","../../../../js/directives/Calendar/DragAndDrop.js","../../../../js/components/Calendar/Base/DragAndDrop.js","../../../../js/components/Calendar/Base/Header.js","../../../../js/components/Calendar/Base/Header/Datepicker.js","../../../../js/components/Calendar/Base/Slider.js","../../../../js/directives/Calendar/Click.js","../../../../js/components/Calendar/Base.js","../../../../js/api/factory/lvPlan.js","../../../../js/components/Calendar/Base/Grid/Line/Event.js","../../../../js/components/Calendar/Base/Grid.js","../../../../js/components/Calendar/Base/Grid/Line.js","../../../../js/components/Calendar/Base/Grid/Line/Background.js","../../../../js/components/Calendar/Base/Label/Day.js","../../../../js/components/Calendar/Base/Label/Dow.js","../../../../js/components/Calendar/Base/Label/Time.js","../../../../js/components/Calendar/Mode/Day/View.js","../../../../js/components/Calendar/Mode/Day.js","../../../../js/composables/Responsive.js","../../../../js/components/Calendar/Mode/Week.js","../../../../js/components/Calendar/Mode/Week/View.js","../../../../js/components/Calendar/Mode/Month.js","../../../../js/components/Calendar/Mode/Month/View.js","../../../../js/components/Calendar/Base/Label/Week.js","../../../../js/components/Calendar/LvPlan.js","../../../../js/composables/EventLoader.js","../../../../js/api/factory/authinfo.js","../../../../js/components/Cis/LvPlan/Lehrveranstaltung.js","../../../../js/components/Cis/LvPlan/Personal.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Pruefungen.js","../../../../js/api/factory/lehre.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Info.js","../../../../js/mixins/Phrasen.js","../../../../js/components/Cis/Mylv/LvMenu.js","../../../../js/api/factory/addons.js","../../../../js/components/Cis/Mylv/LvUebersicht.js","../../../../js/components/Cis/Mylv/Semester.js","../../../../js/components/Cis/Mylv/Semester/Studiengang.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv.js","../../../../js/components/Cis/Mylv/Student.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Cis/Profil/ProfilComponents/Mailverteiler.js","../../../../js/components/Cis/Profil/ProfilComponents/FhAusweisStatus.js","../../../../js/components/Cis/Profil/ProfilComponents/QuickLinks.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilEmails.js","../../../../js/components/Cis/Profil/ProfilComponents/RoleInformation.js","../../../../js/api/factory/profil.js","../../../../js/components/Form/Upload/Dms.js","../../../../js/components/Form/Upload/Dms/Item.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/ImageUpload.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilInformation.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilSelect.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditKontakt.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditAdresse.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/Status.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/TextInputDokument.js","../../../../js/components/Loader.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfil.js","../../../../js/components/Cis/Profil/ProfilComponents/FetchProfilUpdates.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/Profil/StudentProfil.js","../../../../js/components/Cis/Profil/MitarbeiterProfil.js","../../../../js/components/Cis/Profil/StudentViewProfil.js","../../../../js/components/Cis/Profil/MitarbeiterViewProfil.js","../../../../js/components/Cis/Profil/Profil.js","../../../../js/api/factory/ort.js","../../../../js/components/Cis/Raumsuche/Raumsuche.js","../../../../js/components/Pagination/Pagination.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangPerson.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangVertretung.js","../../../../js/api/factory/studiengang.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangInformation.js","../../../../js/api/factory/cms.js","../../../../js/components/Cis/Cms/News.js","../../../../js/components/Cis/Cms/Content_types/Raum_contentmittitel.js","../../../../js/helpers/LegacyLinkReplaceHelper.js","../../../../js/components/Cis/Cms/Content_types/General.js","../../../../js/components/Cis/Cms/Content.js","../../../../js/components/Cis/Cms/Content_types/News_content.js","../../../../js/components/Cis/Cms/Content_types/Iframe_content.js","../../../../js/components/Cis/Mylv/RoomInformation.js","../../../../js/api/factory/abgabe.js","../../../../js/components/Overlay/FhcOverlay.js","../../../../js/components/Cis/Abgabetool/AbgabeStudentDetail.js","../../../../js/components/Cis/Abgabetool/getDateStyleClass.js","../../../../js/components/Cis/Abgabetool/AbgabetoolStudent.js","../../../../js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js","../../../../js/helpers/EmailHelpers.js","../../../../js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js","../../../../js/components/Bootstrap/Offcanvas.js","../../../../js/api/factory/studiensemester.js","../../../../js/components/Cis/Abgabetool/StatusLegende.js","../../../../js/components/Cis/Abgabetool/AbgabetoolAssistenz.js","../../../../js/components/Cis/Abgabetool/DeadlineOverview.js","../../../../js/components/Cis/Studium/Studium.js","../../../../js/api/factory/renderers.js","../../../../js/api/factory/routeinfo.js","../../../../js/apps/Dashboard/Fhc.js","../../../../js/helpers/CssVarCalcHelpers.js","../../../../js/helpers/StringHelpers.js"],"sourcesContent":["//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\",\n\t\t\"toggleFullscreen\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t\tthis.$emit('toggleFullscreen')\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t
    `\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nimport {absoluteJsImportUrl} from \"../../helpers/UrlHelpers.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(this.widget.setup.file)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    `,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    `,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
    \n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetViewData() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cis4FhcApi/getViewData'\n\t\t};\n\t}\n};","import DashboardSection from \"./Section.js\";\nimport DashboardWidgetPicker from \"./Widget/Picker.js\";\nimport ObjectUtils from \"../../helpers/ObjectUtils.js\";\n\nimport ApiDashboard from '../../api/factory/cis/dashboard.js';\n\nexport default {\n\tname: 'Dashboard',\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: 'CIS'\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid && value.timezone\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsections: [],\n\t\t\twidgets: null,\n\t\t\teditMode: false,\n\t\t\tviewDataInternal: this.viewData\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditMode: Vue.computed(()=>this.editMode),\n\t\t\twidgetsSetup: Vue.computed(() => this.widgets),\n\t\t\ttimezone: Vue.computed(() => this.viewData.timezone)\n\t\t}\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tif (this.widgets === null) {\n\t\t\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {params:{\n\t\t\t\t\tdb: this.dashboard\n\t\t\t\t}}).then(res => {\n\t\t\t\t\tres.data.retval.forEach(widget => {\n\t\t\t\t\t\twidget.arguments = JSON.parse(widget.arguments);\n\t\t\t\t\t\twidget.setup = JSON.parse(widget.setup);\n\t\t\t\t\t});\n\t\t\t\t\tthis.widgets = res.data.retval;\n\t\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t\t}\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\twidget.id = 'loading_' + String((new Date()).valueOf());\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$p.loadCategory('dashboard');\n\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {\n\t\t\tparams: {\n\t\t\t\tdb: this.dashboard\n\t\t\t}\n\t\t}).then(res => {\n\t\t\tthis.widgets = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\n\t\taxios.get(this.apiurl + '/Config', {params:{\n\t\t\tdb: this.dashboard\n\t\t}}).then(res => {\n\t\t\tfor (var name in res.data.retval) {\n\t\t\t\tlet widgets = [];\n\t\t\t\tlet remove = [];\n\t\t\t\tfor (var wid in res.data.retval[name].widgets) {\n\t\t\t\t\tres.data.retval[name].widgets[wid].id = wid;\n\t\t\t\t\tif (res.data.retval[name].widgets[wid].custom || res.data.retval[name].widgets[wid].preset)\n\t\t\t\t\t\twidgets.push(res.data.retval[name].widgets[wid]);\n\t\t\t\t\telse\n\t\t\t\t\t\tremove.push(wid);\n\t\t\t\t}\n\t\t\t\tthis.sections.push({\n\t\t\t\t\tname: name,\n\t\t\t\t\twidgets: widgets\n\t\t\t\t});\n\t\t\t\tremove.forEach(wid => this.widgetRemove(name, wid));\n\t\t\t}\n\t\t\tthis.sections = this.sections.sort((section1, section2) => {\n\t\t\t\tif(section1.name == 'custom')\n\t\t\t\t\treturn 1;\n\t\t\t\tif (section2.name == 'custom')\n\t\t\t\t\treturn -1;\n\t\t\t\treturn section2.widgets.length - section1.widgets.length;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\tasync beforeMount() {\n\t\tif (!this.viewData.name || !this.viewData.uid) {\n\t\t\tconst res = await this.$api.call(ApiDashboard.getViewData());\n\t\t\tthis.viewDataInternal = res.data\n\t\t}\t\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('global/personalGreeting', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

    \n\t\t\n\t\t\n\t
    `\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);\nconst theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;\n\nconst toggleTheme = (theme)=>{\n\tif (!theme) return;\n\n\tfor (const theme of theme_modes) {\n\t\tdocument.documentElement.classList.remove(theme);\n\t}\n\ttheme_name.value = theme;\n\tdocument.documentElement.classList.add(theme);\n\n\tdocument.body.setAttribute(\"data-bs-theme\", theme);\n\n\tlet stylesheet = document.querySelector('link[href*=\"primevue/resources/themes\"]');\n\tif (theme == \"dark\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-light-blue\", \"bootstrap4-dark-blue\");\n\t} else if (theme == \"light\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\telse{\n\t\tif (stylesheet.attributes.href.value.includes(\"bootstrap4-dark-blue\"))\n\t\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\n\tlocalStorage.setItem(\"theme\", theme);\n}\n\nconst initializeTheme = ()=>{\n\t\n\tlet theme = localStorage.getItem(\"theme\");\n\tif (!theme || !theme_modes.includes(theme)) {\n\t\t// set the first theme mode as default\n\t\ttheme = theme_modes[0];\n\t\tlocalStorage.setItem(\"theme\",theme);\n\t}\n\ttoggleTheme(theme);\n}\n\n\nexport default {\n\tinstall: (app,options)=>{\n\t\t\n\t\tdocument.documentElement.classList.add(theme_name.value);\n\n\t\tinitializeTheme();\n\n\t\tapp.config.globalProperties.$theme = {\n\t\t\ttheme_name,\n\t\t\ttheme_modes,\n\t\t\tswitchTheme: (theme) => {\n\t\t\t\ttoggleTheme(theme);\n\t\t\t}, \n\t\t} \n\t}\n}","const rgbToHex = (value) => {\n\tconst hex = value.toString(16);\n\treturn hex.length === 1 ? '0' + hex : hex;\n};\n\nfunction getContrastYIQ(hexcolor) {\n\t\n\tvar r = parseInt(hexcolor.substring(1, 3), 16);\n\tvar g = parseInt(hexcolor.substring(3, 5), 16);\n\tvar b = parseInt(hexcolor.substring(5, 7), 16);\n\tvar yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n\treturn (yiq >= 128) ? 'black' : 'white';\n}\n\nexport default {\n\tmounted(element, binding){\n\t\tconst bgColor = window.getComputedStyle(element).backgroundColor;\n\t\tlet rgbRegEx = new RegExp(/^rgba?\\s*\\(([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,?\\s*([0-9]+.?[0-9]?)?\\s*\\)/);\n\t\tlet isRgb = bgColor.match(rgbRegEx);\n\t\tif (isRgb) {\n\t\t\tif (isRgb.length < 3) {\n\t\t\t\tconsole.error(\"Invalid RGB color format\");\n\t\t\t}\n\t\t\tlet r = parseInt(isRgb[1], 10);\n\t\t\tlet g = parseInt(isRgb[2], 10);\n\t\t\tlet b = parseInt(isRgb[3], 10);\n\t\t\tlet hexColor = `#${rgbToHex(r)}${rgbToHex(g)}${rgbToHex(b)}`;\n\t\t\telement.style.color = getContrastYIQ(hexColor);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.style.color = getContrastYIQ(bgColor);\n\t\t}\n\t},\n}","/**\n * TODO(chris): This is only a prototype!!!\n */\n\nconst TYPE_DEFINITION = {\n\tlehreinheit: {\n\t\tid: \"lehreinheit_id\",\n\t\tdragIcon: \"fa-solid fa-chalkboard-user\",\n\t\textras: [\n\t\t\t\"stundenblockung\"\n\t\t]\n\t},\n\tvevent: {\n\t\tid: \"uid\",\n\t\tdragIcon: \"fa-solid fa-calendar\",\n\t\textras: [\n\t\t\t\"dtstart\",\n\t\t\t\"dtend\",\n\t\t\t\"summary\"\n\t\t]\n\t},\n\tperson: {\n\t\tid: \"person_id\",\n\t\tdragIcon: \"fa-solid fa-user\"\n\t},\n\tstudent: {\n\t\tid: \"student_uid\",\n\t\tdragIcon: \"fa-solid fa-user-graduate\"\n\t},\n\tprestudent: {\n\t\tid: \"prestudent_id\",\n\t\tdragIcon: \"fa-solid fa-user-graduate text-muted\"\n\t}\n\t// TODO: IMPLEMENT OTHER TYPES\n};\n\nconst VALID_TYPES = Object.keys(TYPE_DEFINITION);\n\nconst TYPE_CONSTANTS = Object.keys(TYPE_DEFINITION).reduce((res, type) => {\n\tres['TYPE_' + type.toUpperCase()] = type;\n\treturn res;\n}, {});\n\nfunction isValidDragObject(value) {\n\tif (!value)\n\t\treturn false;\n\tif (Array.isArray(value))\n\t\treturn value.every(isValidDragObject);\n\tif (!value.type)\n\t\treturn false;\n\n\tif (value.type.substr(-11) == '-collection') {\n\t\tif (!Object.prototype.hasOwnProperty.call(value, 'values'))\n\t\t\treturn false;\n\n\t\tif (!VALID_TYPES.includes(value.type.substr(0, value.type.length-11)))\n\t\t\treturn false;\n\t} else {\n\t\tif (!Object.prototype.hasOwnProperty.call(value, 'id'))\n\t\t\treturn false;\n\n\t\tif (!VALID_TYPES.includes(value.type))\n\t\t\treturn false;\n\n\t\tif (TYPE_DEFINITION[value.type].extras) {\n\t\t\tif (!TYPE_DEFINITION[value.type].extras.every(extra => Object.prototype.hasOwnProperty.call(value, extra)))\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction getValidTransferData(event, allowedTypes, strict) {\n\tlet obj = null;\n\n\ttry {\n\t\tobj = getTransferData(event, strict);\n\t\tif (!obj)\n\t\t\treturn null;\n\n\t\tif (!strict && Array.isArray(obj)) {\n\t\t\tobj = obj.filter(isValidDragObject);\n\t\t\tif (!obj.length)\n\t\t\t\treturn null;\n\t\t} else if (!isValidDragObject(obj))\n\t\t\treturn null;\n\n\t\tif (allowedTypes && allowedTypes.length) {\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tif (strict && !obj.every(v => allowedTypes.includes(v.type))) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (!strict) {\n\t\t\t\t\tobj = obj.filter(v => allowedTypes.includes(v.type));\n\t\t\t\t\tif (!obj.length)\n\t\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else if (!allowedTypes.includes(obj.type)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t} catch(_error) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(obj) && obj.length == 1)\n\t\treturn obj.find(Boolean);\n\n\treturn obj;\n}\n\nfunction isValidTransferData(event, allowedTypes, strict) {\n\treturn getValidTransferData(event, allowedTypes, strict) ? true : false;\n}\n\nfunction getTransferData(event, strict) {\n\tconst result = [];\n\n\tfor (const type of event.dataTransfer.types) {\n\t\tif (type.substr(0, 16) != 'application/fhc-') {\n\t\t\tif (strict)\n\t\t\t\treturn null;\n\t\t\tcontinue;\n\t\t}\n\t\tlet base_type = type.substr(16);\n\t\tlet collection = false;\n\t\tif (base_type.substr(-11) == '-collection') {\n\t\t\tbase_type = base_type.substr(0, base_type.length-11);\n\t\t\tcollection = true;\n\t\t}\n\t\tif (!VALID_TYPES.includes(base_type)) {\n\t\t\tif (strict)\n\t\t\t\treturn null;\n\t\t\tcontinue;\n\t\t}\n\t\tlet data = JSON.parse(event.dataTransfer.getData(type));\n\t\tif (collection)\n\t\t\tresult.push(...data.values);\n\t\telse\n\t\t\tresult.push(data);\n\t}\n\n\tif (!result.length)\n\t\treturn null;\n\n\tif (result.length == 1)\n\t\treturn result[0];\n\n\treturn result;\n}\n\nfunction convertToValidDragObject(data, strict) {\n\tif (Array.isArray(data)) {\n\t\tconst converted = data.map(convertToValidDragObject).filter(Boolean);\n\t\tif (!converted.length)\n\t\t\treturn undefined;\n\t\tif (strict && converted.length != data.length)\n\t\t\treturn undefined;\n\n\t\tconst sorted = converted.reduce((res, item) => {\n\t\t\tif (!res[item.type])\n\t\t\t\tres[item.type] = [];\n\t\t\tres[item.type].push(item);\n\t\t\treturn res;\n\t\t}, {});\n\n\t\treturn Object.entries(sorted).map(([type, values]) => {\n\t\t\tif (values.length > 1) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: type + '-collection',\n\t\t\t\t\tvalues\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn values[0];\n\t\t});\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(data, 'type') && isValidDragObject(data)) {\n\t\treturn data;\n\t}\n\n\tconst found = Object.entries(TYPE_DEFINITION).find(([ , typedef ]) => {\n\t\tif (!Object.prototype.hasOwnProperty.call(data, typedef.id))\n\t\t\treturn false;\n\t\tif (typedef.extras) {\n\t\t\tif (!typedef.extras.every(extra => Object.prototype.hasOwnProperty.call(data, extra)))\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\n\tif (!found) {\n\t\treturn undefined;\n\t}\n\n\tconst [ type, typedef ] = found;\n\n\tconst newData = {};\n\tnewData.type = type;\n\tnewData.id = data[typedef.id];\n\tif (typedef.extras)\n\t\ttypedef.extras.forEach(extra => newData[extra] = data[extra]);\n\n\treturn newData;\n}\n\nfunction setTransferData(event, validDragObject, setDragImage = false) {\n\tif (setDragImage) {\n\t\tconst dragItems = Array.isArray(validDragObject) ? validDragObject : [ validDragObject ];\n\t\tconst dragElements = dragItems.map(item => {\n\t\t\tconst icon = document.createElement('i');\n\t\t\tconst label = document.createElement('span');\n\t\t\tconst iconContainer = document.createElement('span');\n\n\t\t\ticonContainer.className = 'btn btn-outline-dark bg-light';\n\t\t\tlabel.className = 'small';\n\n\t\t\tif (TYPE_DEFINITION[item.type]) {\n\t\t\t\ticon.className = TYPE_DEFINITION[item.type].dragIcon || 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = item.id;\n\t\t\t} else if (item.type.substr(-11) == '-collection' && TYPE_DEFINITION[item.type.substr(0, item.type.length-11)]) {\n\t\t\t\ticonContainer.style.boxShadow = '3px 3px var(--bs-btn-border-color)';\n\t\t\t\ticon.className = TYPE_DEFINITION[item.type.substr(0, item.type.length-11)].dragIcon || 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = 'x' + item.values.length;\n\t\t\t} else {\n\t\t\t\ticon.className = 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = item.id || '';\n\t\t\t}\n\t\t\t\n\t\t\ticonContainer.append(icon);\n\n\t\t\tconst itemContainer = document.createElement('div');\n\t\t\titemContainer.className = 'd-flex flex-column align-items-center gap-2 small';\n\t\t\titemContainer.append(iconContainer, label);\n\t\t\treturn itemContainer;\n\t\t});\n\n\t\tconst container = document.createElement('div');\n\t\tcontainer.className = 'd-flex flex-row gap-2 small';\n\t\tcontainer.append(...dragElements);\n\n\t\tdocument.body.append(container);\n\t\tevent.dataTransfer.setDragImage(container, -25, 0);\n\t\trequestAnimationFrame(() => {\n\t\t\tdocument.body.removeChild(container);\n\t\t});\n\t}\n\tif (Array.isArray(validDragObject)) {\n\t\treturn validDragObject.forEach(data => setTransferData(event, data));\n\t}\n\t\n\tevent.dataTransfer.setData('application/fhc-' + validDragObject.type, JSON.stringify(validDragObject));\n}\n\n/**\n * check if the dataTransfer types are in the allowed types array\n * if strict is disabled at least one type must be the allowed array\n * otherwise all types have to be in the allowed array\n *\n * @param Event\t\tevent\n * @param Array\t\tallowedTypes\n * @param Boolean\tstrict\n */\nfunction eventHasTypes(event, allowedTypes, strict) {\n\tif (!allowedTypes || !allowedTypes.length)\n\t\tallowedTypes = VALID_TYPES;\n\tallowedTypes = allowedTypes.map(type => 'application/fhc-' + type);\n\n\tconst dataTypes = [...event.dataTransfer.types];\n\t\n\t// NOTE(chris): if dragging across browsers the dataTransfer object is\n\t// set to a default one without data. Since we do not support dragging\n\t// across browsers (yet) we return false which will disallow dropping.\n\tif (!dataTypes.length)\n\t\treturn false;\n\t\n\tif (!strict)\n\t\treturn allowedTypes.some(type => [...event.dataTransfer.types].includes(type));\n\t\n\treturn [...event.dataTransfer.types].every(type => allowedTypes.includes(type));\n}\n\nfunction bindDragEnterLeave(el, onEnter, onLeave) {\n\t// NOTE(chris): add save dragenter and dragleave events\n\t// that won't fire when hovering over child elements\n\n\tlet skipLeave = false;\n\tlet skipLeaveParent = true;\n\n\tfunction init(evt) {\n\t\tskipLeave = false;\n\t\tskipLeaveParent = true;\n\t\t// add global listeners\n\t\twindow.addEventListener('dragenter', globalDragenter, true);\n\t\twindow.addEventListener('dragleave', globalDragleave, true);\n\t\twindow.addEventListener('drop', globalDrop, true);\n\t\t// call enter\n\t\tonEnter(evt);\n\t\t// remove self\n\t\tel.removeEventListener('dragenter', init);\n\t}\n\n\tfunction cleanup(evt, wasDropped) {\n\t\t// remove global listeners\n\t\twindow.removeEventListener('dragenter', globalDragenter, true);\n\t\twindow.removeEventListener('dragleave', globalDragleave, true);\n\t\twindow.removeEventListener('drop', globalDrop, true);\n\t\t// call leave\n\t\tonLeave(evt, wasDropped);\n\t\t// add init\n\t\tel.addEventListener('dragenter', init);\n\t}\n\n\tfunction globalDragenter(evt) {\n\t\tskipLeaveParent = false;\n\t\tif (el != evt.target && !el.contains(evt.target)) {\n\t\t\tcleanup(evt);\n\t\t} else {\n\t\t\tskipLeave = true;\n\t\t}\n\t}\n\tfunction globalDragleave(evt) {\n\t\tif (el != evt.target && !el.contains(evt.target)) {\n\t\t\tif (skipLeaveParent) {\n\t\t\t\tskipLeaveParent = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (skipLeave) {\n\t\t\t\tskipLeave = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcleanup(evt);\n\t}\n\tfunction globalDrop(evt) {\n\t\tcleanup(evt, true);\n\t}\n\n\tel.addEventListener('dragenter', init);\n\n\treturn () => {\n\t\t// cleanup\n\t\tel.removeEventListener('dragenter', init);\n\t}\n}\n\nexport {\n\tisValidDragObject,\n\tgetValidTransferData,\n\tisValidTransferData,\n\tgetTransferData,\n\tconvertToValidDragObject,\n\tsetTransferData,\n\teventHasTypes,\n\tbindDragEnterLeave\n};\nexport default {\n\t...TYPE_CONSTANTS,\n\tisValidDragObject,\n\tgetValidTransferData,\n\tisValidTransferData,\n\tgetTransferData,\n\tconvertToValidDragObject,\n\tsetTransferData,\n\teventHasTypes,\n\tbindDragEnterLeave\n};\n","/**\n * TODO(chris): This needs serious rework!!!\n */\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.addEventListener('update-my-value', evt => {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tbinding.value = evt.detail.item;\n\t\t\t});\n\t\t\tel.addEventListener('dragstart', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragstart', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\tx: evt.offsetX / el.offsetWidth,\n\t\t\t\t\t\ty: evt.offsetY / el.offsetHeight,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t\tel.addEventListener('dragend', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragend', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropcage') {\n\t\t\tlet hitbox = null;\n\t\t\tel.addEventListener('dragover', evt => {\n\t\t\t\tif (hitbox)\n\t\t\t\t\treturn;\n\t\t\t\thitbox = el.getBoundingClientRect();\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragenter', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t\twindow.addEventListener('dragleave', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\tlet pos;\n\t\t\t\tif (typeof evt.clientX === 'undefined')\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.pageX + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.pageY + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\telse\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.clientY + document.body.scrollTop + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\tif (pos.x > hitbox.left + hitbox.width - 1 || pos.x < hitbox.left || pos.y > hitbox.top + hitbox.height - 1 || pos.y < hitbox.top) {\n\t\t\t\t\thitbox = null;\n\t\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t\twindow.addEventListener('drop', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\thitbox = null;\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropzone') {\n\t\t\tel.addEventListener(\n\t\t\t\tbinding.modifiers.once ? 'dragenter' : 'dragover',\n\t\t\t\tevt => {\n\t\t\t\t\tconst timestamp = binding.value instanceof Function\n\t\t\t\t\t\t? binding.value(evt)\n\t\t\t\t\t\t: binding.value;\n\t\t\t\t\tconst detail = timestamp.timestamp ? timestamp : { timestamp };\n\t\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragchange', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.dispatchEvent(new CustomEvent('update-my-value', {\n\t\t\t\tcancelable: true,\n\t\t\t\tdetail: {\n\t\t\t\t\titem: binding.value\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n}","import DragAndDrop from '../../../helpers/DragAndDrop.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\n/**\n * TODO(chris): this needs serious rework!\n */\n\nexport default {\n\tname: \"CalendarDragAndDrop\",\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tevents: Vue.computed(() => this.correctedEvents),\n\t\t\tbackgrounds: Vue.computed(() => this.backgrounds),\n\t\t\tdropAllowed: Vue.computed(() => this.dragging && this.dropAllowed)\n\t\t};\n\t},\n\tinject: {\n\t\tmode: \"mode\",\n\t\tdropableEvents: \"dropableEvents\"\n\t},\n\tprops: {\n\t\tevents: Array,\n\t\tbackgrounds: Array\n\t},\n\temits: [\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tallowed: false,\n\t\t\tdraggedInternalEvent: null,\n\t\t\tdraggedExternalEvent: null,\n\t\t\ttargetTimestamp: 0,\n\t\t\ttargetGridEnds: null,\n\t\t\tdropAllowed: false,\n\n\t\t\tshadowPreview: false // TODO(chris): IMPLEMENT! (use background instead of event as preview)\n\t\t};\n\t},\n\tcomputed: {\n\t\tcorrectedEvents() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.draggedInternalEvent) {\n\t\t\t\t\tconst index = this.events.findIndex(e => e.id == this.draggedInternalEvent.id);\n\t\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1, this.previewEvent);\n\t\t\t\t\telse\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1);\n\t\t\t\t}\n\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\treturn [...this.events, this.previewEvent];\n\t\t\t}\n\n\t\t\treturn this.events;\n\t\t},\n\t\tcorrectedBackgrounds() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.shadowPreview) {\n\t\t\t\t\t// TODO(chris): how to get the length\n\t\t\t\t\treturn [...this.backgrounds, {\n\t\t\t\t\t\tstart: new Date(this.targetTimestamp),\n\t\t\t\t\t\tclass: 'shadow-preview'\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.backgrounds;\n\t\t},\n\t\tpreviewEvent() {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn null;\n\t\t\tif (!this.targetTimestamp)\n\t\t\t\treturn null;\n\n\t\t\tconst event = this.draggedInternalEvent || this.draggedExternalEvent;\n\n\t\t\tif (!event)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\t// TODO(chris): calculate length correctly from orig\n\t\t\tlet length = event.end - event.start;\n\t\t\tif (this.targetGridEnds)\n\t\t\t\tlength = this.targetGridEnds.find(end => end >= this.targetTimestamp + length) - this.targetTimestamp;\n\t\t\t\n\t\t\treturn {\n\t\t\t\torig: event.orig,\n\t\t\t\tstart: this.targetTimestamp,\n\t\t\t\tend: this.targetTimestamp + length\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tonDragstart(evt) {\n\t\t\tconst data = DragAndDrop.convertToTransferData(evt.detail.item.orig);\n\t\t\tif (DragAndDrop.isValidDragObject(data)) {\n\t\t\t\tDragAndDrop.setTransferData(evt.detail.originalEvent, data);\n\t\t\t\tthis.draggedInternalEvent = evt.detail.item;\n\t\t\t}\n\t\t},\n\t\tonDragend() {\n\t\t\tthis.draggedInternalEvent = null;\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragenter(evt) {\n\t\t\tthis.dragging = true;\n\n\t\t\tif (!this.draggedInternalEvent) {\n\t\t\t\tconst event = DragAndDrop.getValidTransferData(evt.detail.originalEvent);\n\t\t\t\tif (event) {\n\t\t\t\t\tthis.draggedExternalEvent = {\n\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\ttype: event.type,\n\t\t\t\t\t\tstart: event.isostart\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isostart).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\tend: event.isoend\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isoend).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\torig: event\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.draggedExternalEvent = null;\n\t\t\t\t}\n\t\t\t\tthis.dropAllowed = this.dropableEvents(event, this.mode);\n\t\t\t} else {\n\t\t\t\tthis.dropAllowed = this.dropableEvents(this.draggedInternalEvent, this.mode);\n\t\t\t}\n\t\t},\n\t\tonDragleave() {\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragchange(evt) {\n\t\t\tthis.targetTimestamp = evt.detail.timestamp;\n\t\t\t\n\t\t\tthis.targetGridEnds = evt.detail.ends || null;\n\t\t},\n\t\tonDrop(evt) {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn;\n\n\t\t\tthis.$emit('drop', evt, this.previewEvent.start, this.previewEvent.end);\n\t\t\tthis.dropAllowed = false;\n\t\t\tthis.dragging = false;\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\n\t`\n}\n","/**\n * TODO(chris): use click-directive\n */\nimport DatePicker from './Header/Datepicker.js';\n\nexport default {\n\tname: \"CalendarHeader\",\n\tcomponents: {\n\t\tDatePicker\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tmodeOptions: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t},\n\t\tbtnMonth: Boolean,\n\t\tbtnWeek: Boolean,\n\t\tbtnDay: Boolean,\n\t\tbtnList: Boolean\n\t},\n\temits: [\n\t\t\"next\",\n\t\t\"prev\",\n\t\t\"click:mode\",\n\t\t\"update:date\",\n\t\t\"update:mode\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\topen: false\n\t\t};\n\t},\n\tmethods: {\n\t\tclickMode(evt, mode) {\n\t\t\tthis.$emit('click:mode', evt);\n\t\t\tif (!evt.defaultPrevented)\n\t\t\t\tthis.$emit('update:mode', mode);\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}\n","// TODO(chris): translate aria-labels\n\nexport default {\n\tname: \"CalendarHeaderDatepicker\",\n\tcomponents: {\n\t\tVueDatePicker\n\t},\n\tinject: [\n\t\t\"locale\",\n\t\t\"timezone\"\n\t],\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tlistLength: {\n\t\t\ttype: Number,\n\t\t\tdefault: 7\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\"\n\t],\n\tcomputed: {\n\t\tconvertedDate() {\n\t\t\t// convert to target TZ then strip TZ Information\n\t\t\t// so the datepicker can work with local times\n\t\t\treturn this.date.setZone(this.timezone).setZone('local', { keepLocalTime: true });\n\t\t},\n\t\tcurrent() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn {month: this.convertedDate.month-1, year: this.convertedDate.year};\n\t\t\tcase \"list\":\n\t\t\t\treturn [this.convertedDate.startOf('day').ts, this.convertedDate.startOf('day').plus({ days: this.listLength }).ts - 1];\n\t\t\tcase \"week\":\n\t\t\t\treturn [this.convertedDate.startOf('week', { useLocaleWeeks: true }).ts, this.convertedDate.endOf('week', { useLocaleWeeks: true }).ts];\n\t\t\tcase \"day\":\n\t\t\t\treturn this.convertedDate;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\ttitle() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn this.date.toLocaleString({ month: 'long', year: 'numeric' });\n\t\t\tcase \"week\":\n\t\t\t\tvar year = this.date.localWeekYear;\n\t\t\t\tvar week = this.date.toFormat('nn');\n\t\t\t\treturn this.$p.t('calendar/year_kw', { year, week });\n\t\t\tcase \"list\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL) + '-' + this.date.plus({ days: this.listLength - 1 }).toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tcase \"day\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tdefault:\n\t\t\t\treturn 'View not Supported';\n\t\t\t}\n\t\t},\n\t\tweekStart() {\n\t\t\treturn luxon.Info.getStartOfWeek(this.date)%7;\n\t\t}\n\t},\n\tmethods: {\n\t\tupdate(value) {\n\t\t\tlet date;\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\tvalue.month++;\n\t\t\t\tdate = luxon.DateTime.fromObject(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"list\":\n\t\t\tcase \"week\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value[0]).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"day\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn; // Don't update if the value is invalid!\n\t\t\t}\n\t\t\tthis.$emit(\"update:date\", date);\n\t\t},\n\t\tweekNumbers(date) {\n\t\t\treturn luxon.DateTime.fromJSDate(date, { locale: this.locale }).localWeekNumber;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t title\"\n\t\t:month-picker=\"mode == 'month'\"\n\t\t:week-picker=\"mode == 'week'\"\n\t\t:range=\"mode == 'list' ? { autoRange: listLength - 1 } : false\"\n\t\t:text-input=\"mode == 'day'\"\n\t\t:week-start=\"weekStart\"\n\t\t:week-numbers=\"{ type: weekNumbers }\"\n\t\t:clearable=\"false\"\n\t\t:enable-time-picker=\"false\"\n\t\t:config=\"{ keepActionRow: mode != 'month' }\"\n\t\t:action-row=\"{ showSelect: false, showCancel: false, showNow: mode != 'month', showPreview: false }\"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale=\"locale\"\n\t\t:now-button-label=\"$p.t('calendar/today')\"\n\t\t:week-num-name=\"$p.t('calendar/kw')\"\n\t/>\n\t`\n}\n","export default {\n\tname: 'CalendarSlider',\n\tinject: {\n\t\ttime: {\n\t\t\tfrom: \"sliderTime\",\n\t\t\tdefault: \".3s\"\n\t\t}\n\t},\n\temits: [\n\t\t'slid'\n\t],\n\tdata() {\n\t\treturn {\n\t\t\ttarget: 0,\n\t\t\textrasAfter: 0,\n\t\t\textrasBefore: 0,\n\t\t\trunning: false,\n\t\t\tpromiseResolve: null\n\t\t}\n\t},\n\tcomputed: {\n\t\titemsAfter() {\n\t\t\treturn [...Array(this.extrasAfter)].map((i, k) => 1+k);\n\t\t},\n\t\titemsBefore() {\n\t\t\treturn [...Array(this.extrasBefore)].map((i, k) => k-this.extrasBefore);\n\t\t},\n\t\tstyleSlider() {\n\t\t\tconst style = {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%'\n\t\t\t};\n\t\t\tif (this.running) {\n\t\t\t\tstyle.left = (-this.target * 100) + '%';\n\t\t\t\tstyle.transition = 'left ' + this.time + ' ease-in-out';\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\tstyleBefore() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tright: '100%',\n\t\t\t\twidth: (this.extrasBefore * 100) + '%'\n\t\t\t};\n\t\t},\n\t\tstyleAfter() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tleft: '100%',\n\t\t\t\twidth: (this.extrasAfter * 100) + '%'\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\treturn this.slidePages(-1);\n\t\t},\n\t\tnextPage() {\n\t\t\treturn this.slidePages(1);\n\t\t},\n\t\tslidePages(dir) {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tthis.promiseResolve = resolve;\n\t\t\t\tthis.running = true;\n\t\t\t\tconst newTarget = this.target + dir;\n\t\t\t\tif (newTarget > 0) {\n\t\t\t\t\tif (this.extrasAfter < newTarget)\n\t\t\t\t\t\tthis.extrasAfter = newTarget;\n\t\t\t\t} else if (newTarget < 0) {\n\t\t\t\t\tif (-this.extrasBefore > newTarget)\n\t\t\t\t\t\tthis.extrasBefore = -newTarget;\n\t\t\t\t}\n\t\t\t\tthis.target = newTarget;\n\t\t\t});\n\t\t},\n\t\tendSlide() {\n\t\t\tif (this.promiseResolve) {\n\t\t\t\tthis.promiseResolve(this.target);\n\t\t\t\tthis.promiseResolve = null;\n\t\t\t}\n\t\t\tthis.$emit('slid', this.target);\n\t\t\tthis.running = false;\n\t\t\tthis.target = 0;\n\t\t\tthis.extrasAfter = this.extrasBefore = 0;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t`\n}\n","const clickListeners = [];\n\nfunction saveAddClickListener(el, source, value) {\n\tconst index = clickListeners.findIndex(data => data.el == el);\n\tif (index >= 0) {\n\t\tel.removeEventListener('click', clickListeners[index].listener);\n\t\tclickListeners.splice(index, 1);\n\t}\n\tconst listener = evt => {\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t\tconst customEvent = new CustomEvent('cal-click', {\n\t\t\tcancelable: true,\n\t\t\tbubbles: true,\n\t\t\tdetail: { source, value }\n\t\t});\n\t\tevt.target.dispatchEvent(customEvent);\n\t}\n\tclickListeners.push({el, listener});\n\tel.addEventListener('click', listener);\n}\n\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'container') {\n\t\t\tel.addEventListener('cal-click', evt => {\n\t\t\t\tconst customEvent = new Event('click:' + evt.detail.source, {\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tbinding.instance.$emit('click:' + evt.detail.source, customEvent, evt.detail.value);\n\t\t\t\tif (!customEvent.defaultPrevented) {\n\t\t\t\t\tconst finalEvent = new CustomEvent('cal-click-default', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail: evt.detail\n\t\t\t\t\t});\n\t\t\t\t\tevt.target.dispatchEvent(finalEvent);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg != 'container') {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t}\n}","import BaseDraganddrop from './Base/DragAndDrop.js';\nimport BaseHeader from './Base/Header.js';\nimport BaseSlider from './Base/Slider.js';\nimport BsModal from '../Bootstrap/Modal.js';\n\nimport CalClick from '../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"CalendarBase\",\n\tcomponents: {\n\t\tBaseDraganddrop,\n\t\tBaseHeader,\n\t\tBaseSlider,\n\t\tBsModal\n\t},\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tlocale: Vue.computed(() => this.locale),\n\t\t\ttimezone: Vue.computed(() => this.timezone),\n\t\t\ttimeGrid: Vue.computed(() => this.timeGrid),\n\t\t\tdraggableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.draggableEvents)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.draggableEvents))\n\t\t\t\t\treturn event => this.draggableEvents.includes(event.type);\n\t\t\t\tif (this.draggableEvents instanceof Function)\n\t\t\t\t\treturn this.draggableEvents;\n\t\t\t\t\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\tdropableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.onDrop)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.dropableEvents))\n\t\t\t\t\treturn item => this.dropableEvents.includes(item.type);\n\t\t\t\tif (this.dropableEvents instanceof Function)\n\t\t\t\t\treturn this.dropableEvents;\n\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\thasDragoverFunc: Vue.computed(() => this.onDragover),\n\t\t\tmode: Vue.computed(() => this.mode)\n\t\t};\n\t},\n\tprops: {\n\t\tlocale: {\n\t\t\ttype: String,\n\t\t\tdefault: 'de'\n\t\t},\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: props => luxon.DateTime.now().setZone(props.timezone).startOf('day')\n\t\t},\n\t\tmodes: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: {}\n\t\t\t// TODO(chris): verfication functions\n\t\t},\n\t\tmode: String,\n\t\tmodeOptions: Object,\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tshowBtns: Boolean,\n\t\tbtnMonth: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnWeek: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnList: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\ttimeGrid: Array,\n\t\tdraggableEvents: [Boolean, Array, Function],\n\t\tdropableEvents: [Boolean, Array, Function],\n\t\tonDragover: Function,\n\t\tonDrop: Function\n\t},\n\temits: [\n\t\t\"click:next\",\n\t\t\"click:prev\",\n\t\t\"click:mode\",\n\t\t\"click:event\",\n\t\t\"click:day\",\n\t\t\"click:week\",\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\",\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tinternalView: null,\n\t\t\tinternalDate: null,\n\t\t\tmodalEvent: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tconvertedEvents() {\n\t\t\treturn this.events.map(orig => ({\n\t\t\t\tid: orig.type + orig[orig.type + '_id'],\n\t\t\t\ttype: orig.type,\n\t\t\t\tstart: luxon.DateTime.fromISO(orig.isostart).setZone(this.timezone),\n\t\t\t\tend: luxon.DateTime.fromISO(orig.isoend).setZone(this.timezone),\n\t\t\t\torig\n\t\t\t}));\n\t\t},\n\t\tconvertedBackgrounds() {\n\t\t\treturn this.backgrounds.map(bg => {\n\t\t\t\tconst res = { ...bg };\n\t\t\t\tif (res.start) {\n\t\t\t\t\tif (Number.isInteger(res.start))\n\t\t\t\t\t\tres.start = luxon.DateTime.fromMillis(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.start instanceof Date)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromJSDate(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.start === \n\t\t\t\t\t\t'string' || res.start instanceof String)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromISO(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\tif (res.end) {\n\t\t\t\t\tif (Number.isInteger(res.end))\n\t\t\t\t\t\tres.end = luxon.DateTime.fromMillis(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.end instanceof Date)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromJSDate(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.end === \n\t\t\t\t\t\t'string' || res.end instanceof String)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromISO(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t});\n\t\t},\n\t\tsDate() {\n\t\t\tif (this.date instanceof luxon.DateTime)\n\t\t\t\treturn this.date;\n\t\t\treturn luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone);\n\t\t},\n\t\tcDate: {\n\t\t\tget() {\n\t\t\t\tconst date = this.internalDate ? this.internalDate : this.sDate;\n\t\t\t\treturn date.setLocale(this.locale);\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalDate = value;\n\t\t\t\tthis.$emit('update:date', value, this.cMode);\n\t\t\t}\n\t\t},\n\t\tsMode() {\n\t\t\t// choose default mode\n\t\t\tlet mode = this.mode;\n\t\t\tif (mode)\n\t\t\t\tmode = mode.toLowerCase();\n\t\t\tif (!mode || !this.modes[mode])\n\t\t\t\tmode = Object.keys(this.modes).find(Boolean); // start with first entry as active mode\n\t\t\treturn mode || '';\n\t\t},\n\t\tcMode: {\n\t\t\tget() {\n\t\t\t\treturn this.internalView ? this.internalView : this.sMode;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalView = value;\n\t\t\t\tthis.$emit('update:mode', value, this.cDate);\n\t\t\t}\n\t\t}\n\t},\n\twatch: {\n\t\tsDate(n, o) {\n\t\t\tif (this.sDate.isValid && !this.sDate.hasSame(this.internalDate, 'day'))\n\t\t\t\tthis.internalDate = this.sDate;\n\t\t},\n\t\tsMode() {\n\t\t\tif (this.sMode)\n\t\t\t\tthis.internalView = this.sMode;\n\t\t}\n\t},\n\tmethods: {\n\t\tclickPrev() {\n\t\t\tconst evt = new Event('click:prev', {cancelable: true});\n\t\t\tthis.$emit('click:prev', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.prevPage();\n\t\t},\n\t\tclickNext() {\n\t\t\tconst evt = new Event('click:next', {cancelable: true});\n\t\t\tthis.$emit('click:next', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.nextPage();\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\t// TODO(chris): implement\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\tif (this.cMode != 'day' && this.modes['day']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = evt.detail.value;\n\t\t\t\t\tthis.cMode = 'day';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\tif (this.cMode != 'week' && this.modes['week']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = luxon.DateTime.fromObject({\n\t\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t\t}, {\n\t\t\t\t\t\tzone: this.cDate.zoneName,\n\t\t\t\t\t\tlocale: this.cDate.locale\n\t\t\t\t\t});\n\t\t\t\t\tthis.cMode = 'week';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tonDropItem(evt, start, end) {\n\t\t\tthis.$emit('drop', evt, start, end);\n\t\t},\n\t\tshowEventModal(eventObj) {\n\t\t\tthis.modalEvent = eventObj;\n\t\t\tthis.$refs.modal.show();\n\t\t},\n\t\thideEventModal() {\n\t\t\tif (this.modalEvent)\n\t\t\t\tthis.modalEvent.closeFn = undefined;\n\t\t\tthis.$refs.modal.hide();\n\t\t\tthis.modalEvent = null;\n\t\t},\n\t\tonModalHidden() {\n\t\t\tif (this.modalEvent.closeFn)\n\t\t\t\tthis.modalEvent.closeFn();\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.hideEventModal();\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\tparams: { ort_kurzbz, start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlan(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLvPlan',\n\t\t\tparams: { start_date, end_date, lv_id }\n\t\t};\n\t},\n\teventsPersonal(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsPersonal',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\teventsLv(lv_id, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsLv',\n\t\t\tparams: { lv_id, start_date, end_date }\n\t\t};\n\t},\n\tgetStunden() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/Stunden'\n\t\t};\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`\n\t\t};\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`\n\t\t};\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\tparams: { \n\t\t\t\tstart_date: start_date, \n\t\t\t\tend_date: end_date, \n\t\t\t\tlv_id: lv_id \n\t\t\t}\n\t\t};\n\t},\n\tgetLv(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLv/' + lehrveranstaltung_id\n\t\t};\n\t}\n};","import CalDnd from '../../../../../directives/Calendar/DragAndDrop.js';\nimport CalClick from '../../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"GridLineEvent\",\n\tdirectives: {\n\t\tCalDnd,\n\t\tCalClick\n\t},\n\tinject: {\n\t\tdraggableEvents: \"draggableEvents\",\n\t\tmode: \"mode\"\n\t},\n\tprops: {\n\t\tevent: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn (value.start && value.end && value.orig);\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tisHeaderOrFooter() {\n\t\t\treturn ['header', 'footer'].includes(this.event.orig);\n\t\t},\n\t\tdraggable() {\n\t\t\treturn !this.isHeaderOrFooter && this.draggableEvents(this.event.orig, this.mode);\n\t\t},\n\t\tclasses() {\n\t\t\tconst classes = [];\n\t\t\tif (this.isHeaderOrFooter) {\n\t\t\t\tclasses.push('event-' + this.event.orig);\n\t\t\t} else {\n\t\t\t\tif (this.event.startsHere)\n\t\t\t\t\tclasses.push('event-begin');\n\t\t\t\tif (this.event.endsHere)\n\t\t\t\t\tclasses.push('event-end');\n\t\t\t}\n\t\t\treturn classes\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t`\n}\n","import GridLine from './Grid/Line.js';\nimport GridLineEvent from './Grid/Line/Event.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\nexport default {\n\tname: \"CalendarGrid\",\n\tcomponents: {\n\t\tGridLine,\n\t\tGridLineEvent\n\t},\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tinject: {\n\t\toriginalEvents: \"events\",\n\t\toriginalBackgrounds: \"backgrounds\",\n\t\tdropAllowed: \"dropAllowed\"\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tflipAxis: Vue.computed(() => this.flipAxis),\n\t\t\taxisRow: Vue.computed(() => this.axisRow)\n\t\t};\n\t},\n\tprops: {\n\t\taxisMain: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item => item instanceof luxon.DateTime);\n\t\t\t}\n\t\t},\n\t\taxisParts: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item =>\n\t\t\t\t\titem instanceof luxon.Duration\n\t\t\t\t\t|| Number.isInteger(item)\n\t\t\t\t\t|| (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\titem.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.start)\n\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\titem.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.end)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tflipAxis: Boolean,\n\t\tallDayEvents: Boolean,\n\t\taxisMainCollapsible: Boolean,\n\t\tsnapToGrid: Boolean\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tresizeObserver: null,\n\t\t\tmutationObserver: null,\n\t\t\tuserScroll: true\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisRow() {\n\t\t\treturn this.flipAxis ? 'column' : 'row';\n\t\t},\n\t\taxisCol() {\n\t\t\treturn this.flipAxis ? 'row' : 'column';\n\t\t},\n\t\taxisPartsWithBreaks() {\n\t\t\treturn this.axisParts.reduce((res, tu, index) => {\n\t\t\t\tconst start = tu.start || tu;\n\t\t\t\tconst end = tu.end;\n\n\t\t\t\tif (res.length) {\n\t\t\t\t\tconst lastTuEnd = res.pop();\n\t\t\t\t\tif (Array.isArray(lastTuEnd)) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd[0],\n\t\t\t\t\t\t\tend: start,\n\t\t\t\t\t\t\tindex: lastTuEnd[1]\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (lastTuEnd != start) {\n\t\t\t\t\t\t// add pause\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd,\n\t\t\t\t\t\t\tend: start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!end) {\n\t\t\t\t\tres.push([start, index]);\n\t\t\t\t} else {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tindex\n\t\t\t\t\t});\n\t\t\t\t\tres.push(end);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t}, []).slice(0, -1);\n\t\t},\n\t\taxisPartsSave() {\n\t\t\tif (!this.axisParts[this.axisParts.length - 1].end)\n\t\t\t\treturn this.axisParts.slice(0, -1);\n\t\t\treturn this.axisParts;\n\t\t},\n\t\tstart() {\n\t\t\treturn this.axisPartsWithBreaks[0].start;\n\t\t},\n\t\tend() {\n\t\t\treturn this.axisPartsWithBreaks[this.axisPartsWithBreaks.length - 1].end;\n\t\t},\n\t\tends() {\n\t\t\tconst ends = [];\n\t\t\tconst partsEnds = this.axisPartsWithBreaks\n\t\t\t\t.filter(p => p.index !== undefined)\n\t\t\t\t.map(p => p.end);\n\t\t\tfor (var date of this.axisMain)\n\t\t\t\tfor (var part of partsEnds)\n\t\t\t\t\tends.push(date.plus(part));\n\n\t\t\treturn ends;\n\t\t},\n\t\taxisMainBorders() {\n\t\t\treturn this.axisMain.reduce(\n\t\t\t\t(res, curr) => res.concat([curr.plus(this.start), curr.plus(this.end)]),\n\t\t\t\t[]\n\t\t\t);\n\t\t},\n\t\teventsAllDay() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn [];\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => event.orig.allDayEvent));\n\t\t},\n\t\teventsNormal() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn this.events;\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => !event.orig.allDayEvent));\n\t\t},\n\t\tevents() {\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents);\n\t\t},\n\t\tbackgrounds() {\n\t\t\treturn this.mapIntoMainAxis(this.originalBackgrounds);\n\t\t},\n\t\thasValidEvents() {\n\t\t\treturn this.events.find(e => e.length);\n\t\t},\n\t\tstyleGridCols() {\n\t\t\tlet cols = 'repeat(' + this.axisMain.length + ', 1fr)';\n\t\t\tif (this.axisMainCollapsible) {\n\t\t\t\tif (this.hasValidEvents)\n\t\t\t\t\tcols = this.events\n\t\t\t\t\t\t.map(e => e.length\n\t\t\t\t\t\t\t? '1fr'\n\t\t\t\t\t\t\t: 'var(--fhc-calendar-axis-collapsible, .5fr)')\n\t\t\t\t\t\t.join(' ');\n\t\t\t}\n\t\t\treturn cols;\n\t\t},\n\t\tstyleGridRows() {\n\t\t\tconst gridlines = {};\n\n\t\t\tthis.axisPartsWithBreaks.forEach(part => {\n\t\t\t\tlet ts = part.start.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('ps_' + part.index);\n\t\t\t\tts = part.end.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('pe_' + part.index);\n\t\t\t});\n\n\t\t\tthis.eventsNormal.forEach((events, mainIndex) => {\n\t\t\t\tlet day = this.axisMain[mainIndex];\n\t\t\t\tevents.forEach(event => {\n\t\t\t\t\tif (!event.startsHere && !event.endsHere)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (event.startsHere) {\n\t\t\t\t\t\tlet ts = event.start.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t\tif (event.endsHere) {\n\t\t\t\t\t\tlet ts = event.end.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn Object.keys(gridlines).sort((a,b) => parseInt(a)-parseInt(b)).map((start, i, keys) => {\n\t\t\t\tlet end = keys[i + 1];\n\t\t\t\tif (!end) {\n\t\t\t\t\tgridlines[start].push('end');\n\t\t\t\t\treturn '[' + gridlines[start].join(' ') + ']';\n\t\t\t\t}\n\t\t\t\treturn '[' + gridlines[start].join(' ') + '] ' + (end - start) + 'fr';\n\t\t\t}).join(' ');\n\t\t}\n\t},\n\tmethods: {\n\t\tmapIntoMainAxis(target) {\n\t\t\tconst result = Array.from({length: this.axisMain.length}, () => Array());\n\n\t\t\ttarget.forEach(event => {\n\t\t\t\tconst start = event.start || this.axisMainBorders[0].plus(-1);\n\t\t\t\tconst end = event.end || this.axisMainBorders[this.axisMainBorders.length - 1].plus(1);\n\n\t\t\t\tfor (var i = 0; i < this.axisMain.length; i++) {\n\t\t\t\t\tlet laneStart = this.axisMainBorders[i * 2];\n\t\t\t\t\tlet laneEnd = this.axisMainBorders[i * 2 + 1];\n\t\t\t\t\tif (event.orig?.allDayEvent) {\n\t\t\t\t\t\tlaneStart = laneStart.startOf('day');\n\t\t\t\t\t\tlaneEnd = laneEnd.endOf('day');\n\t\t\t\t\t}\n\t\t\t\t\tif (start < laneEnd && end > laneStart) {\n\t\t\t\t\t\tconst startsHere = start >= laneStart;\n\t\t\t\t\t\tconst endsHere = end <= laneEnd;\n\t\t\t\t\t\tresult[i].push({\n\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\tstartsHere,\n\t\t\t\t\t\t\tendsHere\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/* DRAG AND DROP */\n\t\tgetPageTop(el) {\n\t\t\tlet pageTop = el.offsetTop;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageTop += this.getPageTop(el.offsetParent);\n\t\t\treturn pageTop;\n\t\t},\n\t\tgetPageLeft(el) {\n\t\t\tlet pageLeft = el.offsetLeft;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageLeft += this.getPageLeft(el.offsetParent);\n\t\t\treturn pageLeft;\n\t\t},\n\t\tgetTimestampFromMouse(evt, dayTimestamp) {\n\t\t\tlet mouse, mouseFrac;\n\t\t\tif (this.flipAxis) {\n\t\t\t\tmouse = evt.pageX - this.getPageLeft(this.$refs.body) + this.$refs.main.scrollLeft;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetWidth;\n\t\t\t} else {\n\t\t\t\tmouse = evt.pageY - this.getPageTop(this.$refs.body) + this.$refs.main.scrollTop;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetHeight;\n\t\t\t}\n\n\t\t\treturn dayTimestamp + this.start + Math.floor((this.end - this.start) * mouseFrac);\n\t\t},\n\n\t\t/* SCROLLING */\n\t\tenableAutoScroll() {\n\t\t\tif (!this.resizeObserver)\n\t\t\t\tthis.resizeObserver = new ResizeObserver(this.scrollToEarliestEvent);\n\t\t\tthis.resizeObserver.observe(this.$refs.body);\n\n\t\t\tif (!this.mutationObserver)\n\t\t\t\tthis.mutationObserver = new MutationObserver(mutations => {\n\t\t\t\t\tif (mutations.some(m => m.addedNodes.length && [].some.call(m.addedNodes, el => el.matches && el.matches('.fhc-calendar-base-grid-line-event'))))\n\t\t\t\t\t\tthis.scrollToEarliestEvent();\n\t\t\t\t});\n\t\t\tthis.mutationObserver.observe(this.$refs.body, {\n\t\t\t\tsubtree: true,\n\t\t\t\tchildList: true\n\t\t\t});\n\n\t\t\tthis.scrollToEarliestEvent();\n\t\t},\n\t\tdisableAutoScroll() {\n\t\t\tif (this.resizeObserver)\n\t\t\t\tthis.resizeObserver.disconnect();\n\t\t\tthis.resizeObserver = null;\n\n\t\t\tif (this.mutationObserver)\n\t\t\t\tthis.mutationObserver.disconnect();\n\t\t\tthis.mutationObserver = null;\n\t\t},\n\t\tscrollToEarliestEvent() {\n\t\t\tconst eventElements = this.$refs.scroller.querySelectorAll('.fhc-calendar-base-grid-line-event');\n\n\t\t\tlet earliestEventOffset = [0, null];\n\t\t\tfor (var el of eventElements.values()) {\n\t\t\t\tconst top = el.offsetTop;\n\t\t\t\tif (!earliestEventOffset[1] || top < earliestEventOffset[0])\n\t\t\t\t\tearliestEventOffset = [top, el];\n\t\t\t}\n\n\t\t\tthis.userScroll = false;\n\t\t\tif (earliestEventOffset[1]) {\n\t\t\t\tearliestEventOffset[1].scrollIntoView({ behavior: \"smooth\" });\n\t\t\t} else {\n\t\t\t\tthis.$refs.scroller.scrollTo(0, 0);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.disableAutoScroll();\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t end > date))}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import LineEvent from './Line/Event.js';\nimport LineBackground from './Line/Background.js';\n\n/**\n * TODO(chris):\n * Event overflow for Month mode (more-button)\n */\n\nexport default {\n\tname: \"GridLine\",\n\tcomponents: {\n\t\tLineEvent,\n\t\tLineBackground\n\t},\n\tinject: {\n\t\taxisRow: \"axisRow\"\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\tcomputed: {\n\t\teventsWithRowInfo() {\n\t\t\tconst events = [];\n\t\t\tthis.events.forEach(event => {\n\t\t\t\tconst rows = [1, -1];\n\t\t\t\tif (event.startsHere) {\n\t\t\t\t\trows[0] = 't_' + event.start.diff(this.date).toMillis();\n\t\t\t\t}\n\t\t\t\tif (event.endsHere) {\n\t\t\t\t\trows[1] = 't_' + event.end.diff(this.date).toMillis();\n\t\t\t\t}\n\n\t\t\t\tevents.push({\n\t\t\t\t\t...event,\n\t\t\t\t\trows\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn events;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t`\n}\n","export default {\n\tname: \"GridLineBackground\",\n\tinject: {\n\t\tflipAxis: \"flipAxis\"\n\t},\n\tprops: {\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tbackground: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (!value.start && !value.end)\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.start && !(value.start instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.end && !(value.end instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tstyles() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.style;\n\n\t\t\tconst perc = (this.end.ts - this.start.ts) / 100;\n\t\t\t\n\t\t\tlet border = {};\n\t\t\tif (this.background.startsHere)\n\t\t\t\tborder[this.flipAxis ? 'left' : 'top'] = (this.background.start.diff(this.start)) / perc + '%';\n\t\t\tif (this.background.endsHere)\n\t\t\t\tborder[this.flipAxis ? 'right' : 'bottom'] = (this.end.diff(this.background.end)) / perc + '%';\n\n\t\t\tif (!this.background.style)\n\t\t\t\treturn border;\n\t\t\t\n\t\t\treturn [this.background.style, border];\n\t\t},\n\t\tclasses() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.class;\n\t\t\t\n\t\t\tconst result = [];\n\t\t\tif (this.background.class)\n\t\t\t\tresult.push(this.background.class);\n\t\t\tif (this.background.startsHere)\n\t\t\t\tresult.push('bg-begin');\n\t\t\tif (this.background.endsHere)\n\t\t\t\tresult.push('bg-end');\n\t\t\treturn result;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ background.label }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDay\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleFull() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'long', year: 'numeric'});\n\t\t},\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({day: '2-digit', month: '2-digit', year: 'numeric'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'numeric'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDow\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({weekday: 'long'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({weekday: 'short'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({weekday: 'narrow'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","export default {\n\tname: \"LabelTime\",\n\tprops: {\n\t\tpart: {\n\t\t\ttype: [luxon.Duration, Number, Object],\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tif (value instanceof luxon.Duration)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tlet start_ok = true;\n\t\t\t\t\tlet end_ok = true;\n\t\t\t\t\tif (value.start) {\n\t\t\t\t\t\tstart_ok = (\n\t\t\t\t\t\t\tvalue.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.start)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (value.end) {\n\t\t\t\t\t\tend_ok = (\n\t\t\t\t\t\t\tvalue.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.end)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn start_ok && end_ok;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tsanitizedTimestamps() {\n\t\t\treturn this.part.start || this.part.end ? this.part : { start: this.part };\n\t\t},\n\t\tstart() {\n\t\t\tif (!this.sanitizedTimestamps.start)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.start);\n\t\t},\n\t\tend() {\n\t\t\tif (!this.sanitizedTimestamps.end)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.end);\n\t\t}\n\t},\n\tmethods: {\n\t\tformatTime(date) {\n\t\t\treturn date.toISOTime({ suppressSeconds: true });\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nimport { useResizeObserver } from '../../../../composables/Responsive.js';\n\nexport default {\n\tname: \"DayView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\toriginalEvents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\temptyMessage: String,\n\t\temptyMessageDetails: String\n\t},\n\temits: [\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tchosenEvent: null,\n\t\t\tgridMainRef: null\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\treturn [this.day.startOf('day')];\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t},\n\t\tevents() {\n\t\t\treturn this.originalEvents\n\t\t\t\t.filter(event => event.start < this.day.plus({ days: 1 }) && event.end > this.day)\n\t\t\t\t.sort((a, b) => a.start.ts - b.start.ts)\n\t\t\t\t.map(evt => evt.orig);\n\t\t},\n\t\tcurrentEvent() {\n\t\t\tif (this.chosenEvent) {\n\t\t\t\tif (this.events.find(e => e == this.chosenEvent))\n\t\t\t\t\treturn this.chosenEvent;\n\t\t\t}\n\t\t\tlet first = null;\n\t\t\tif (this.events)\n\t\t\t\tfirst = this.events.find(Boolean); // undefined => none found\n\n\t\t\tif (first && first.type == 'loading')\n\t\t\t\treturn null; // null => loading\n\n\t\t\treturn first;\n\t\t},\n\t\tisToday() {\n\t\t\treturn this.day.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\twatch: {\n\t\tcompact() {\n\t\t\tif (this.compact) {\n\t\t\t\tif (this.chosenEvent) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.$emit('requestModalClose');\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\thandleClickDefaults(evt) {\n\t\t\tif (evt.detail.source == 'event') {\n\t\t\t\tthis.chosenEvent = evt.detail.value;\n\t\t\t\tif (this.compact) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tsetup() {\n\t\tconst container = Vue.ref(null); // use useTemplateRef when updating to Vue 3.5\n\t\tconst { compact } = useResizeObserver(container, 750);\n\n\t\treturn {\n\t\t\tcontainer, // must be exposed or it won't be set in Vue < 3.5\n\t\t\tcompact\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.gridMainRef = this.$refs.grid.$refs.main;\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport DayView from './Day/View.js';\n\nexport default {\n\tname: \"ModeDay\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tDayView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('day');\n\t\t\tlet last = this.focusDate.endOf('day');\n\t\t\t\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ days: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ days: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(days) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ days });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(days) {\n\t\t\tconst day = this.focusDate.plus({ days });\n\t\t\treturn { ...this.$attrs, day };\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","/**\n * size returns the key of smallest threshold array (integer converts to\n * { compact: threshold }) entry that is bigger than the current width of\n * the element or 'full' if none is found.\n * compact is true if the smallest threshold array entry is bigger than the\n * current width or false otherwise.\n *\n * @param DOMElement|VueTemplateRef\t\telement\n * @param object|array|integer\t\t\tthreshold\n * @return object\t\t\t\t\t\t{ compact:Boolean, size:String }\n */\nexport function useResizeObserver(element, threshold) {\n\t/* Result Vars */\n\tconst compact = Vue.ref(false);\n\tconst size = Vue.ref(false);\n\n\t/* Helper Vars */\n\tconst mounted = Vue.ref(false);\n\tconst elementRef = Vue.computed(() => {\n\t\tif (!Vue.isRef(element))\n\t\t\treturn element;\n\t\t\n\t\tif (!element.value)\n\t\t\treturn element.value;\n\t\t\n\t\tif (element.value.$el) // Maybe there is a better test\n\t\t\treturn element.value.$el;\n\n\t\treturn element.value;\n\t});\n\tconst compareArray = Vue.computed(() => {\n\t\tconst input = Vue.isRef(threshold) ? threshold.value : threshold;\n\t\tif (Number.isInteger(input))\n\t\t\treturn [['compact', input]];\n\t\tif (Array.isArray(input))\n\t\t\treturn input.map((value, key) => [key, value]).sort((a, b) => a[1]-b[1]);\n\t\treturn Object.entries(input).sort((a, b) => a[1]-b[1]);\n\t});\n\n\t/* Helper Functions */\n\tfunction updateResultVars() {\n\t\tconst compare = threshold.value || threshold;\n\t\tif (elementRef.value.offsetWidth === undefined)\n\t\t\treturn;\n\n\t\tconst found = compareArray.value.find(compare => compare[1] > elementRef.value.offsetWidth);\n\n\t\tsize.value = found ? found[0] : 'full';\n\t\tcompact.value = (size.value == compareArray.value[0][0]);\n\t}\n\n\t/* Observer */\n\tconst observer = new ResizeObserver(() => {\n\t\tif (elementRef.value) {\n\t\t\tupdateResultVars();\n\t\t}\n\t});\n\t/* Observer Helper Functions */\n\tfunction addObserver() {\n\t\tif (!elementRef.value)\n\t\t\treturn;\n\n\t\tupdateResultVars();\n\t\tobserver.observe(elementRef.value);\n\t\tmounted.value = true;\n\t}\n\tfunction removeObserver() {\n\t\tif (mounted.value) {\n\t\t\tobserver.disconnect()\n\t\t}\n\t}\n\n\t/* Main Logic */\n\tVue.onMounted(addObserver);\n\tVue.onUnmounted(removeObserver);\n\t\n\tVue.watchEffect(() => {\n\t\tif (elementRef.value) {\n\t\t\tremoveObserver();\n\t\t\taddObserver();\n\t\t}\n\t});\n\n\treturn { compact, size };\n}","import BaseSlider from '../Base/Slider.js';\nimport WeekView from './Week/View.js';\n\nexport default {\n\tname: \"ModeWeek\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tWeekView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = this.focusDate.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ weeks: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ weeks: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('week', { useLocaleWeeks: true }).diff(this.focusDate.startOf('week', { useLocaleWeeks: true }), 'weeks').weeks;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(weeks) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ weeks });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(weeks) {\n\t\t\tconst day = this.focusDate.plus({ weeks });\n\t\t\treturn { ...this.$attrs, day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nexport default {\n\tname: \"WeekView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tcollapseEmptyDays: Boolean\n\t},\n\tcomputed: {\n\t\tstart() {\n\t\t\treturn this.day.startOf('week', { useLocaleWeeks: true });\n\t\t},\n\t\taxisMain() {\n\t\t\treturn Array.from({ length: 7 }, (e, i) => this.start.plus({ days: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport MonthView from './Month/View.js';\n\nexport default {\n\tname: \"ModeMonth\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tMonthView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = first.plus({ days: 41 }).endOf('day'); // NOTE(chris): 6 weeks minus 1 day\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tconst nextFocusDate = this.focusDate.plus({ months: this.rangeOffset});\n\t\t\t\tconst nextRangeStart = nextFocusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = nextRangeStart;\n\t\t\t\t} else {\n\t\t\t\t\tlast = nextRangeStart.plus({ days: 41 }).endOf('day');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('month').diff(this.focusDate.startOf('month'), 'months').months;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(months) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ months });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t},\n\t\tviewAttrs(months) {\n\t\t\tconst day = this.focusDate.plus({ months });\n\t\t\treturn { day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'week':\n\t\t\t\t// default: Move to week if not in month\n\t\t\t\tlet dayInWeek = luxon.DateTime.fromObject({\n\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t}, {\n\t\t\t\t\tzone: this.currentDate.zoneName,\n\t\t\t\t\tlocale: this.currentDate.locale\n\t\t\t\t});\n\n\t\t\t\tif (!this.focusDate.hasSame(dayInWeek.startOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.startOf('week', { useLocaleWeeks: true }));\n\t\t\t\t} else if (!this.focusDate.hasSame(dayInWeek.endOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.endOf('week', { useLocaleWeeks: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelWeek from '../../Base/Label/Week.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelDay from '../../Base/Label/Day.js';\n\nexport default {\n\tname: \"MonthView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelWeek,\n\t\tLabelDow,\n\t\tLabelDay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\t// NOTE(chris): snap events to day\n\t\t\tevents: Vue.computed(() => {\n\t\t\t\t//const events = [];\n\t\t\t\tconst events = this.events.map(event => {\n\t\t\t\t\tconst start = event.start.startOf('day');\n\t\t\t\t\tconst end = event.end.plus({ days: 1 }).startOf('day');\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tfor (var w = 5; w > -1; w--) {\n\t\t\t\t\tfor (var d = 6; d > -1; d--) {\n\t\t\t\t\t\tconst startdate = this.axisMain[w].plus(this.axisParts[d]);\n\t\t\t\t\t\tevents.unshift({\n\t\t\t\t\t\t\tstart: startdate,\n\t\t\t\t\t\t\tend: startdate.plus({ days: 1 }),\n\t\t\t\t\t\t\torig: 'header'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn events;\n\t\t\t})\n\t\t};\n\t},\n\tinject: {\n\t\tevents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\tconst start = this.day.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\treturn Array.from({ length: 6 }, (e, i) => start.plus({ weeks: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\treturn Array.from({ length: 8 }, (e, i) => luxon.Duration.fromObject({ days: i }));\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelWeek\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\tweeks() {\n\t\t\tconst firstDay = this.date.startOf('week', { useLocaleWeeks: true });\n\t\t\tconst lastDay = this.date.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tconst weeks = [\n\t\t\t\t{ number: firstDay.localWeekNumber, year: firstDay.localWeekYear },\n\t\t\t\t{ number: lastDay.localWeekNumber, year: lastDay.localWeekYear }\n\t\t\t];\n\t\t\tif (weeks[0].number == weeks[1].number)\n\t\t\t\tweeks.pop();\n\t\t\treturn weeks;\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t`\n}\n","import FhcCalendar from \"./Base.js\";\n\nimport ApiLvPlan from '../../api/factory/lvPlan.js';\n\nimport { useEventLoader } from '../../composables/EventLoader.js';\n\nimport ModeDay from './Mode/Day.js';\nimport ModeWeek from './Mode/Week.js';\nimport ModeMonth from './Mode/Month.js';\n\nexport default {\n\tname: \"CalendarLvPlan\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tinject: [\n\t\t\"renderers\"\n\t],\n\tprops: {\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: luxon.DateTime.local()\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'Week'\n\t\t},\n\t\tgetPromiseFunc: {\n\t\t\ttype: Function,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tmodes: {\n\t\t\t\tday: Vue.markRaw(ModeDay),\n\t\t\t\tweek: Vue.markRaw(ModeWeek),\n\t\t\t\tmonth: Vue.markRaw(ModeMonth)\n\t\t\t},\n\t\t\tmodeOptions: {\n\t\t\t\tday: {\n\t\t\t\t\temptyMessage: Vue.computed(() => this.$p.t('lehre/noLvFound')),\n\t\t\t\t\temptyMessageDetails: Vue.computed(() => this.$p.t('lehre/noLvFound'))\n\t\t\t\t},\n\t\t\t\tweek: {\n\t\t\t\t\tcollapseEmptyDays: false\n\t\t\t\t}\n\t\t\t},\n\t\t\tteachingunits: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tbackgrounds() {\n\t\t\tlet now = luxon.DateTime.now().setZone(this.timezone);\n\n\t\t\tif (this.mode == 'Month')\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\t\tend: now.startOf('day')\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\tend: now,\n\t\t\t\t\tlabel: now.startOf('minute').toISOTime({ suppressSeconds: true, includeOffset: false })\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\teventStyle(event) {\n\t\t\tif (!event.farbe)\n\t\t\t\treturn undefined;\n\t\t\treturn '--event-bg:#' + event.farbe;\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.rangeInterval = rangeInterval;\n\t\t\tthis.$emit('update:range', rangeInterval);\n\t\t}\n\t},\n\tsetup(props, context) {\n\t\tconst rangeInterval = Vue.ref(null);\n\t\t\n\t\tconst { events, lv } = useEventLoader(rangeInterval, props.getPromiseFunc);\n\n\t\tVue.watch(lv, newValue => {\n\t\t\tcontext.emit('update:lv', newValue);\n\t\t});\n\n\t\treturn {\n\t\t\trangeInterval,\n\t\t\tevents,\n\t\t\tlv\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getStunden())\n\t\t\t.then(res => {\n\t\t\t\treturn this.teachingunits = res.data.map(el => ({\n\t\t\t\t\tid: el.stunde,\n\t\t\t\t\tstart: el.beginn,\n\t\t\t\t\tend: el.ende\n\t\t\t\t}));\n\t\t\t});\n\t},\n\ttemplate: /* html */`\n\t $emit('update:date', newDate, newMode)\"\n\t\t@update:mode=\"(newMode, newDate) => $emit('update:mode', newMode, newDate)\"\n\t\t@update:range=\"updateRange\"\n\t>\n\t\t\n\t\t\n\t`\n}\n","// TODO(chris): load events that are longer than the interval without doubling it\n\nexport function useEventLoader(rangeInterval, getPromiseFunc) {\n\tlet loading_id = 0;\n\tconst events = Vue.ref([]);\n\tconst loadingEvents = Vue.ref([]);\n\tconst allEvents = Vue.computed(() => events.value.concat(loadingEvents.value));\n\tconst lv = Vue.ref(null);\n\tconst eventsLoaded = [];\n\n\tconst mergePromiseArr = (n, o) => {\n\t\tif (Array.isArray(n))\n\t\t\treturn o.concat(n);\n\t\treturn o.push(n), o;\n\t};\n\n\tconst markEventsLoaded = (start, end) => {\n\t\tlet result = [];\n\t\tif (!eventsLoaded.length) {\n\t\t\t// empty: add new chunk\n\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t} else {\n\t\t\tif (eventsLoaded[eventsLoaded.length-1] + 1 == start.ts) {\n\t\t\t\t// add to the end of last chunk\n\t\t\t\teventsLoaded[eventsLoaded.length-1] = end.ts;\n\t\t\t} else if (eventsLoaded[eventsLoaded.length-1] < start.ts) {\n\t\t\t\t// add new chunk after the last chunk\n\t\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t\t} else if (eventsLoaded[0] == end.ts + 1) {\n\t\t\t\t// add to the start of first chunk\n\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t} else if (eventsLoaded[0] > end.ts) {\n\t\t\t\teventsLoaded.unshift(start.ts, end.ts);\n\t\t\t} else {\n\t\t\t\tlet index = eventsLoaded.findIndex(e => e >= start.ts);\n\n\t\t\t\tif (index % 2) {\n\t\t\t\t\t// starts inside an existing chunk\n\t\t\t\t\tif (eventsLoaded[index] >= end.ts)\n\t\t\t\t\t\treturn []; // Already loaded\n\n\t\t\t\t\tlet indexIsLast = (index == eventsLoaded.length - 1);\n\n\t\t\t\t\tif (indexIsLast || eventsLoaded[index + 1] > end.ts) {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and merge with the next if necessary\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tif (!indexIsLast && eventsLoaded[index + 1] == end.ts + 1)\n\t\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\teventsLoaded[index] = end.ts;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// merge exising chunks\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 2] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 2] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index + 1] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// starts between two chunks or before the first\n\t\t\t\t\tif (!index) {\n\t\t\t\t\t\t// extend the first chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[0] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t\t\t} else if (eventsLoaded[index] == start.ts) {\n\t\t\t\t\t\t// starts at the same position as an existing chunk\n\t\t\t\t\t\tif (eventsLoaded[index + 1] >= end.ts)\n\t\t\t\t\t\t\treturn []; // Already loaded\n\t\t\t\t\t\t// load the rest\n\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[index] = start.ts;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (start.ts >= end.ts)\n\t\t\treturn result;\n\n\t\tloadingEvents.value.push({\n\t\t\tloading_id: loading_id++,\n\t\t\ttype: \"loading\",\n\t\t\tisostart: start.toISODate() + 'T' + start.toISOTime(),\n\t\t\tisoend: end.toISODate() + 'T' + end.toISOTime()\n\t\t});\n\n\t\treturn mergePromiseArr(getPromiseFunc(start, end), result);\n\t};\n\n\tVue.watchEffect(() => {\n\t\tconst range = Vue.toValue(rangeInterval);\n\t\tif (!(range instanceof luxon.Interval))\n\t\t\treturn;\n\t\tconst promises = markEventsLoaded(range.start, range.end);\n\t\tPromise\n\t\t\t.allSettled(promises)\n\t\t\t.then(results => {\n\t\t\t\tresults.forEach(res => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tres.status === 'fulfilled'\n\t\t\t\t\t\t&& res.value.meta.status === \"success\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (res.value.meta.lv)\n\t\t\t\t\t\t\tlv.value = res.value.meta.lv;\n\n\t\t\t\t\t\tevents.value = events.value.concat(res.value.data);\n\t\t\t\t\t\tloadingEvents.value = [];\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t})\n\n\treturn { events: allEvents, lv }\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAuthUID() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthUID'\n\t\t};\n\t},\n\tgetAuthInfo() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthInfo'\n\t\t};\n\t}\n};","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanLehrveranstaltung',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tlv: null\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tcurrentLv() {\n\t\t\tif (isNaN(parseInt(this.propsViewData?.lv_id)))\n\t\t\t\treturn null;\n\t\t\treturn this.propsViewData.lv_id;\n\t\t},\n\t\tlvTitle() {\n\t\t\tif (this.currentLv === null)\n\t\t\t\treturn '';\n\t\t\tif (!this.lv)\n\t\t\t\treturn '';\n\n\t\t\tif (this.$p.user_language.value === 'English')\n\t\t\t\treturn this.lv.bezeichnung_english;\n\n\t\t\treturn this.lv.bezeichnung;\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"LvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tlv_id: this.currentLv\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsLv(this.propsViewData.lv_id, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tif (this.currentLv === null)\n\t\t\treturn;\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getLv(this.propsViewData?.lv_id))\n\t\t\t.then(res => {\n\t\t\t\tthis.lv = res.data;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t('lehre/noLvFound') }}\n\t\t
    \n\t\t\n\t
    `\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanPersonal',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstudiensemester_kurzbz: null,\n\t\t\tstudiensemester_start: null,\n\t\t\tstudiensemester_ende: null,\n\t\t\tuid: null,\n\t\t\tisMitarbeiter: false,\n\t\t\tisStudent: false\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tdownloadLinks() {\n\t\t\tif (!this.studiensemester_start || !this.studiensemester_ende || !this.uid)\n\t\t\t\treturn false;\n\n\t\t\tlet type = false;\n\t\t\ttype = this.isStudent ? 'student' : type;\n\t\t\ttype = this.isMitarbeiter ? 'lektor' : type;\n\t\t\tif (false === type)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst opts = { zone: this.viewData.timezone };\n\t\t\tconst start = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_start, opts)\n\t\t\t\t.toUnixInteger();\n\t\t\tconst ende = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_ende, opts)\n\t\t\t\t.toUnixInteger();\n\n\t\t\tconst download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ 'cis/private/lvplan/stpl_kalender.php'\n\t\t\t\t+ '?type=' + type\n\t\t\t\t+ '&pers_uid=' + this.uid\n\t\t\t\t+ '&begin=' + start\n\t\t\t\t+ '&ende=' + ende;\n\n\t\t\treturn [\n\t\t\t\t{ title: \"excel\", icon: 'fa-solid fa-file-excel', link: download_link + '&format=excel' },\n\t\t\t\t{ title: \"csv\", icon: 'fa-solid fa-file-csv', link: download_link + '&format=csv' },\n\t\t\t\t{ title: \"ical1\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=1&target=ical' },\n\t\t\t\t{ title: \"ical2\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=2&target=ical' }\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"MyLvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiLvPlan.studiensemesterDateInterval(\n\t\t\t\t\trangeInterval.end.startOf('week').toISODate()\n\t\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.studiensemester_kurzbz = res.data.studiensemester_kurzbz;\n\t\t\t\t\tthis.studiensemester_start = res.data.start;\n\t\t\t\t\tthis.studiensemester_ende = res.data.ende;\n\t\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsPersonal(start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiAuthinfo.getAuthInfo())\n\t\t\t.then(res => {\n\t\t\t\tthis.uid = res.data.uid;\n\t\t\t\tthis.isMitarbeiter = res.data.isMitarbeiter;\n\t\t\t\tthis.isStudent = res.data.isStudent;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t`\n};\n","import BsModal from '../../../../../Bootstrap/Modal.js';\n\nconst pruefungen = {};\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tpruefungenData: Array|null,\n\t\tbezeichnung: String,\n\t\t/*\n\t\t * NOTE(chris): \n\t\t * Hack to expose in \"emits\" declared events to $props which we use \n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true,\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\treturn BsModal.popup.bind(this)(null, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetStudentenMail(lehreinheit_id) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Lehre/lvStudentenMail',\n\t\t\tparams: { lehreinheit_id }\n\t\t};\n\t},\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t};\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t};\n\t}\n};","import ApiLehre from '../../../../../../api/factory/lehre.js';\n\nconst infos = {};\n\nexport default {\n\tprops:{\n\t\tstudien_semester: String,\n\t\tlehrveranstaltung_id: Number,\n\t},\n\tdata: () => ({\n\t\tbezeichnung: null,\n\t\tstudiengang_kuerzel: null,\n\t\tsemester: null,\n\t\torgform_kurzbz: null,\n\t\tsprache: null,\n\t\tects: null,\n\t\tincoming: null,\n\t\tresult: true,\n\t\tinfo: null,\n\t}),\n\tcomputed: {\n\t\tlektorNamesLinks(){\n\t\t\tlet lektorenLinks = {};\n\t\t\tthis.info.lektoren.forEach(e => {\n\t\t\t\tlet name = ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim();\n\t\t\t\tlektorenLinks[name] = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + `/Cis/Profil/View/${e.uid}`;\n\t\t\t});\n\t\t\treturn lektorenLinks;\n\t\t},\n\t\tlektorNames(){\n\t\t\treturn this.info.lektoren.map((e)=>((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tlvLeitung() {\n\t\t\treturn this.info.lvLeitung && this.info.lvLeitung.length ? this.info.lvLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim()) : null;\n\t\t},\n\t\toe() {\n\t\t\treturn this.info.oe.organisationseinheittyp ? (this.info.oe.organisationseinheittyp + ' ' + this.info.oe.bezeichnung) : '';\n\t\t},\n\t\toeLeitung() {\n\t\t\tif (!this.info.oeLeitung || !this.info.oeLeitung.length)\n\t\t\t\treturn ['-'];\n\t\t\treturn this.info.oeLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tkoordinator() {\n\t\t\tif (!this.info.koordinator || !this.info.koordinator.length)\n\t\t\t\treturn null;\n\t\t\treturn this.info.koordinator.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tcurrentLang() {\n\t\t\tif (!this.info)\n\t\t\t\treturn null;\n\t\t\tif (this.info.lastLang)\n\t\t\t\treturn this.info.lastLang;\n\t\t\tif (!this.info.lvinfo)\n\t\t\t\treturn null;\n\t\t\treturn this.info.lvinfoDefaultLang && this.info.lvinfo[this.info.lvinfoDefaultLang] ? this.info.lvinfoDefaultLang : Object.keys(this.info.lvinfo).shift();\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api.call(ApiLehre.getLvInfo(this.studien_semester, this.lehrveranstaltung_id))\n\t\t.then(\n\t\t\tres => res.data\n\t\t).then(data =>{\n\t\t\tObject.assign(this, \n\t\t\t\t{\n\t\t\t\t\tbezeichnung : data.bezeichnung,\n\t\t\t\t\tstudiengang_kuerzel: data.studiengang_kuerzel,\n\t\t\t\t\tsemester: data.semester,\n\t\t\t\t\torgform_kurzbz: data.orgform_kurzbz,\n\t\t\t\t\tsprache: data.sprache,\n\t\t\t\t\tects: data.ects,\n\t\t\t\t\tincoming: data.incoming ?? '-',\n\t\t\t\t});\n\t\t})\n\n\t\tif (infos[this.lehrveranstaltung_id]) {\n\t\t\tthis.info = infos[this.lehrveranstaltung_id];\n\t\t} else {\n\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Info/' + this.studien_semester + '/' + this.lehrveranstaltung_id).then(res => {\n\t\t\t\tthis.info = infos[this.lehrveranstaltung_id] = res.data.retval || [];\n\t\t\t}).catch(() => this.info = {});\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t\t\t

    {{$p.t('lvinfo/lehrveranstaltungsinformationen')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t('lehre/lehrveranstaltung')}}{{bezeichnung}}
    {{$p.t('lehre/studiengang')}}{{studiengang_kuerzel}}
    {{$p.t('lehre/semester')}}{{semester}}
    {{$p.t('lehre/studiensemester')}}{{studien_semester}}
    {{$p.t('lehre/organisationsform')}}{{orgform_kurzbz}}
    {{$p.t('lehre/lehrbeauftragter')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t('lehre/lvleitung')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t('global/sprache')}}{{sprache}}
    {{$p.t('lehre/ects')}}{{ects}}
    {{$p.t('lehre/incomingplaetze')}}{{incoming}}
    {{$p.t('lehre/organisationseinheit')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t('global/leitung')}}: {{oeLeitung.join(', ')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    1\" class=\"text-end\">\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    `\n}\n","const categories = {};\nconst loadingModules = {};\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction reloadRefs(category) {\n\twhile (loadingModules[category].length) {\n\t\tvar v = loadingModules[category].pop();\n\t\tv[0].value = getValueForLoadedPhrase(category, v[1], v[2]);\n\t\tVue.triggerRef(v[0]);\n\t\t/*Vue.unref(v);*/\n\t}\n}\nfunction loadLazy(category, val, phrase, params) {\n\t// NOTE(chris): load module if it's not loaded yet\n\tif (loadingModules[category]) {\n\t\tloadingModules[category].push([val, phrase, params]);\n\t\tif (categories[category]) // NOTE(chris): this is for safety in case the loading finished the moment before the val was pushed into the array\n\t\t\treloadRefs(category);\n\t\treturn;\n\t}\n\tloadingModules[category] = [[val, phrase, params]];\n\n\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Phrasen/loadModule/' + category).then(res => {\n\t\tif (res.data.retval)\n\t\t\tcategories[category] = extractCategory(res.data.retval, category);\n\t\telse\n\t\t\tcategories[category] = {};\n\n\t\treloadRefs(category);\n\t}).catch(err => console.error(err));\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\n\nconst phrasen = {\n\tt_ref(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input');\n\t\t\treturn '';\n\t\t}\n\t\tif (!categories[category]) {\n\t\t\t\n\t\t\tvar initialval = '';\n \t\t\tif (window.FHC_JS_PHRASES_STORAGE_OBJECT !== undefined) {\n \t\t\t\tvar tmp_category = extractCategory(FHC_JS_PHRASES_STORAGE_OBJECT, category);\n\t\t\t\tif(tmp_category[phrase] !== undefined ) {\n\t\t\t\t\tinitialval = tmp_category[phrase];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (!categories[category] || Object.keys(categories[category]).length === 0) {\n\t\t\t\tcategories[category] = undefined;\n\t\t\t\tlet val = Vue.ref(initialval);\n\t\t\t\tloadLazy(category, val, phrase, params);\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\tvar result = getValueForLoadedPhrase(category, phrase, params);\n\t\treturn Vue.ref(result);\n\t},\n\tt(category, phrase, params) {\n\t\treturn Vue.unref(this.t_ref(category, phrase, params));\n\t}\n};\n\nexport default {\n\tdata: () => {\n\t\treturn {\n\t\t\tp: phrasen\n\t\t}\n\t}\n}\n\n// Composable (wrapper for mixin)\nexport function usePhrasen() {\n\n\tfunction t(category, phrase, params) {\n\t\treturn phrasen.t(category, phrase, params);\n\t}\n\n\treturn {\t\t\n\t\tt,\n\t}\n\n}\n","\nexport default {\n\tprops:{\n\t\tmenu:{\n\t\t\ttype:Array,\n\t\t\tdefault:null,\n\t\t},\n\t\tcontainerStyles: Array,\n\t\trowStyles: Array,\n\t\thasLvPlanEintraege: {\n\t\t\trequired:false,\n\t\t\tdefault:true,\n\t\t\ttype:Boolean,\n\t\t},\n\t},\n\tdata(){\n\t\treturn{\n\t\t\t\n\t\t}\n\t},\n\tmethods:{\n\t\tc4_disabled: function (menuItem) {\n\t\t\tif (!this.c4_link(menuItem) && !menuItem.c4_moodle_links?.length) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (menuItem.id == \"addon_fhtw_menu_lvplan_lva\" && !this.hasLvPlanEintraege){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tc4_target: function (menuItem) {\n\t\t\tif (menuItem.c4_moodle_links?.length > 0) return null;\n\t\t\treturn menuItem.c4_target ?? null;\n\t\t},\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) \n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\tgetMenuName(menuItem) {\n\t\t\tif(menuItem.phrase) {\n\t\t\t\treturn this.$p.t(menuItem.phrase)\n\t\t\t} else {\n\t\t\t\treturn menuItem.name\n\t\t\t}\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    {{$p.t('lehre','lehrveranstaltungsUnavailable')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetLvMenu(lvid, studiensemester_kurzbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport LvMenu from \"./LvMenu.js\";\n\nimport ApiAddons from '../../../api/factory/addons.js';\n\nexport default {\n \n props:{\n event:{\n type:Object,\n required:true,\n default:null,\n },\n\t\tstudiensemester: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\t// prop used to preselect a menu item and skip the grid overview\n\t\tpreselectedMenu: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t}\n },\n data(){\n return {\n result: false,\n menu: [],\n\t\t\tisMenuSelected:false,\n\t\t\thasLvPlanEintraege: true,\n\t\t\tlvEvaluierungMessage: \"\",\n }\n },\n mixins:[BsModal],\n components:{\n BsModal,\n\t\tLvMenu,\n },\n\tinject: [\"studium_studiensemester\"],\n methods:{\n \n hiddenModal: function(){\n\t\t\tthis.isMenuSelected = false;\n },\n showModal: function(){\n\t\t\tif (!this.preselectedMenu) {\n this.$api\n\t\t\t\t\t.call(ApiAddons.getLvMenu(this.event.lehrveranstaltung_id, (this.studiensemester ?? this.event.studiensemester_kurzbz)))\n .then(res => {\n \t\t\t\t\tif (res.data) {\n \t\t\t\t\t\tthis.menu = res.data;\n \t\t\t\t\t}\n \t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.isMenuSelected = true;\n\t\t\t}\n\n\t\t\t// check lv evaluierung info\n\t\t\tif (this.studium_studiensemester) {\n\t\t\t\tthis.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.lvEvaluierungMessage = res.message;\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// check if the lv has lvplan entries for this studiensemester\n\t\t\tif (this.studiensemester && this.event) {\n\t\t\t\treturn this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif (Array.isArray(res) && res.length > 0) {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t\n },\n },\n\tmounted(){\n this.modal = this.$refs.modalContainer;\n },\n\tbeforeUnmount(){\n\t\tthis.$refs.modalContainer.hide();\n\t},\n template:/*html*/`\n \n\n\t\t\n \n \n \n\n \n `,\n};","import MylvSemesterStudiengang from \"./Semester/Studiengang.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengang\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudien_semester: Vue.computed(() => this.semester) \n\t\t}\n\t},\n\tprops: {\n\t\tsemester: [String, Number],\n\t\tlvs: Array\n\t},\n\tcomputed: {\n\t\tready() { return this.lvs !== null; },\n\t\tstudiengaenge() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.studiengang_kz + '#' + lv.semester, \n\t\t\t\t\t{\n\t\t\t\t\t\tstudiengang_kz: lv.studiengang_kz, \n\t\t\t\t\t\tbezeichnung: lv.sg_bezeichnung,\n\t\t\t\t\t\tsg_bezeichnung_eng: lv.sg_bezeichnung_eng,\n\t\t\t\t\t\tkuerzel: lv.studiengang_kuerzel, \n\t\t\t\t\t\tsemester: lv.semester\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t).values()].sort((a, b) => a.bezeichnung.toLowerCase() == b.bezeichnung.toLowerCase() ? a.semester > b.semester : a.bezeichnung.toLowerCase() > b.bezeichnung.toLowerCase());\n\t\t},\n\t},\n\tmethods: {\n\t\tlvsForStudiengang(studiengang) {\n\t\t\treturn this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester);\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","import MylvSemesterStudiengangLv from \"./Studiengang/Lv.js\";\nimport Phrasen from \"../../../../mixins/Phrasen.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengangLv\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tprops: {\n\t\tbezeichnung: String,\n\t\tkuerzel: String,\n\t\tsemester: [String,Number],\n\t\tlvs: Array,\n\t\tsg_bezeichnung_eng: String\n\t},\n\tcomputed: {\n\t\tlehrveranstaltungen() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.lehrveranstaltung_id, \n\t\t\t\t\tlv\n\t\t\t\t])\n\t\t\t).values()]\n\t\t}\n\t},\n\tmethods: {\n\t\tnote(lv) {\n\t\t\treturn lv.benotung ? lv.znote || lv.lvnote || null : null;\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === 'English' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t('lehre/semester')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","import LvPruefungen from \"./Lv/Pruefungen.js\";\nimport LvInfo from \"./Lv/Info.js\";\nimport Phrasen from \"../../../../../mixins/Phrasen.js\";\nimport LvUebersicht from \"../../LvUebersicht.js\";\n\nimport ApiLehre from '../../../../../api/factory/lehre.js';\nimport ApiAddons from '../../../../../api/factory/addons.js';\n\n// TODO(chris): L10n\n\nexport default {\n\tcomponents:{\n\t\tLvUebersicht,\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tinject: ['studien_semester'],\n\tprops: {\n\t\tlehrveranstaltung_id: Number,\n\t\tbezeichnung: String,\n\t\tbezeichnung_eng: String,\n\t\tmodule: String,\n\t\tfarbe: String,\n\t\tlvinfo: Boolean,\n\t\tbenotung: Boolean,\n\t\tlvnote: String,\n\t\tlvnotebez: Array,\n\t\tznote: String,\n\t\tznotebez: Array,\n\t\tstudiengang_kuerzel: String,\n\t\tsemester: [String, Number],\n\t\torgform_kurzbz: String,\n\t\tsprache: String,\n\t\tects: String,\n\t\tincoming: Number,\n\t\tpositiv: Boolean,\n\t\tnote_index: String\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\tpruefungenData: null,\n\t\t\tinfo: null,\n\t\t\tmenu: null,\n\t\t\tpreselectedMenuItem: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tgradeColor() {\n\t\t\t// early return if value is null or undefined\n\t\t\tif (this.positiv == null) return;\n\t\t\t// returns a suitable color for the given grade\n\t\t\tif (this.positiv)\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-success)';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-danger)';\n\t\t\t}\n\t\t},\n\t\tis_organisatorische_einheit(){\n\t\t\treturn this.menu == \"organisatorische_einheit\";\n\t\t},\n\t\temptyMenu(){\n\t\t\treturn !this.menu || !Array.isArray(this.menu) || Array.isArray(this.menu) && this.menu.length == 0;\n\t\t},\n\t\tbodyStyle() {return {};\n\t\t\t/*const bodyStyle = {};\n\t\t\tif (this.farbe)\n\t\t\t\tbodyStyle['background-color'] = '#' + this.farbe;\n\t\t\treturn bodyStyle;*/\n\t\t},\n\t\tgrade() {\n\t\t\tconst languageIndex = this.$p.user_language.value === 'English' ? 1 : 0\n\t\t\tif(this.benotung && this.znotebez?.length) {\n\t\t\t\treturn this.znotebez[languageIndex]\n\t\t\t} else if(this.benotung && this.lvnotebez?.length) {\n\t\t\t\treturn this.lvnotebez[languageIndex]\n\t\t\t} else return null\n\t\t},\n\t\tLvHasPruefungenInformation(){\n\t\t\treturn this.pruefungenData && this.pruefungenData.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\t\n\t\tfetchMenu(lehrveranstaltung_id = this.lehrveranstaltung_id, studien_semester = this.studien_semester) {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiAddons.getLvMenu(lehrveranstaltung_id, studien_semester))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.menu = res.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.$fhcAlert.handleSystemError(error);\n\t\t\t\t\tthis.menu = [];\n\t\t\t\t});\n\t\t},\n\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) {\n\t\t\t\treturn '#';\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\topenLvOption(menuItem){\n\t\t\tif (menuItem.id == \"core_menu_mailanstudierende\"){\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else if (menuItem.id == \"core_menu_digitale_anwesenheitslisten\") {\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else{\n\t\t\t\tthis.preselectedMenuItem = menuItem;\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\topenPruefungen() {\n\t\t\t// early return if the pruefungenData is empty or not set\n\t\t\tif (!this.LvHasPruefungenInformation) return;\n\n\t\t\tLvPruefungen.popup({\n\t\t\t\tpruefungenData: this.pruefungenData, \n\t\t\t\tbezeichnung: this.bezeichnung\n\t\t\t});\n\t\t},\n\t\topenInfos() {\n\t\t\tif (!this.info) {\n\t\t\t\tthis.info = true;\n\t\t\t\t// TODO(chris): load all this params on ajax?\n\t\t\t\tLvInfo.popup({\n\t\t\t\t\tlehrveranstaltung_id: this.lehrveranstaltung_id, \n\t\t\t\t\tbezeichnung: this.bezeichnung,\n\t\t\t\t\tbezeichnung_eng: this.bezeichnung_eng,\n\t\t\t\t\tstudiengang_kuerzel: this.studiengang_kuerzel,\n\t\t\t\t\tsemester: this.semester,\n\t\t\t\t\tstudien_semester: this.studien_semester,\n\t\t\t\t\torgform_kurzbz: this.orgform_kurzbz,\n\t\t\t\t\tsprache: this.sprache,\n\t\t\t\t\tects: this.ects,\n\t\t\t\t\tincoming: this.incoming\n\t\t\t\t}).then(() => this.info = false).catch(() => this.info = false);\n\t\t\t}\n\t\t}\n\t},\n\twatch:{\n\t\tstudien_semester(newValue){\n\t\t\tthis.fetchMenu(this.lehrveranstaltung_id, newValue);\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLehre.getStudentPruefungen(this.lehrveranstaltung_id))\n\t\t\t.then(res => res.data)\n\t\t\t.then(pruefungen => {\n\t\t\t\tthis.pruefungenData = pruefungen;\n\t\t\t}); \n\t},\n\tmounted() {\n\t\tthis.fetchMenu(this.lehrveranstaltung_id, this.studien_semester);\n\t},\n\ttemplate: /*html*/`
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t\t
    {{ $p.t('lehre/organisationseinheit') }}:
    \n\t\t\t
    {{$p.user_language.value === 'English' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    `\n};","import MylvSemester from \"./Semester.js\";\nimport Phrasen from \"../../../mixins/Phrasen.js\";\n\n// TODO(chris): phrase: global/studiensemester_auswaehlen\n// TODO(chris): phrase: next & prev +aria-label\n\nexport default {\n\tcomponents: {\n\t\tMylvSemester\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tdata: () => {\n\t\treturn {\n\t\t\tfirstLoad: true,\n\t\t\tstudiensemester: null,\n\t\t\tlvs: {},\n\t\t\tcurrentSemester: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tready() {\n\t\t\treturn this.studiensemester !== null && (!this.firstLoad || this.current.lvs !== null);\n\t\t},\n\t\tcurrent() {\n\t\t\tif (this.currentSemester === null)\n\t\t\t\treturn { semester: null, lvs: [] };\n\t\t\tif (this.lvs[this.currentSemester] === undefined) {\n\t\t\t\tthis.lvs[this.currentSemester] = {\n\t\t\t\t\tsemester: this.currentSemester, \n\t\t\t\t\tlvs: null\n\t\t\t\t};\n\t\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Lvs/' + this.currentSemester).then(res => {\n\t\t\t\t\tthis.lvs[this.currentSemester].lvs = res.data.retval || [];\n\t\t\t\t\tthis.firstLoad = false;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.lvs[this.currentSemester];\n\t\t},\n\t\tnearestSem() {\n\t\t\tlet now = Date.now();\n\t\t\tlet nearestSem = null;\n\t\t\tlet nearestSemDiff = 0;\n\t\t\tthis.studiensemester.forEach(sem => {\n\t\t\t\tlet start = new Date(sem.start);\n\t\t\t\tlet end = new Date(sem.ende);\n\t\t\t\tif (now >= start && now <= end) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet diff = Math.min(Math.abs(now - start), Math.abs(now - end));\n\t\t\t\tif (nearestSem === null || diff < nearestSemDiff) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = diff;\n\t\t\t\t}\n\n\t\t\t});\n\t\t\treturn nearestSem;\n\t\t},\n\t\tcurrentIsFirst() {\n\t\t\treturn this.studiensemester[0].studiensemester_kurzbz == this.currentSemester;\n\t\t},\n\t\tcurrentIsLast() {\n\t\t\treturn this.studiensemester[this.studiensemester.length-1].studiensemester_kurzbz == this.currentSemester;\n\t\t}\n\t},\n\tmethods: {\n\t\tprevSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex--;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tnextSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex++;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tupdateRouter(val) {\n\t\t\tthis.$router.push(`/Cis/MyLv/${val}`);\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Studiensemester').then(res => {\n\t\t\tthis.studiensemester = res.data.retval || [];\n\t\t\tconst routerStudiensemester = this.$route.params.studiensemester;\n\t\t\tif (routerStudiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == routerStudiensemester).length)\n\t\t\t\tthis.currentSemester = routerStudiensemester;\n\t\t\telse\n\t\t\t\tthis.currentSemester = this.nearestSem;\n\t\t});\n\t},\n\tbeforeRouteUpdate(to, from, next){\n\t\tif (to.params.studiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == to.params.studiensemester).length && to.params.studiensemester != this.currentSemester)\n\t\t\tthis.currentSemester = to.params.studiensemester;\n\t\tnext();\n\n\t},\n\ttemplate: `\n\n\t

    {{$p.t('lehre/myLV')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t{{$p.t('lehre/noLvFound')}}\n\t\t
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","export default {\n props: {\n data: Object,\n title: { type: String },\n },\n data() {\n return {};\n },\n created(){\n\n },\n template: /*html*/`\n\t`,\n};\n","export default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {}\n\t},\n\ttemplate: /*html*/`\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    `,\n}","export default {\n\t//TODO: To be implemented\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmobile: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\thideCollapse: function () {\n\t\t\tthis.collapseOpen = false;\n\t\t},\n\t\tshowCollapse: function () {\n\t\t\tthis.collapseOpen = true;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcollapseOpen: false,\n\t\t};\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    `,\n};\n","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    {{$p.t('person','strasse')}}
    \n {{data.strasse}} \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('global','typ')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t('person','ort')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t('person','plz')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('person','zustelladresse')}}
    \n
    \n \n
    \n
    \n
    \n
    \n`\n};","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n\tdata() {\n\t\treturn {};\n\t},\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n
    \n
    \n {{title}}\n
    \n
    \n \n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    `,\n};\n","export default {\n\tdata() {\n\t\treturn {}\n\t},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tinject: {\n\t\t// inject info that should not be displayed\n\t\t'studiengang_kz': {\n\t\t\tfrom: 'studiengang_kz',\n\t\t\tdefault: false\n\t\t},\n\t},\n\tcomputed: {\n\t\tgetLinkGruppeListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''\n\t\t},\n\t\tgetLinkVerbandListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value : ''\n\t\t},\n\t\tgetLinkSemesterListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''\n\t\t}\n\t},\n\tcreated() {\n\t\t//TODO: check if data.Telefon is a valid telefon number to call before using it as a tel: link\n\t},\n\ttemplate: `\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{entry.value ?? '-'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ entry.value ?? '-'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t\n\tprofilViewData(uid) {\n\t\tlet url = \"/api/frontend/v1/Profil/profilViewData\";\n\t\tif(uid){\n\t\t\turl += `/${uid}`;\n\t\t}\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: url\n\t\t};\n\t},\n\tfotoSperre(value) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/fotoSperre/${value}`\n\t\t};\n\t\t\n\t},\n\tisStudent(uid) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/isStudent',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tisMitarbeiter(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/isMitarbeiter/${uid}`\n\t\t};\n\t},\n\tgetZustellAdresse() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellAdresse'\n\t\t};\n\t},\n\tgetZustellKontakt() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellKontakt'\n\t\t};\n\t},\n\tgetGemeinden(nation, zip) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`\n\t\t};\n\t\t\n\t},\n\tgetAllNationen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getAllNationen'\n\t\t};\n\t},\n};","import DmsItem from './Dms/Item.js';\n\nexport default {\n\tcomponents: {\n\t\tDmsItem\n\t},\n\temits: [\n\t\t'update:modelValue'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [ FileList, Array ],\n\t\t\trequired: true\n\t\t},\n\t\tmultiple: Boolean,\n\t\tid: String,\n\t\tname: String,\n\t\tinputClass: [String, Array, Object],\n\t\tnoList: Boolean,\n\t\taccept: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmethods: {\n\t\tstringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n\t\taddFiles(event) {\n\t\t\tif (!this.multiple)\n\t\t\t\treturn this.$emit('update:modelValue', event.target.files);\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst doubles = [];\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tdt.items.add(file);\n\t\t\t\tdoubles.push(this.stringifyFile(file));\n\t\t\t}\n\t\t\tfor (var file of event.target.files) {\n\t\t\t\t// NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes\n\t\t\t\tif (doubles.indexOf(this.stringifyFile(file)) < 0)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t},\n\t\tremoveFile(id) {\n\t\t\tconst fileToRemove = Array.from(this.modelValue)[id];\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tif (file !== fileToRemove)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (!n)\n\t\t\t\treturn;\n\t\t\tif (n instanceof FileList) {\n\t\t\t\tif (!this.$refs.upload) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn this.$refs.upload.files = n;\n\t\t\t}\n\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst dms = [];\n\t\t\tfor (var file of n) {\n\t\t\t\tif (file instanceof File) {\n\t\t\t\t\tdt.items.add(file);\n\t\t\t\t} else {\n\t\t\t\t\tconst dmsFile = new File([JSON.stringify(file)], file.name, {\n\t\t\t\t\t\ttype: 'application/x.fhc-dms+json'\n\t\t\t\t\t});\n\t\t\t\t\tdt.items.add(dmsFile);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}","export default {\n\temits: [\n\t\t'delete'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [File, Object],\n\t\t\trequired: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreview: ''\n\t\t};\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (n.type == 'application/x.fhc-dms+json') {\n\t\t\t\tn.text().then(result => {\n\t\t\t\t\tconst obj = JSON.parse(result);\n\t\t\t\t\tthis.preview = obj.preview || '';\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • `\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import Dms from \"../../../../Form/Upload/Dms.js\";\nimport BsModal from \"../../../../Bootstrap/Modal.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tdmsData: [],\n\t\t};\n\t},\n\tcomponents: {\n\t\tDms,\n\t\tBsModal,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t},\n\t\tfiles: {\n\t\t\ttype: Array,\n\t\t},\n\t\tupdateID: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\tmethods:{\n\t\tasync uploadImage(){\n\t\t\tif(this.dmsData){\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", this.dmsData[0]);\n\t\t\t\tawait this.$api\n\t\t\t\t\t.call(ApiProfilUpdate.updateProfilbild(formData))\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('global','hochgeladen'));\n\t\t\t\t\t\tthis.modal.hide();\n\t\t\t\t\t});\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t\tif (this.files) {\n\t\t\tthis.dmsData = this.files;\n\t\t}\n\t},\n\tpopup(options) {\n\t\t\tBsModal.popup.bind(this);\n\t\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/`\n\n\t\n\t\t\n\t\t\n\t\n `,\n};\n","import ApiProfil from '../../../../api/factory/profil.js';\nimport ImageUpload from '../../Profil/ProfilModal/EditProfilComponents/ImageUpload.js';\n\nexport default {\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\tfotoStatus:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tcomponents:{\n\t\tImageUpload,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFotoSperre: this.data.foto_sperre,\n\t\t};\n\t},\n\temits: [\"showEditProfilModal\"],\n\tinject:[\"isEditable\"],\n\n\tmethods: {\n\t\tshowModal(){\n\t\t\tthis.$refs.imageUpload.show();\n\t\t},\n\t\tsperre_foto_function() {\n\t\t\t//TODO: refactor\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.fotoSperre(!this.FotoSperre))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.FotoSperre = res.data.foto_sperre;\n\t\t\t\t});\n\t\t}\n\t},\n\tcomputed: {\n\t\tget_image_base64_src: function () {\n\t\t\tif (!this.data.foto) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn \"data:image/jpeg;base64,\" + this.data.foto;\n\t\t},\n\t\tname: function () {\n\t\t\treturn {vorname: this.data.Vorname, nachname: this.data.Nachname};\n\t\t},\n\t\tprofilInfo: function () {\n\t\t\tlet res = {};\n\t\t\tlet notIncludedProperties = [\n\t\t\t\t\"Vorname\",\n\t\t\t\t\"Nachname\",\n\t\t\t\t\"foto_sperre\",\n\t\t\t\t\"foto\",\n\t\t\t];\n\t\t\tObject.keys(this.data).forEach((key) => {\n\t\t\t\tif (!notIncludedProperties.includes(key)) {\n\t\t\t\t\tres[key] = this.data[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \"profile\n \n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','vorname')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','nachname')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t('profil',bez)}}
    \n {{wert?wert:'-'}} \n
    \n
    \n
    \n
    \n
    \n`,\n};\n","import Kontakt from \"../ProfilComponents/Kontakt.js\";\nimport EditKontakt from \"./EditProfilComponents/EditKontakt.js\";\nimport Adresse from \"../ProfilComponents/Adresse.js\";\nimport EditAdresse from \"./EditProfilComponents/EditAdresse.js\";\nimport Status from \"./EditProfilComponents/Status.js\";\nimport TextInputDokument from \"./EditProfilComponents/TextInputDokument.js\";\n\nexport default {\n\tname: 'EditProfilSelect',\n\tcomponents: {\n\t\tKontakt,\n\t\tEditKontakt,\n\t\tAdresse,\n\t\tEditAdresse,\n\t\tStatus,\n\t\tTextInputDokument,\n\t},\n\tinject: [\"profilUpdateTopic\", \"isMitarbeiter\"],\n\tprops: {\n\t\tlist: Object,\n\n\t\t//? Prop used to determine how many options the select should initially show\n\t\tsize: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t//? Content for the aria label of the select\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprofilUpdate: String,\n\t\ttopic: String,\n\t\tbreadcrumb: String,\n\t},\n\temits: {\n\t\t//? update:modelValue event is needed to notify the v-model when the value has changed\n\t\t[\"update:profilUpdate\"]: null,\n\t\t[\"update:topic\"]: null,\n\t\t[\"update:breadcrumb\"]: null,\n\t\tsubmit: null,\n\t\tselect: null,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\tbreadcrumbItems: [],\n\t\t\tmodal_topic: this.topic,\n\t\t\tproperties: null,\n\t\t};\n\t},\n\n\tmethods: {\n\t\taddItem: function () {\n\t\t\tthis.view =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? \"EditKontakt\"\n\t\t\t\t\t: \"EditAdresse\";\n\n\t\t\t//? updates the topic when a Kontakt or an Address should be added\n\t\t\tthis.modal_topic =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? this.profilUpdateTopic[\"Add Kontakt\"]\n\t\t\t\t\t: this.profilUpdateTopic[\"Add Adresse\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.breadcrumbItems.push(this.modal_topic);\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\n\t\t\tthis.data =\n\t\t\t\tthis.view == \"EditAdresse\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tadresse_id: null,\n\t\t\t\t\t\tstrasse: null,\n\t\t\t\t\t\ttyp: null,\n\t\t\t\t\t\tplz: null,\n\t\t\t\t\t\tort: null,\n\t\t\t\t\t\tzustelladresse: false,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tkontakt_id: null,\n\t\t\t\t\t\tkontakttyp: null,\n\t\t\t\t\t\tkontakt: null,\n\t\t\t\t\t\tanmerkung: null,\n\t\t\t\t\t\tzustellung: false,\n\t\t\t\t\t};\n\t\t},\n\n\t\tdeleteItem: function (item) {\n\t\t\t//? delete flag\n\t\t\titem.data.delete = true;\n\t\t\tthis.$emit(\"update:profilUpdate\", item.data);\n\t\t\t//? updates the topic when a Kontakt or an Address should be deleted\n\n\t\t\tthis.modal_topic = this.modal_topic == this.profilUpdateTopic[\"Private Adressen\"]\n\t\t\t\t? this.profilUpdateTopic[\"Delete Adresse\"]\n\t\t\t\t: this.profilUpdateTopic[\"Delete Kontakt\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.$emit(\"submit\");\n\t\t},\n\n\t\tprofilUpdateEmit: function (event) {\n\t\t\t//? passes the updated profil information to the parent component\n\t\t\tthis.$emit(\"update:profilUpdate\", event);\n\t\t},\n\n\t\tupdateOptions: function (event, item) {\n\t\t\tthis.properties = item;\n\t\t\tthis.data = item.data;\n\t\t\tthis.view = item.view;\n\t\t\tif (item.title) {\n\t\t\t\t//? emits the selected topic to the parent component\n\t\t\t\tthis.modal_topic = item.topic;\n\t\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\n\t\t\t\t//? emits the new item for the breadcrumb in the parent component\n\t\t\t\tthis.breadcrumbItems.push(item.title);\n\t\t\t} else {\n\t\t\t\tif (item.data.kontakttyp) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakttyp);\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakt);\n\t\t\t\t} else if (item.data.strasse) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.strasse);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\t\t},\n\t},\n\tcomputed: {},\n\tcreated() {\n\t\t//? JSON parse and stringify are used to deep clone the objects\n\t\tthis.properties = {...this.list};\n\t\tthis.data = this.list.data\n\t\t\t? JSON.parse(JSON.stringify(this.list.data))\n\t\t\t: null;\n\t\tthis.view = this.list.view\n\t\t\t? JSON.parse(JSON.stringify(this.list.view))\n\t\t\t: null;\n\t},\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ `\n \n \n `,\n};\n","export default {\n props: {\n data: Object,\n },\n\n data() {\n return {\n originalValue: null,\n zustellKontakteCount: null,\n };\n },\n\n inject: [\"getZustellkontakteCount\"],\n\n methods: {\n updateValue: function (event, bind) {\n if (bind === \"zustellung\") {\n this.data[bind] = event.target.checked;\n } else {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n },\n\n computed: {\n showZustellKontakteWarning: function () {\n\t // if the kontakt is already a zustellungskontakt when the user is editing the kontakt, then no warning is shown and the zustellung will be overwritten\n\t if (JSON.parse(this.originalValue).zustellung) {\n\t return false;\n\t }\n\t const kontakteOfSelectedType = this.zustellKontakteCount.filter((element) => {\n\t\t return element.kontakttyp === this.data?.kontakttyp\n\t });\n // if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellKontakteCount.some((element) => element.kontakt_id === this.data.kontakt_id)) {\n return this.data.zustellung && kontakteOfSelectedType.length;\n }\n return this.kontakteOfSelectedType.length >= 2 && this.data.zustellung;\n },\n isChanged: function () {\n //? returns true if the original passed data object was changed\n if (!this.data.kontakt || !this.data.kontakttyp) {\n return false;\n }\n return JSON.stringify(this.data) !== this.originalValue;\n },\n },\n\n created() {\n this.originalValue = JSON.stringify(this.data);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n \n template:\n /*html*/\n `\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}
    \n\n \n
    \n\n
    \n
    \n\n \n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t('global','kontakt')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t('global','anmerkung')}}
    \n\n \n
    \n\n
    \n\n \n
    \n
    \n {{$p.t('profilUpdate','zustell_kontakte_warning')}}\n
    \n
    \n \n\n
    \n {{$p.t('profilUpdate','zustellungsKontakt')}}\n\n \n
    \n
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nimport ApiProfil from '../../../../../api/factory/profil.js';\n\nexport default {\n components: {\n AutoComplete: primevue.autocomplete,\n\tDms: Dms\n },\n\n props: {\n data: Object,\n files: {\n type: Array,\n default: []\n },\n },\n\n inject: [\"getZustelladressenCount\", \"updateFileID\", \"isMitarbeiter\"],\n\n data() {\n return {\n gemeinden: [],\n ortschaftnamen: [],\n selectedNation: null,\n nationenList: [],\n originalValue: null,\n zustellAdressenCount: null,\n\t dmsData: [],\n\t fileschanged: false\n };\n },\n\n watch: {\n \"data.gemeinde\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n \"data.ort\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n },\n\n methods: {\n\n autocompleteSearchGemeinden: function (event) {\n this.gemeinden = this.gemeinden.map((gemeinde) => gemeinde);\n },\n\n autocompleteSearchOrtschaftsnamen: function (event) {\n this.ortschaftnamen = this.ortschaftnamen.map((ortschaft) => ortschaft);\n },\n\n getGemeinde: function () {\n //? only query the gemeinde is the nation is Austria and the PLZ is greater than 999 and less than 32000\n if (\n this.data.nation &&\n this.data.nation === \"A\" &&\n this.data.plz &&\n this.data.plz > 999 &&\n this.data.plz < 32000\n ) {\n this.$api\n .call(ApiProfil.getGemeinden(this.data.nation, this.data.plz))\n .then((res) => {\n if (res.data.length) {\n this.gemeinden = [\n ...new Set(\n res.data.map((element) => {\n return element.name;\n })\n ),\n ];\n this.ortschaftnamen = [\n ...new Set(\n res.data.map((element) => {\n return element.ortschaftsname;\n })\n ),\n ];\n }\n });\n } else {\n this.gemeinden = [];\n }\n },\n\n updateValue: function (event, bind) {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n if (bind === \"zustelladresse\") {\n this.data[bind] = event.target.checked;\n\t } else if(bind === 'files') {\n\t\t if(this.dmsData.length > 0 && this.dmsData[0].type !== 'application/x.fhc-dms+json') {\n\t\t this.fileschanged = true;\n\t\t }\n\t\t this.updateFileID(this.dmsData);\n } else {\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n // update the zustellAdressen count\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n\tdeleteDmsData: function() {\n\t\tthis.dmsData = [];\n\t\tthis.updateValue(null, 'files');\n\t}\n },\n\n computed: {\n showZustellAdressenWarning: function () {\n\n\t // if the address was already a zustellungsadresse when editing the address, then the warning will not be shown and the zustellungsadresse will just be overwritten\n\t if (JSON.parse(this.originalValue).zustelladresse){\n\t\treturn false;\n\t }\n // if zustellAdressenCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellAdressenCount.includes(this.data.adresse_id)) {\n return this.data.zustelladresse && this.zustellAdressenCount.length;\n }\n return this.zustellAdressenCount.length >= 2 && this.data.zustelladresse;\n },\n isChanged: function () {\n if (\n !this.data.strasse ||\n !this.data.plz ||\n !this.data.ort ||\n !this.data.typ ||\n this.dmsData.length === 0\n ) {\n return false;\n }\n\n const datachanged = this.originalValue !== JSON.stringify(this.data);\n return datachanged || this.fileschanged;\n },\n },\n\n created() {\n // get all available nationen\n this.$api\n .call(ApiProfil.getAllNationen())\n .then(res => {\n this.nationenList = res.data;\n this.getGemeinde();\n });\n \n this.originalValue = JSON.stringify(this.data);\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n mounted() {\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n\n template: /*html*/ `\n
    \n \n
    \n
    \n\t {{$p.t('profilUpdate','zustell_adressen_warning')}}\n
    \n
    \n \n\n\n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','nation')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','plz')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','gemeinde')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','ort')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','strasse')}}*
    \n \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t('profilUpdate','meldebestaetigung')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n `,\n};\n","import Adresse from \"../../ProfilComponents/Adresse.js\";\nimport Kontakt from \"../../ProfilComponents/Kontakt.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n Adresse,\n Kontakt,\n },\n inject: [\"profilUpdateTopic\"],\n data() {\n return {\n files: null,\n };\n },\n methods: {\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n },\n computed: {\n getComponentView: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Private Adressen\"] ||\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Adresse\"]\n ) {\n return \"Adresse\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Private Kontakte\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Kontakt\";\n } else {\n return \"text_input\";\n }\n },\n cardHeader: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Delete Addresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Delete\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"]\n ) {\n return \"Add\";\n } else {\n return \"Update\";\n }\n },\n },\n props: {\n data: { type: Object },\n view: { type: String },\n status: { type: String },\n status_message: { type: String },\n status_timestamp: { type: String },\n updateID: { type: Number },\n topic: { type: String },\n },\n created() {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(this.updateID))\n .then((res) => {\n this.files = res.data;\n });\n },\n template: /*html*/ `\n
    \n\n
    \n
    \n
    {{$p.t('global','status')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('global','datum')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','statusMessage')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t('profilUpdate','nachweisdokumente')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nexport default {\n data() {\n return {\n dmsData: [],\n originalValue: null,\n };\n },\n components: {\n Dms,\n },\n props: {\n data: {\n type: Object,\n },\n withFiles: {\n type: Boolean,\n default: false,\n },\n files: {\n type: Array,\n },\n updateID: {\n type: Boolean,\n },\n },\n inject:[\"updateFileID\"],\n computed: {\n didFilesChange: function () {\n this.updateFileID(this.dmsData);\n let res = false;\n //? case in which the profilRequest has already associated files \n if(this.files){ \n Array.from(this.dmsData).forEach((file) => {\n if (this.files.some((f) => f.name !== file.name)) {\n res = true;\n }\n });\n return !(this.dmsData.length == this.files.length) || res;\n }\n //? case in which the user creates a new profilRequest\n else{ \n return Array.from(this.dmsData).length? true:false;\n }\n },\n didDataChange: function(){\n return JSON.stringify(this.data) !== this.originalValue;\n },\n isChanged: function () {\n if (this.withFiles) {\n if(this.updateID){\n return (this.didDataChange || this.didFilesChange) && this.dmsData.length;\n }\n return this.didDataChange && this.didFilesChange;\n }\n return this.didDataChange\n },\n },\n emits: [\"profilUpdate\"],\n watch: {\n //? watcher to trigger the event emit when a file was uploaded or removed\n dmsData(value) {\n this.emitChanges();\n },\n },\n methods: {\n stringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n emitChanges: function () {\n if (this.isChanged) {\n \n this.$emit(\n \"profilUpdate\", { value: this.data.value }\n );\n } else {\n this.$emit(\"profilUpdate\", null);\n }\n },\n },\n mounted() {\n this.originalValue = JSON.stringify(Vue.toRaw(this.data));\n\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n template: /*html*/`\n\n

    {{$p.t('profilUpdate','profilUpdateInformationMessage',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t('global','titel')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","import BsModal from \"../../../Bootstrap/Modal.js\";\nimport Alert from \"../../../Bootstrap/Alert.js\";\nimport EditProfilSelect from \"./EditProfilSelect.js\";\nimport Loader from \"../../../Loader.js\";\n\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tAlert,\n\t\tEditProfilSelect,\n\t\tLoader,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\tisMitarbeiter: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tvalue: Object,\n\t\ttitel: String,\n\t\tzustelladressenCount: Function,\n\t\tzustellkontakteCount: Function,\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t */\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\ttopic: null,\n\t\t\tprofilUpdate: null,\n\t\t\teditData: this.value,\n\t\t\tfileID: null,\n\t\t\tbreadcrumb: null,\n\t\t\tloading: false,\n\t\t\tresult: false,\n\t\t\tinfo: null,\n\t\t};\n\t},\n\tinject: [\"setLoading\"],\n\tprovide() {\n\t\treturn {\n\t\t\tupdateFileID: this.updateFileIDFunction,\n\t\t\tisMitarbeiter: this.isMitarbeiter\n\t\t};\n\t},\n\n\tmethods: {\n\t\tupdateFileIDFunction: function (newFileID) {\n\t\t\tthis.fileID = newFileID;\n\t\t},\n\n\t\thandleFailedError: function (err) {\n\t\t\tconsole.error(err);\n\t\t\tthis.loading = false;\n\t\t\tthis.setLoading(false);\n\t\t\tthis.result = false;\n\t\t\tthis.hide();\n\t\t},\n\n\t\tasync submitProfilChange() {\n\n\t\t\t//? check if data is valid before making a request\n\t\t\tif (this.topic && this.profilUpdate) {\n\t\t\t\t//? if profil update contains any attachment\n\t\t\t\tif (this.fileID) {\n\t\t\t\t\tconst fileData = await this.uploadFiles(this.fileID);\n\n\t\t\t\t\tthis.fileID = fileData ? fileData : null;\n\t\t\t\t}\n\n\t\t\t\t//? inserts new row in public.tbl_cis_profil_update\n\t\t\t\t//* calls the update api call if an update field is present in the data that was passed to the modal\n\t\t\t\tconst handleApiResponse = (res) => {\n\t\t\t\t\t//? toggles the loading to false and closes the loading modal\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\tthis.result = false;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ein Fehler ist aufgetreten: \" + JSON.stringify(res.data.retval)\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.result = true;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t//* v-show on EditProfil modal binded to this.loading\n\t\t\t\t//? hides the EditProfil modal and shows the loading modal by calling a callback that was passed as prop from the parent component\n\t\t\t\tthis.loading = true;\n\t\t\t\tthis.setLoading(true);\n\n\t\t\t\t//? if an updateID is present, updateProfilRequest is called, else insertProfilRequest is called\n\t\t\t\tthis.editData.updateID ?\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.updateProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.editData.updateID,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t})\n\t\t\t\t\t:\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tuploadFiles: async function (files) {\n\t\t\tif (files[0].type !== \"application/x.fhc-dms+json\") {\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", files[0]);\n\t\t\t\tconst result = this.editData.updateID\n\t\t\t\t\t? //? updating old attachment by replacing\n\t\t\t\t\t //* second parameter of api request insertFile checks if the file has to be replaced or not\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(\n\t\t\t\t\t\t\tformData,\n\t\t\t\t\t\t\tthis.editData.updateID\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t})\n\t\t\t\t\t: //? fresh insert of new attachment\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(formData))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\t//? attachment hasn't been replaced\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tshowFooter: function () {\n\t\t\tswitch (this.value.view) {\n\t\t\t\tcase 'Status':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Kontakt':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Adresse':\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\tif (this.editData.topic) {\n\t\t\t//? if the topic was passed through the prop add it to the component\n\t\t\tthis.topic = this.editData.topic;\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\tBsModal.popup.bind(this);\n\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/ `\n\n\t\n\t\n\t\n\t\n \n`,\n};\n","import EditProfil from \"../ProfilModal/EditProfil.js\";\n\nimport ApiProfil from '../../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\n//? EditProfil is the modal used to edit the profil updates\nexport default {\n\tcomponents: {EditProfil},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\n\tinject: [\n\t\t\"getZustellkontakteCount\",\n\t\t\"getZustelladressenCount\",\n\t\t\"profilUpdateStates\",\n\t\t\"profilUpdateTopic\",\n\t],\n\n\temits: [\"fetchUpdates\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowUpdateModal: false,\n\t\t\tcontent: null,\n\t\t\teditProfilTitle: this.$p.t(\"profil\", \"profilBearbeiten\"),\n\t\t};\n\t},\n\n\tmethods: {\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.updateEditModal.result) {\n\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showUpdateModal = false;\n\t\t},\n\n\t\tasync showEditProfilModal(updateRequest) {\n\n\t\t\tlet view = this.getView(updateRequest.topic, updateRequest.status);\n\n\t\t\tlet data = null;\n\t\t\tlet content = null;\n\t\t\tlet files = null;\n\t\t\tlet withFiles = false;\n\n\t\t\tif (view === \"TextInputDokument\") {\n\t\t\t\tdata = {\n\t\t\t\t\ttitel: updateRequest.topic,\n\t\t\t\t\tvalue: updateRequest.requested_change.value,\n\t\t\t\t};\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tif (files) {\n\t\t\t\t\twithFiles = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata = updateRequest.requested_change;\n\t\t\t}\n\n\t\t\tcontent = {\n\t\t\t\tupdateID: updateRequest.profil_update_id,\n\t\t\t\tview: view,\n\t\t\t\tdata: data,\n\t\t\t\twithFiles: withFiles,\n\t\t\t\ttopic: updateRequest.topic,\n\t\t\t\tfiles: files,\n\t\t\t};\n\n\t\t\tif (view === \"EditAdresse\") {\n\n\t\t\t\tconst isMitarbeiter = await this.$api.call(ApiProfil.isMitarbeiter(updateRequest.uid)).then((res) => res.data);\n\n\t\t\t\tif (isMitarbeiter) {\n\t\t\t\t\tcontent[\"isMitarbeiter\"] = isMitarbeiter;\n\t\t\t\t}\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tcontent[\"files\"] = files;\n\t\t\t}\n\n\t\t\t//? adds the status information if the profil update request was rejected or accepted\n\t\t\tif (updateRequest.status !== this.profilUpdateStates[\"Pending\"]) {\n\t\t\t\tcontent[\"status\"] = updateRequest.status;\n\t\t\t\tcontent[\"status_message\"] = updateRequest.status_message;\n\t\t\t\tcontent[\"status_timestamp\"] = updateRequest.status_timestamp;\n\t\t\t}\n\n\t\t\t//? update data of the reactive content\n\t\t\tthis.content = content;\n\t\t\tthis.editProfilTitle = updateRequest.topic;\n\n\t\t\t//? only show the popup if also the right content is available\n\t\t\tif (content) {\n\t\t\t\tthis.showUpdateModal = true;\n\t\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.updateEditModal.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tdeleteRequest: function (item) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.deleteProfilRequest(item.profil_update_id))\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\t//? open alert\n\t\t\t\t\t\tconsole.error(\"error happened\", res.data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\tgetView: function (topic, status) {\n\t\t\tif (!(status === this.profilUpdateStates[\"Pending\"])) {\n\t\t\t\treturn \"Status\";\n\t\t\t}\n\n\t\t\tswitch (topic) {\n\t\t\t\tcase this.profilUpdateTopic[\"Private Kontakte\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Kontakt\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Kontakt\"]:\n\t\t\t\t\treturn \"Kontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Private Adressen\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Adresse\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Adresse\"]:\n\t\t\t\t\treturn \"Adresse\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"TextInputDokument\";\n\t\t\t}\n\t\t},\n\n\t},\n\tcreated() {\n\t},\n\n\tcomputed: {},\n\n\ttemplate: /*html*/ `\n
    \n \n
    {{$p.t('profilUpdate','profilUpdates')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t('profilUpdate','topic')}}{{$p.t('global','status')}}{{$p.t('global','datum')}}{{$p.t('ui','aktion')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n`,\n};\n","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tAusweisStatus,\n\t\tQuickLinks,\n\t\tAdresse,\n\t\tKontakt,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t\tFetchProfilUpdates,\n\t\tEditProfil,\n\t},\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\tcollapseIconBetriebsmittel: true,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tzutrittsgruppen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilZutrittsgruppen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 200,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tcolumns: [{\n\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.zutrittsGruppenPhrase),\n\t\t\t\t\tfield: \"bezeichnung\"\n\t\t\t\t}],\n\t\t\t},\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.inventarnummerPhrase) ,\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.ausgabedatum) ,\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\tmethods: {\n\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tzutrittsgruppenTableBuilt: function () {\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setData(\n\t\t\t\tthis.data.zuttritsgruppen\n\t\t\t);\n\t\t},\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\t\t\tthis.showModal = true;\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory('profil').then(() => {\n\t\t\tthis.preloadedPhrasen.zutrittsGruppenPhrase = this.$p.t('profil/zutrittsGruppen');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatum = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\t},\n\twatch: {\n\t\t'language.value'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.zutrittsgruppenTable) this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    \n \n
    \n \n\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateKontakte')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateAdressen')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n \n
    \n \n
    \n \n
    \n\n
    \n`,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tEditProfil,\n\t\tAdresse,\n\t\tKontakt,\n\t\tFetchProfilUpdates,\n\t\tAusweisStatus,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.bezeichnungPhrase),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.organisationseinheitPhrase),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigVonPhrase),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigBisPhrase),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.wochenstundenPhrase),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tdata: [{betriebsmittel: \"\", Nummer: \"\", Ausgegeben_am: \"\"}],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.inventarnummerPhrase),\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.ausgabedatumPhrase),\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\t\n\tmethods: {\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\n\t\t\tthis.showModal = true;\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t},\n\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tsetTableColumnTitles() { // reevaluates computed phrasen\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory([\"ui\",\"lehre\",\"global\",\"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatumPhrase = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded=true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'data.mittel'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) {\n\t\t\tthis.setTableColumnTitles()\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateKontakte')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateAdressen')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n\n \n `,\n};\n","import QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nexport default {\n\tdata() {\n\t\treturn {};\n\t},\n\tcomponents: {\n\t\tQuickLinks,\n\t\tMailverteiler,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tprops: [\"data\"],\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\t\n\tmethods: {},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ ` \n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n \n \n \n \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n `,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tRoleInformation,\n\t\tProfilEmails,\n\t\tProfilInformation,\n\t},\n\tinject: [\"collapseFunction\", \"language\"],\n\tdata() {\n\t\treturn {\n\t\t\tcollapseIconFunktionen: true,\n\t\t\tpreloadedPhrasen:{},\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaViewProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t//? option when wanting to hide the collapsed list\n\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('ui/bezeichnung')),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('lehre/organisationseinheit')),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigVon')),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigBis')),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('profil/wochenstunden')),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\t//? this is the prop passed to the dynamic component with the custom data of the view\n\tprops: [\"data\"],\n\tmethods: {\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) { // reevaluates computed phrasen\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.$p.loadCategory([\"ui\", \"lehre\", \"global\", \"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t},\n\n\ttemplate: /*html*/ `\n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n`,\n};\n","import StudentProfil from \"./StudentProfil.js\";\nimport MitarbeiterProfil from \"./MitarbeiterProfil.js\";\nimport ViewStudentProfil from \"./StudentViewProfil.js\";\nimport ViewMitarbeiterProfil from \"./MitarbeiterViewProfil.js\";\nimport Loading from \"../../Loader.js\";\n\nimport ApiProfil from '../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nVue.$collapseFormatter = function (data) {\n\t//data - an array of objects containing the column title and value for each cell\n\tvar container = document.createElement(\"div\");\n\tcontainer.classList.add(\"tabulator-collapsed-row\");\n\tcontainer.classList.add(\"text-break\");\n\n\tvar list = document.createElement(\"div\");\n\tlist.classList.add(\"row\");\n\n\tcontainer.appendChild(list);\n\n\tdata.forEach(function (col) {\n\t\tlet item = document.createElement(\"div\");\n\t\titem.classList.add(\"col-6\");\n\t\tlet item2 = document.createElement(\"div\");\n\t\titem2.classList.add(\"col-6\");\n\n\t\titem.innerHTML = \"\" + col.title + \"\";\n\t\titem2.innerHTML = col.value ? col.value : \"-\";\n\n\t\tlist.appendChild(item);\n\t\tlist.appendChild(item2);\n\t});\n\n\treturn Object.keys(data).length ? container : \"\";\n};\n\nexport const Profil = {\n\tname: 'Profil',\n\tcomponents: {\n\t\tStudentProfil,\n\t\tMitarbeiterProfil,\n\t\tViewStudentProfil,\n\t\tViewMitarbeiterProfil,\n\t\tLoading,\n\t},\n\tprops: {\n\t\tuid: {\n\t\t\ttype: String,\n\t\t\trequired:false,\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//? loading property is used for showing/hiding the loading modal\n\t\t\tloading: false,\n\t\t\tprofilUpdateStates: null,\n\t\t\tprofilUpdateTopic: null,\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\t// notfound is null by default, but contains an UID if no user exists with that UID\n\t\t\tnotFoundUID: null,\n\t\t\tisEditable: this.viewData.editable ?? false,\n\t\t};\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tisEditable: Vue.computed(()=>this.isEditable),\n\t\t\tprofilUpdateStates: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateStates ? this.profilUpdateStates : false\n\t\t\t),\n\t\t\tprofilUpdateTopic: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateTopic ? this.profilUpdateTopic : false\n\t\t\t),\n\t\t\tsetLoading: (newValue) => {\n\t\t\t\tthis.loading = newValue;\n\t\t\t},\n\t\t\tgetZustellkontakteCount: this.zustellKontakteCount,\n\t\t\tgetZustelladressenCount: this.zustellAdressenCount,\n\t\t\tcollapseFunction: (e, column) => {\n\t\t\t\t//* check if property doesn't exist already and add it to the reactive this properties\n\t\t\t\tif (this[e.target.id] === undefined) {\n\t\t\t\t\tthis[e.target.id] = true;\n\t\t\t\t}\n\t\t\t\tthis[e.target.id] = !this[e.target.id];\n\n\t\t\t\t//* gets all event icons of the different rows to use the onClick event later\n\t\t\t\tlet allClickableIcons = column._column.cells.map((row) => {\n\t\t\t\t\treturn row.element.children[0];\n\t\t\t\t});\n\n\t\t\t\t//* changes the icon that shows or hides all the collapsed columns\n\t\t\t\t//* if the replace function does not find the class to replace, it just simply returns false\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-up\", \"fa-angle-down\");\n\t\t\t\t} else {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-down\", \"fa-angle-up\");\n\t\t\t\t}\n\n\t\t\t\t//* changes the icon for every collapsed column to open or closed\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn !column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tsortProfilUpdates: (ele1, ele2) => {\n\t\t\t\tlet result = 0;\n\t\t\t\tif (ele1.status.toLowerCase() === \"pending\") {\n\t\t\t\t\tresult = -1;\n\t\t\t\t} else if (ele1.status.toLowerCase() === \"accepted\") {\n\t\t\t\t\tresult = ele2.status.toLowerCase() === \"rejected\" ? -1 : 1;\n\t\t\t\t} else {\n\t\t\t\t\tresult = 1;\n\t\t\t\t}\n\t\t\t\t//? if they have the same status the insert date is used for ordering\n\t\t\t\tif (ele1.status === ele2.status) {\n\t\t\t\t\tresult =\n\t\t\t\t\t\tnew Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n\t\t\t\t\t\tnew Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t};\n\t},\n\tmethods: {\n\t\tasync load() {\n\t\t\t// fetch profilUpdateStates to provide them to children components\n\t\t\tawait this.$api\n\t\t\t\t.call(ApiProfilUpdate.getStatus())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateStates = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.getTopic())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateTopic = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.profilViewData(this.$route.params.uid??null))\n\t\t\t\t.then((response) => response.data).then(data=>{\n\t\t\t\t\tthis.view = data?.profil_data.view;\n\t\t\t\t\tthis.data = data?.profil_data.data;\n\t\t\t\t\tthis.isEditable = data?.editable ?? false;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t},\n\t\tzustellAdressenCount() {\n\t\t\tif (!this.data || !this.data.adressen) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet adressenArray = [];\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.requested_change.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\treturn adresse.requested_change.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.adressen\n\t\t\t\t\t.filter((adresse) => adresse.zustelladresse)\n\t\t\t\t\t.every((adresse) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.requested_change.adresse_id == adresse.adresse_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.adressen\n\t\t\t\t\t\t.filter((adresse) => {\n\t\t\t\t\t\t\treturn adresse.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adr) => {\n\t\t\t\t\t\t\treturn adr.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(adressenArray)];\n\t\t\t\n\t\t},\n\t\tzustellKontakteCount() {\n\t\t\tif (!this.data || !this.data.kontakte) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet kontakteArray = [];\n\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.status === 'Pending' && update.requested_change.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kontant) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kontant.requested_change.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kontant.requested_change.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.kontakte\n\t\t\t\t\t.filter((kontakt) => kontakt.zustellung)\n\t\t\t\t\t.every((kontakt) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.status === 'Pending' && update.requested_change.kontakt_id == kontakt.kontakt_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.kontakte\n\t\t\t\t\t\t.filter((kontakt) => {\n\t\t\t\t\t\t\treturn kontakt.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kon) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kon.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kon.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(kontakteArray)];\n\t\t},\n\t},\n\tcomputed: {\n\t\t\n\t\tfilteredEditData() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tview: null,\n\t\t\t\tdata: {\n\t\t\t\t\tPersonen_Informationen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"personenInformationen\"),\n\t\t\t\t\t\ttopic: \"Personen_informationen\",\n\t\t\t\t\t\tview: null,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tvorname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"vorname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Vorname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"vorname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.vorname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnachname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"nachname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Nachname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"nachname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.nachname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttitel: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"global\", \"titel\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Titel\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"titel\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.titel,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpostnomen: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"postnomen\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Postnomen\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"postnomen\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.postnomen,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Kontakte: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateKontakte\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Kontakte\"],\n\t\t\t\t\t\tdata: this.data.kontakte\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\t// excludes all contacts that are already used in pending profil update requests\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some(\n\t\t\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.kontakt_id === item.kontakt_id\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((kontakt) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Kontakt\",\n\t\t\t\t\t\t\t\t\tview: \"EditKontakt\",\n\t\t\t\t\t\t\t\t\tdata: kontakt,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Adressen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateAdressen\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Adressen\"],\n\t\t\t\t\t\tdata: this.data.adressen\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some((update) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.adresse_id == item.adresse_id\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Adresse\",\n\t\t\t\t\t\t\t\t\tview: \"EditAdresse\",\n\t\t\t\t\t\t\t\t\tdata: adresse,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n\twatch: {\n\t\tloading: function (newValue) {\n\t\t\tif (newValue) {\n\t\t\t\tthis.$refs.loadingModalRef.show();\n\t\t\t} else {\n\t\t\t\tthis.$refs.loadingModalRef.hide();\n\t\t\t}\n\t\t},\n\t\tuid (newVal, oldVal) {\n\t\t\tthis.load()\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.load()\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    `,\n}\n\nexport default Profil","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetContentID(ort_kurbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/ContentID',\n\t\t\tparams: { ort_kurzbz: ort_kurbz }\n\t\t};\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getRooms',\n\t\t\tparams: { datum, von, bis, typ, personenanzahl }\n\t\t};\n\t},\n\tgetRoomTypes() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getTypes',\n\t\t\tparams: { }\n\t\t};\n\t}\n};","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiOrt from '../../../api/factory/ort.js'\nexport const Raumsuche = {\n\tname: \"Raumsuche\",\n\tprops: {\n\t\t\n\t},\n\tcomponents: {\n\t\tVueDatePicker,\n\t\tCoreFilterCmpt,\n\t\tInputNumber: primevue.inputnumber,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\troomtypes: null,\n\t\t\tdefaultType: {\n\t\t\t\traumtyp_kurzbz: '',\n\t\t\t\tbeschreibung: Vue.computed(() => this.$p.t('global/alle'))\n\t\t\t},\n\t\t\tanzahl: 1,\n\t\t\tselectedType: null,\n\t\t\tdatum: new Date(),\n\t\t\tvon: Vue.ref({\n\t\t\t\thours: new Date().getHours(),\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tbis: Vue.ref({\n\t\t\t\thours: new Date().getHours() + 1,\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tdatepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'dd.MM.yyyy',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\ttimepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'HH:mm',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\traumsucheTableOptions: {\n\t\t\t\theight: Vue.ref(400),\n\t\t\t\tindex: 'ort_kurzbz',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raum_kurzbz')), field: 'ort_kurzbz', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('global/bezeichnung')), field: 'bezeichnung', widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raumnummer')), field: 'nummer', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/personcap')), field: 'personen', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/rauminfo')),\n\t\t\t\t\t\tfield: 'linkInfo', formatter: this.linkFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/roomReservations')), \n\t\t\t\t\t\tfield: 'linkRes', formatter: this.linkFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\traumsucheTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tlinkFormatter(cell) {\n\t\t\tconst val = cell.getValue();\n\t\t\tconst field = cell.getField();\n\t\t\tconst arialabel = (field === 'linkInfo') \n\t\t\t\t\t\t\t? this.$p.t('rauminfo/rauminfo') \n\t\t\t\t\t\t\t: this.$p.t('rauminfo/roomReservations');\n\t\t\tif(val) {\n\t\t\t\treturn ''\n\t\t\t} else {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'-
    '\n\t\t\t}\n\t\t},\n\t\troomPlanLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t+ '/CisVue/Cms/getRoomInformation/' + room.ort_kurzbz\n\t\t},\n\t\troomInfoLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/CisVue/Cms/content/' + room.content_id\n\t\t},\n\t\tgetTimeString(time) {\n\t\t\tconst hours = String(time.hours).padStart(2, '0');\n\t\t\tconst minutes = String(time.minutes).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`\n\t\t},\n\t\tsetupData(data){\n\t\t\tconst d = data.map(room => {\n\t\t\t\treturn {\n\t\t\t\t\tort_kurzbz: room.ort_kurzbz,\n\t\t\t\t\tbezeichnung: room.bezeichnung.replace('&', '&'),\n\t\t\t\t\tnummer: room.planbezeichnung,\n\t\t\t\t\tpersonen: room.max_person,\n\t\t\t\t\tlinkInfo: room.content_id ? this.roomInfoLink(room) : null,\n\t\t\t\t\tlinkRes: this.roomPlanLink(room)\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.raumsucheTable.tabulator.setData(d);\n\t\t},\n\t\tloadRoomTypes() {\n\t\t\tthis.$api.call(ApiOrt.getRoomTypes())\n\t\t\t\t.then(res => {\n\t\t\t\tres?.data?.forEach(type => {\n\t\t\t\t\ttype.beschreibung = type.beschreibung.replace('&', '&')\n\t\t\t\t})\n\t\t\t\tthis.selectedType = this.defaultType\n\t\t\t\tthis.roomtypes = res?.data ?? []\n\t\t\t})\n\t\t},\n\t\tloadRooms() {\n\t\t\tthis.$api.call(ApiOrt.getRooms(this.datum.toISOString(), this.getTimeString(this.von), this.getTimeString(this.bis), this.selectedType?.raumtyp_kurzbz ?? '', this.anzahl))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data?.retval) this.setupData(res.data.retval)\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tsearch(){\n\t\t\tthis.loadRooms()\n\t\t},\n\t\tsetRoute(val) {\n\t\t\t// TODO: router push\n\t\t},\n\t\tdateFormat(date) {\n\t\t\tconst day = String(date.getDate()).padStart(2, '0');\n\t\t\tconst month = String(date.getMonth() + 1).padStart(2, '0');\n\t\t\tconst year = date.getFullYear();\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\ttimeFormat(date) {\n\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`;\n\t\t},\n\t\tasync setupMounted() {\n\t\t\t\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.loadRoomTypes()\n\t\t\tthis.loadRooms()\n\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tconst h = window.visualViewport.height - rect.top - 100\n\t\t\tif(this.$refs.raumsucheTable) {\n\t\t\t\tthis.$refs.raumsucheTable.$refs.table.style.setProperty('height', h+'px')\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tisDarkMode(){\n\t\t\treturn this.$theme.theme_name.value == 'dark';\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['rauminfo', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t

    {{$p.t('rauminfo/roomSearch')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n `,\n};\n\nexport default Raumsuche;\n","export default {\n components: {\n paginator: primevue.paginator,\n },\n emits: [\"update:rows\"],\n props: {\n maxPageCount: {\n type: Number,\n default: 0,\n },\n page_size: {\n type: Number,\n required: true,\n },\n },\n data() {\n return {};\n },\n methods: {\n newPageEvent: function (data) {\n \n },\n },\n mounted() {},\n template: /*html*/ `\n \t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" >\n\t\t\n\t
    \n\t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" template=\"FirstPageLink PrevPageLink CurrentPageReport NextPageLink LastPageLink RowsPerPageDropdown\">\n\t\t\n\t
    \n `,\n};\n","export default {\n\tprops:{\n\t\tuid:String,\n\t\tvorname:String,\n\t\tnachname:String,\n\t\ttitelpre:String,\n\t\tkontakt:String,\t\n\t\ttelefoneklappe:String,\n\t\temail:String,\n\t\tplanbezeichnung:String,\n\t\tfoto:String,\n\t\tdisplayWidget:{\n\t\t\ttype:Boolean,\n\t\t\tdefault:false,\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t\"mitarbeiter_foto\"\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t`,\n\tcomputed:{\n\t\tformattedEmail: function(){\n\t\t\tif(!this.email ) return null;\n\t\t\tlet emailString= this.email.replace(\"mailto:\", \"\");\n\t\t\t// when splitting a string, the letter that is used to split the string will be removed from the result\n\t\t\tlet emailArray = emailString.split('@');\n\t\t\t// returns both parts of the splitted string in combination with the removed letter and a word break\n\t\t\treturn emailArray[0] + '@' + emailArray[1];\n\t\t},\n\t\tfullname: function () {\n\t\t\tif (this.titelpre && this.vorname && this.nachname) {\n\t\t\t\treturn `${this.titelpre} ${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.vorname && this.nachname) {\n\t\t\t\treturn `${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.nachname) {\n\t\t\t\treturn this.vorname;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tphone: function () {\n\t\t\tif (this.kontakt && this.telefoneklappe) {\n\t\t\t\treturn {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt).concat(\" \" + this.telefoneklappe),\n\t\t\t\t\tnumber: this.kontakt.concat(\" \" + this.telefoneklappe),\n\t\t\t\t} \n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn this.kontakt ? {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt),\n\t\t\t\t\tnumber: this.kontakt,\n\t\t\t\t} : null;\n\t\t\t}\n\t\t},\n\t\temail_link: function () {\n\t\t\treturn this.email ? \"mailto:\".concat(this.email) : null;\n\t\t},\n\t\tbase64Image:function(){\n\t\t\treturn this.foto ? 'data:image/png;base64,'.concat(this.foto) : null;\n\t\t},\n\t\tort:function(){\n\t\t\treturn this.planbezeichnung ?? null;\n\t\t},\n\t\tprofilViewLink: function(){\n\t\t\treturn this.uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(this.uid): null; \n\t\t},\n\t},\n\t\n}","export default {\n\tprops: {\n\t\ttitle:String,\n\t\tvertretungsList:Array,\n\t\tshowBezeichnung:Boolean,\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t`,\n\tmethods: {\n\t\tprofilViewLink: function (uid) {\n\t\t\treturn uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(uid) : null;\n\t\t},\n\t\tvertretungFormatedName: function (vertretung) {\n\t\t\tif (!vertretung) return null;\n\t\t\treturn `${vertretung.vorname ?? ''} ${vertretung.nachname ?? ''} ${vertretung.bezeichnung && this.showBezeichnung ? '('.concat(vertretung.bezeichnung.replace(\"(\", \"\").replace(\")\", \"\")).concat(\")\") : ''}`\n\t\t},\n\t},\n\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tstudiengangInformation() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Studgang/getStudiengangInfo'\n\t\t};\n\t},\n\tgetStudiengangByKz(studiengang_kz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz',\n\t\t\tparams: { studiengang_kz }\n\t\t};\n\t}\n};","import StudiengangPerson from \"./StudiengangPerson.js\";\nimport StudiengangVertretung from \"./StudiengangVertretung.js\";\n\nimport ApiStudiengang from '../../../../api/factory/studiengang.js';\n\nexport default {\ndata(){\n\treturn{\n\t\tstudiengang:null,\n\t\tsemester: null,\n\t\tstg_ltg: null,\n\t\tgf_ltg: null,\n\t\tstv_ltg: null,\n\t\tass: null,\n\t\thochschulvertr: null,\n\t\tstdv: null,\n\t\tjahrgangsvertr: null,\n\t}\n},\nprops:{\n\tdisplayWidget:{\n\t\ttype:Boolean,\n\t\tdefault:false,\n\t}\n},\ncomponents:{\n\tStudiengangPerson,\n\tStudiengangVertretung,\n},\ntemplate:/*html*/`\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n`,\ncomputed:{\n\t// this function concatenates the studiengangsleitung and the assistenz or the \n\t// geschaeftsfuehrende-Stellvertretende Leitung if both collections only contain one person\n\tcollection_array: function(){\n\t\tlet returnData = [];\n\n\t\tif (Array.isArray(this.stg_ltg) && this.stg_ltg.length == 1 && Array.isArray(this.ass) && this.ass.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: `${this.$p.t('global', 'studiengangsleitung')}/${this.$p.t('studiengangInformation', 'assistenz')}` , collection: [...this.stg_ltg, ...this.ass] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('global', 'studiengangsleitung'), collection: this.stg_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'assistenz'), collection: this.ass });\n\t\t}\n\t\tif (Array.isArray(this.gf_ltg) && this.gf_ltg.length == 1 && Array.isArray(this.stv_ltg) && this.stv_ltg.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_stellvertretende_leitung'), collection: [...this.gf_ltg, ...this.stv_ltg] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_leitung'), collection: this.gf_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'stellvertretende_leitung'), collection: this.stv_ltg });\n\t\t}\n\n\t\treturn returnData;\n\t},\n\tmoodleLink: function(){\n\t\t// early return if the studiengang information is not available\n\t\tif(!this.studiengang || !this.studiengang.studiengang_kz) return;\n\n\t\treturn `https://moodle.technikum-wien.at/course/view.php?idnumber=dl` + this.studiengang.studiengang_kz;\n\t},\n},\n\tmounted() {\n\t\tthis.$api\n\t\t\t.call(ApiStudiengang.studiengangInformation())\n\t\t\t.then(res => res.data)\n\t\t\t.then(studiengangInformationen => {\n\t\t\t\tObject.assign(this, studiengangInformationen);\n\t\t\t});\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tcontent(content_id, version=null, sprache=null, sichtbar=null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/content',\n\t\t\tparams: {\n\t\t\t\tcontent_id,\n\t\t\t\t...(version ? { version } : {}),\n\t\t\t\t...(sprache ? { sprache } : {}),\n\t\t\t\t...(sichtbar ? { sichtbar } : {})\n\t\t\t}\n\t\t};\n\t},\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNews',\n\t\t\tparams: {\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache\n\t\t\t},\n\t\t};\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/news',\n\t\t\tparams: { limit }\n\t\t};\n\t},\n\tgetNewsRowCount() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNewsRowCount'\n\t\t};\n\t},\n\tgetNewsExtra() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getStudiengangInfoForNews'\n\t\t};\n\t}\n};","import Pagination from \"../../Pagination/Pagination.js\";\nimport StudiengangInformation from \"./StudiengangInformation/StudiengangInformation.js\";\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"NewsComponent\",\n components: {\n Pagination,\n\tStudiengangInformation,\n },\n data() {\n return {\n content: null,\n maxPageCount: 0,\n page_size: 10,\n\t page:1,\n };\n },\n watch:{\n\t'$p.user_language.value':function(sprache){\n\t\tthis.fetchNews();\n\t}\n },\n computed:{\n\tsprache: function(){\n\t\treturn this.$p.user_language.value;\n\t},\n },\n methods: {\n\t\tfetchNews() {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiCms.getNews(this.page, this.page_size, this.sprache))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\t\t\t\tel.classList.add(\"align-items-center\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t\t\t\t});\n\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t},\n\t\tloadNewPageContent(data) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.getNews(data.page, data.rows))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\t\t\t\t\t\n\t\t\t\t});\n\t\t}\n },\n created() {\n this.fetchNews();\n\n\t\tthis.$api\n\t\t\t.call(ApiCms.getNewsRowCount())\n\t\t\t.then(res => res.data)\n\t\t\t.then(result => {\n\t\t\t\tthis.maxPageCount = result;\n\t\t\t});\n },\n template: /*html*/ `\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n `,\n};\n","\nexport default {\n\tname: \"RaumComponent\",\n\tdata() {\n\t\treturn {\n\t\t\timgContent: null\n\t\t}\n\t},\n props:{\n content:{\n type:String,\n required:true,\n },\n\t content_id:{\n\t\ttype: [Number, String],\n\t }\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n mounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = document.getElementsByClassName(\"tablesorter\");\n\t\t\n\t\tfor (let table of tables) {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\tnew Tabulator(table, {\n\t\t\t\tlayout: \"fitDataStretch\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: false,\n\t\t\t\t\tminWidth: \"100px\",\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\t\n\t\tlet title = document.getElementsByTagName(\"h1\");\n\t\ttitle = title.length ? title[0] : null;\n\t\t// tries to wrap the Raum titel with a link tag that redirects to the Reservierungen of that Raum\n\t\tif (title && title.innerText) \n\t\t{\n\t\t\tlet room_name = title.innerText;\n\t\t\tlet room_name_reg_exp = new RegExp(\"\\\\w*\\\\s([a-zA-Z][0-9\\\\.]+)$\");\n\t\t\tlet room_name_reg_exp_result = room_name.match(room_name_reg_exp);\n\t\t\tif(room_name_reg_exp_result)\n\t\t\t{\n\t\t\t\troom_name = room_name_reg_exp_result[0];\n\t\t\t\troom_name = room_name.replace(\" \",\"_\");\n\t\t\t\tlet link_element = document.createElement(\"a\");\n\t\t\t\tlink_element.href = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/CisVue/Cms/getRoomInformation/\" + room_name;\n\t\t\t\tlink_element.appendChild(title.cloneNode(true));\n\t\t\t\ttitle.replaceWith(link_element);\n\n\t\t\t\tlet lvplanlinks = document.querySelectorAll('.menubox a[href*=\"stpl_week.php\"]');\n\t\t\t\tfor(let lvplanlink of lvplanlinks) {\n\t\t\t\t\tlvplanlink.href = link_element.href;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.error(`the regular expression did not match the room name: ${room_name}`);\n\t\t\t}\n\t\t\t\n\t\t\treturn\n\t\t}\n\t\t\n\t\tconst parser = new DOMParser()\n\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\n\t\tconst img = doc.querySelector(\"img\")\n\t\tif(img && img.title)\n\t\t{\n\t\t\tconst imgAttributes = {}\n\t\t\tfor (let attr of img.attributes) {\n\t\t\t\timgAttributes[attr.name] = attr.value\n\t\t\t}\n\n\t\t\tthis.imgContent = imgAttributes\n\t\t}\n\t\t\n\t\tconsole.error(`was not able to get the title of the raum_contentmittitel`);\n\t\t\n },\n template: /*html*/ `\n \n\n
    \n
    \n

    Content was not found

    \n `,\n };\n ","// collection of relative and absolute regex to replace legacy links\nconst GROUP_REPLACEMENT_STRATEGIES = {\n\tQUERY_PARAMETERS:'QUERY_PARAMETERS',\n\tPATH_SEGMENTS:'PATH_SEGMENTS',\n}\n\nconst regexList = {\n\trelative:[\n\t\t{ \n\t\t\tpriority: 1, \n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/content\\.php\\?content_id=([0-9]+)/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content',\n\t\t\tgroup_replacement_strategy:GROUP_REPLACEMENT_STRATEGIES.PATH_SEGMENTS,\n\t\t},\n\t\t{ \n\t\t\tpriority: 2,\n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/news\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news',\n\t\t},\n\t\t{ \n\t\t\tpriority: 3,\n\t\t\tregex: new RegExp(/^\\.\\.\\/index\\.ci\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router,\n\t\t},\n\t\t{ \n\t\t\tpriority: 10, \n\t\t\tregex: new RegExp(/^\\.\\.\\//),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root,\n\t\t},\n\t],\n\tabsolute:[\n\t\t{}\n\t]\n};\n\n// sorts the relative regex array by priority ascending\nconst relative_regex = regexList.relative\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex, \n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t});\n\n// sorts the absolute regex array by priority ascending\nconst absolute_regex = regexList.absolute\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex,\n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t})\n\n\nexport function replaceRelativeLegacyLink(relativeLegacyLink){\n\tfor (let {regex,replacement,group_replacement_strategy} of relative_regex){\t\n\t\t// if any of the regex matches the relativeLegacyLink, replace the matched part with the new app_root path\n\t\tlet match = relativeLegacyLink.match(regex);\n\t\tif (match) {\n\t\t\tlet new_link = relativeLegacyLink.replace(regex, replacement);\n\t\t\t\n\t\t\t\tswitch (group_replacement_strategy){\n\t\t\t\t\tcase 'QUERY_PARAMETERS':\n\t\t\t\t\t\t//TODO: this doesn't really work yet because the query parameter are key/value pairs\n\t\t\t\t\t\tnew_link = new_link.concat(`?${match[1]}`);\n\t\t\t\t\t\tfor (let query_parameter of match.slice(2)) {\n\t\t\t\t\t\t\tnew_link = new_link.concat(`&${query_parameter}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'PATH_SEGMENTS':\n\t\t\t\t\t\tfor (let query_parameter of match.slice(1)) { \n\t\t\t\t\t\t\tnew_link = new_link.concat(`/${query_parameter}`);\n\t\t\t\t\t\t} \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\treturn new_link; \n\t\t}\n\t}\n\t// if none of the regex matched with the string return the original path\n\treturn relativeLegacyLink;\n}\n\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"GeneralComponent\",\n props:{\n content:{\n type:String,\n required:true,\n },\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t},\n\t\tprepareContent() {\n\t\t\t// replaces the tablesorter with the tabulator\n\t\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\t\ttables.forEach((table, index) => {\n\t\t\t\tthis.sanitizeLegacyTables(table)\n\n\t\t\t\tnew Tabulator(table, {\n\t\t\t\t\tindex: index,\n\t\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\t\tcolumnDefaults: {\n\t\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t\t});\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\t\telement.href = new_href;\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t\t}\n\t\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tupdated() {\n\t\tthis.prepareContent();\n\t},\n\tmounted(){\n\t\tthis.prepareContent();\n\t},\n template: /*html*/ `\n \n
    \n \t
    \n
    \n

    Content was not found

    \n `,\n };\n ","import raum_contentmittitel from './Content_types/Raum_contentmittitel.js'\nimport general from './Content_types/General.js'\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\nimport news_content from './Content_types/News_content.js';\nimport iframe_content from './Content_types/Iframe_content.js';\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"ContentComponent\",\n\tprops: {\n\t\tcontent_id: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: true\n\t\t},\n\t\tversion: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\t\tsichtbar: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t}\n\t},\n\tcomponents: {\n\t\traum_contentmittitel,\n\t\tnews_content,\n\t\tgeneral,\n\t\tiframe_content\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcontent_type: null,\n\t\t\tcontent: null,\n\t\t\tcontent_id_internal: this.content_id\n\t\t};\n\t},\n\tmethods: {\n\t\tfetchContent(){\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.content(this.content_id_internal, this.version, this.sprache, this.sichtbar))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\tthis.content = res.data.content;\n\t\t\t\t\t\tthis.content_type = res.data.type;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t},\n\twatch:{\n\t\tsprache: function(sprache){\n\t\t\tthis.fetchContent();\n\t\t},\n\t\t'$route.params.content_id'(newVal) {\n\t\t\tthis.content_id_internal = newVal\n\t\t\tthis.fetchContent();\n\t\t}\n\t},\n\tcomputed: {\n\t\tsprache(){\n\t\t\treturn this.$p.user_language.value;\n\t\t},\n\t\tcomputeContentType: function () {\n\t\t\tswitch (this.content_type) {\n\t\t\t\tcase \"raum_contentmittitel\":\n\t\t\t\t\treturn \"raum_contentmittitel\";\n\t\t\t\tcase \"news\":\n\t\t\t\t\treturn \"news_content\";\n\t\t\t\tcase \"iframe\":\n\t\t\t\t\treturn \"iframe_content\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"general\";\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.fetchContent();\n\t},\n\ttemplate: /*html*/ `\n \n\t
    \n \t\n\t
    \n

    No content is available to display

    \n `,\n};\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"NewsContentType\",\n\tprops:{\n\t content:{\n\t\t type:String,\n\t\t required:true,\n\t },\n\t},\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n\tmounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\ttables.forEach((table, index) => {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\t\n\t\t\tnew Tabulator(table, {\n\t\t\t\tindex: index,\n\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: true,\n\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t evt.preventDefault();\n\t\t\t BsConfirm.popup(el.dataset.confirm)\n\t\t\t\t.then(() => {\n\t\t\t\t Axios.get(el.href)\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t\t});\n\t\t });\n\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t/^ROOT\\//,\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t);\n\t\t});\n\t\t\t\n\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\telement.href = new_href;\n\t\t});\n\n\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t}\n\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t}\n\t\t});\n\n\t\tVue.nextTick(() => {\n\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\tel.classList.add(\"align-items-center\");\n\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t});\n\n\t\t})\n\n\t},\n\ttemplate: /*html*/ `\n\t \n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t `,\n };\n ","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\";\n\nexport default {\n\tname: \"iframe_content\",\n\tprops: {\n\t\tcontent: { type: String, required: true }\n\t},\n\tcomputed: {\n\t\tsrcUrl() {\n\t\t\tconst parser = new DOMParser()\n\t\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\t\t\tconst iframe = doc.querySelector(\"iframe[src]\");\n\n\t\t\tif (!iframe)\n\t\t\t\treturn \"\";\n\n\t\t\tlet url = iframe.getAttribute(\"src\") || \"\";\n\t\t\treturn replaceRelativeLegacyLink(url);\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t`\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\n\nexport const DEFAULT_MODE_RAUMINFO = 'Week'\n\nexport default {\n\tname: \"RoomInformation\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops:{\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tcomputed: {\n\t\tcurrentDay() {\n\t\t\treturn this.propsViewData?.focus_date || luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t},\n\t\tcurrentMode() {\n\t\t\treturn this.propsViewData?.mode || DEFAULT_MODE_RAUMINFO;\n\t\t}\n\t},\n\tmethods:{\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"RoomInformation\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tort_kurzbz: this.propsViewData.ort_kurzbz\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.getRoomInfo(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getOrtReservierungen(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    {{ $p.t('rauminfo/rauminfo') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    `\n};\n","export default {\n\tgetConfig() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfig'\n\t\t};\n\t},\n\tgetConfigStudent() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfigStudent'\n\t\t};\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektarbeiten',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektabgaben',\n\t\t\tparams: { projektarbeit_id: detail.projektarbeit_id, student_uid: detail.student_uid }\n\t\t};\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetMitarbeiterProjektarbeiten(all) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten',\n\t\t\tparams: { showall: all }\n\t\t};\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\t\n\t\tlet dateString = termin.datum\n\t\tif(termin.datum instanceof Date) {\n\t\t\tconst year = termin.datum.getFullYear();\n\t\t\tconst month = String(termin.datum.getMonth() + 1).padStart(2, '0');\n\t\t\tconst day = String(termin.datum.getDate()).padStart(2, '0');\n\n\t\t\tdateString = `${year}-${month}-${day}`\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postProjektarbeitAbgabe',\n\t\t\tparams: { \n\t\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tdatum: dateString,\n\t\t\t\tnote: termin.note_pk,\n\t\t\t\tupload_allowed: !!termin.upload_allowed,\n\t\t\t\tbeurteilungsnotiz: termin.beurteilungsnotiz ?? '',\n\t\t\t\tfixtermin: termin.fixtermin,\n\t\t\t\tinsertvon: termin.insertvon,\n\t\t\t\tkurzbz: termin.kurzbz,\n\t\t\t\tprojektarbeit_id: termin.projektarbeit_id,\n\t\t\t\tbetreuer_person_id: termin.betreuer_person_id\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe',\n\t\t\tparams: { paabgabe_id }\n\t\t};\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postSerientermin',\n\t\t\tparams: { datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin }\n\t\t};\n\t},\n\tfetchDeadlines(person_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/fetchDeadlines',\n\t\t\tparams: { person_id }\n\t\t};\n\t},\n\tgetPaAbgabetypen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getPaAbgabetypen'\n\t\t};\n\t},\n\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\tgetNoten(){\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getNoten'\n\t\t};\n\t},\n\tgetProjektarbeitenForStudiengang(studiengang_kz, benotet = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang',\n\t\t\tparams: { studiengang_kz, benotet }\n\t\t};\n\t},\n\t// TODO: this could also very well be generic info api\n\tgetStudiengaenge() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudiengaenge'\n\t\t};\n\t},\n\tpostStudentProjektarbeitZusatzdaten(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetSignaturStatusForProjektarbeitAbgaben(paabgabe_ids, student_uid) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben',\n\t\t\tparams: {paabgabe_ids, student_uid},\n\n\t\t};\n\t}\n};","export const FhcOverlay = {\n\tname: 'FhcOverlay',\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\t\n\t},\n\ttemplate: `\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t`\n};\nexport default FhcOverlay;","import Upload from '../../../components/Form/Upload/Dms.js';\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\n\nexport const AbgabeStudentDetail = {\n\tname: \"AbgabeStudentDetail\",\n\tcomponents: {\n\t\tUpload,\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tInplace: primevue.inplace,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tinject: ['notenOptions', 'isMobile', 'isViewMode', 'moodle_link'],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tviewMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\t\n\t\t\tif(noteOpt?.bezeichnung) {\n\t\t\t\treturn noteOpt?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(noteOpt?.benotbar === true && !termin.note) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tasync validate(termin, endupload = false) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$capitalize(this.$p.t('global/warningChooseFile')));\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tif(endupload) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/confirmEnduploadSpeichern'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t},\n\t\tasync triggerEndupload() {\n\t\t\t\n\t\t\tif (!await this.validate(this.enduploadTermin, true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('paabgabetyp_kurzbz', this.enduploadTermin.paabgabetyp_kurzbz)\n\t\t\tformData.append('projektarbeit_id', this.enduploadTermin.projektarbeit_id);\n\t\t\tformData.append('paabgabe_id', this.enduploadTermin.paabgabe_id)\n\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tfor (let i = 0; i < this.enduploadTermin.file.length; i++) {\n\t\t\t\tformData.append('file', this.enduploadTermin.file[i]);\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitEndupload(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.handleUploadRes(res, this.enduploadTermin)\n\t\t\t\t}).finally(()=> {\n\t\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.hide()\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\tasync upload(termin) {\n\n\t\t\t// only do this on endupload\n\t\t\tif (! await this.validate(termin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'end') {\n\t\t\t\t// open endupload form modal for further inputs\n\t\t\t\tthis.enduploadTermin = termin\n\t\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.show()\n\t\t\t} else {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append('paabgabetyp_kurzbz', termin.paabgabetyp_kurzbz)\n\t\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id)\n\t\t\t\tformData.append('paabgabe_id', termin.paabgabe_id)\n\t\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < termin.file.length; i++) {\n\t\t\t\t\tformData.append('file', termin.file[i]);\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZwischenabgabe(formData))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.handleUploadRes(res, termin)\n\t\t\t\t\t}).finally(()=> {\n\t\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\thandleUploadRes(res, termin) {\n\t\t\tif(res.meta.status == \"success\") {\n\t\t\t\tthis.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t('abgabetool/c4fileUploadSuccessv3')))\n\n\t\t\t\t// update 'abgabedatum' for successful upload -> shows the pdf icon and date once set\n\t\t\t\ttermin.abgabedatum = new Date().toISOString().split('T')[0];\n\t\t\t\tif(res?.data?.signatur !== undefined) {\n\t\t\t\t\ttermin.signatur = res.data.signatur\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.$fhcAlert.alertError(this.$capitalize(this.$p.t('abgabetool/c4fileUploadErrorv3')))\n\t\t\t}\n\t\t\t\n\t\t\tif(res.meta.signaturInfo) {\n\t\t\t\tthis.$fhcAlert.alertInfo(res.meta.signaturInfo)\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t},\n\t\tgetOptionLabel(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetTerminNoteBezeichnung(termin) {\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\treturn noteOpt ? noteOpt.bezeichnung : ''\n\t\t},\n\t},\n\twatch: {\n\t\tprojektarbeit(newVal) {\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetMoodleLink() {\n\t\t\treturn this.moodle_link + this.projektarbeit.studiengang_kz\t\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4eidesstattlicheErklaerung'))\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedToSendEndupload() {\n\t\t\treturn this.eidAkzeptiert && this.allowedToSaveZusatzdaten\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerspaetet')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerpasst')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbzugeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipStandardv2')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgegeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipFixtermin')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToUpload() {\n\t\t\tif(this.isViewMode) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedInViewMode')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedRegular')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\t\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeStudentenbereich') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t('person/student') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4titel') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4betreuerv2') ) }}: {{projektarbeit ? $p.t('abgabetool/c4betrart' + projektarbeit.betreuerart_kurzbz) + ' ' + projektarbeit.betreuer : ''}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t('abgabetool/c4checkoutStgMoodleInfos') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n `,\n};\n\nexport default AbgabeStudentDetail;\n","\nconst zone = 'Europe/Vienna';\nconst today = luxon.DateTime.now().setZone(zone);\n\nexport function getDateStyleClass(termin, notenOptions) {\n\tconst datum = luxon.DateTime.fromISO(termin.datum, { zone }).endOf('day');\n\tconst abgabedatum = termin.abgabedatum ? luxon.DateTime.fromISO(termin.abgabedatum, { zone }) : null;\n\ttermin.diffindays = datum.diff(today, 'days').days;\n\tconst isLate = abgabedatum && abgabedatum > datum;\n\n\t// GRADE STATUS\n\tif (termin.note) {\n\t\tconst opt = typeof termin.note === 'object' ? termin.note : notenOptions.find(nopt => nopt.note == termin.note)\n\t\tif (opt?.positiv === true) return 'bestanden';\n\t\telse if (opt?.positiv === false) return 'nichtbestanden';\n\t}\n\t\n\t// ACTION REQUIRED FOR GRADE\n\tif (termin.bezeichnung?.benotbar && datum <= today) {\n\t\treturn 'beurteilungerforderlich';\n\t}\n\n\t// SUBMISSION STATUS\n\tif (termin.upload_allowed) {\n\t\tif (termin.abgabedatum) {\n\t\t\treturn isLate ? 'verspaetet' : 'abgegeben';\n\t\t}\n\n\t\t// no submission yet\n\t\tif (datum < today) return 'verpasst';\n\t\tif (termin.diffindays <= 12) return 'abzugeben';\n\t\treturn 'standard';\n\t}\n\n\t// GENERIC STATUS\n\treturn datum < today ? 'verpasst' : 'standard';\n}","import AbgabeDetail from \"./AbgabeStudentDetail.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport BsModal from \"../../Bootstrap/Modal.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\n\nexport const AbgabetoolStudent = {\n\tname: \"AbgabetoolStudent\",\n\tcomponents: {\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tBsModal,\n\t\tAbgabeDetail,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tnotenOptions: Vue.computed(() => this.notenOptions),\n\t\t\tisViewMode: Vue.computed(() => this.isViewMode),\n\t\t\tmoodle_link: Vue.computed(() => this.moodle_link)\n\t\t}\n\t},\n\tprops: {\n\t\tstudent_uid_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tactiveTabIndex: [0],\n\t\t\tabgabeTypeOptions: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tloading: false,\n\t\t\tnotenOptions: null,\n\t\t\tdetail: null,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\tmoodle_link: null\n\t\t};\n\t},\n\tmethods: {\n\t\tcheckQualityGatesStrict(termine) {\n\t\t\tlet qgate1Passed = false\n\t\t\tlet qgate2Passed = false\n\t\t\t\n\t\t\ttermine.forEach(t => {\n\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\tif(t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\tqgate1Passed = true\n\t\t\t\t\t} else if(t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\tqgate2Passed = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn qgate1Passed && qgate2Passed\n\t\t},\n\t\tcheckQualityGatesOptional(termine) {\n\t\t\tconst qgate1found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate1')\n\t\t\tconst qgate2found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate2')\n\t\t\t\n\t\t\tlet qgate1positiv = true\n\t\t\tif(qgate1found) {\n\t\t\t\tqgate1positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\t\tqgate1positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlet qgate2positiv = true\n\t\t\tif(qgate2found) {\n\t\t\t\tqgate2positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\t\tqgate2positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn qgate1positiv && qgate2positiv\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading = true\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\t\n\t\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\t\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\tif(termin.paabgabetyp_kurzbz == 'end') {\n\t\t\t\t\t\t// old assumed production logic when qgates are required\n\t\t\t\t\t\t// termin.allowedToUpload = !this.isPastDate(termin.datum) && this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst inTime = termin.fixtermin ? !this.isPastDate(termin.datum) : true\n\t\t\t\t\t\ttermin.allowedToUpload = inTime && this.checkQualityGatesOptional(pa.abgabetermine)\n\n\n\t\t\t\t\t\t// development purposes\n\t\t\t\t\t\t// termin.allowedToUpload = this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t// termin.allowedToUpload = true\n\n\t\t\t\t\t} else if(termin.fixtermin) {\n\t\t\t\t\t\ttermin.allowedToUpload = !this.isPastDate(termin.datum)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// this could confuse people since we should dont show people this flag\n\t\t\t\t\t\ttermin.allowedToUpload = termin.upload_allowed \n\t\t\t\t\t}\n\n\t\t\t\t\t// blocks client upload button if projektarbeitet is already beurteilt und thus further abgaben on any termin should be blocked\n\t\t\t\t\tif(paIsBenotet) termin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = this.student_uid\n\t\t\t\t\n\t\t\t\tthis.selectedProjektarbeit = pa\n\n\t\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\t\t\n\t\t\t}).finally(()=>{this.loading=false})\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t}\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\t// should always be \"projekt.mitarbeiter_uid +'@'+ this.domain\", built in backend\n\t\t\treturn 'mailto:' + projekt.email\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\treturn (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tasync setupData(data){\n\t\t\t// this.projektarbeiten = data[0]\n\t\t\tconst projektarbeiten = data[0] ?? null\n\t\t\tif(!projektarbeiten) return\n\t\t\tthis.projektarbeiten = projektarbeiten.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: this.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t\tbetreuer_person_id: projekt.bperson_id,\n\t\t\t\t\t\tbetreuerart_kurzbz: projekt.betreuerart_kurzbz,\n\t\t\t\t\t\tmode\n\t\t\t\t\t},\n\t\t\t\t\tbeurteilung1: projekt.downloadLink1 ?? null,\n\t\t\t\t\tbeurteilung2: projekt.downloadLink2 ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: projekt.kurzbzlang,\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\tbetreuer: this.buildBetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttypbezeichnung,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t},\n\t\tloadProjektarbeiten() {\n\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektarbeiten(this.student_uid))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\t\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.loadProjektarbeiten()\n\t\t},\n\t\tgetAccTabHeaderForProjektarbeit(projektarbeit) {\n\t\t\tlet title = ''\n\t\t\t\n\t\t\ttitle += projektarbeit.titel ?? this.$p.t('abgabetool/keinTitel')\n\t\t\t\n\t\t\treturn title\n\t\t},\n\t\tgetMailLink(projektarbeit) {\n\t\t\tif(projektarbeit.email) {\n\t\t\t\treturn 'mailto:'+projektarbeit.email\n\t\t\t} else return ''\n\t\t},\n\t\tgetNoteBezeichnung(projektarbeit) {\n\t\t\tif(projektarbeit.note && this.notenOptions) {\n\t\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == projektarbeit.note)\n\t\t\t\treturn noteOpt?.bezeichnung\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\thandleDownloadBeurteilung1(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung1)\n\t\t},\n\t\thandleDownloadBeurteilung2(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung2)\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\t\tisViewMode() {\n\t\t\treturn this.student_uid !== this.viewData.uid\n\t\t},\n\t\tstudent_uid() {\n\t\t\treturn this.student_uid_prop || this.viewData?.uid || null\n\t\t}\n\t},\n\tasync created() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\tthis.loading = true\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tawait this.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t}).finally(() => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfigStudent()).then(res => {\n\t\t\tthis.moodle_link = res.data?.moodle_link\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\n `,\n};\n\nexport default AbgabetoolStudent;\n","import BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\n\nexport const AbgabeMitarbeiterDetail = {\n\tname: \"AbgabeMitarbeiterDetail\",\n\tcomponents: {\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tSpeedDial: primevue.speeddial,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tVueDatePicker\n\t},\n\temits: ['paUpdated'],\n\tinject: [\n\t\t'abgabeTypeOptions',\n\t\t'abgabetypenBetreuer',\n\t\t'allowedNotenOptions',\n\t\t'notenOptionsNonFinal',\n\t\t'turnitin_link',\n\t\t'old_abgabe_beurteilung_link'\n\t],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tisFullscreen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tassistenzMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowAutomagicModalPhrase: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tspeedDialItems: [{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4newAbgabetermin')),\n\t\t\t\ticon: \"fa fa-plus\",\n\t\t\t\tcommand: this.openCreateNewAbgabeModal,\n\t\t\t\tdisabled: Vue.computed(() => !this.getAllowedToCreateNewTermin)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4benoten')),\n\t\t\t\ticon: \"fa fa-user-check\",\n\t\t\t\tcommand: this.openBenotung,\n\t\t\t\tdisabled: Vue.computed(()=> this.assistenzMode == true)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4plagiatcheck_link')),\n\t\t\t\ticon: \"fa fa-clipboard-check\",\n\t\t\t\tcommand: this.openPlagiatcheck\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4student_perspective')),\n\t\t\t\ticon: \"fa fa-eye\",\n\t\t\t\tcommand: this.openStudentPage\n\t\t\t}],\n\t\t\tnewTermin: null,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tif(termin.noteBackend?.bezeichnung) {\n\t\t\t\treturn termin.noteBackend?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(termin.bezeichnung?.benotbar === true && !termin.noteBackend) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tgetPlaceholderTermin(termin) {\n\t\t\treturn termin?.bezeichnung ? this.$p.t('abgabetool/c4paatyp' + termin.paabgabetyp_kurzbz) : this.$p.t('abgabetool/abgabetypPlaceholder')\n\t\t},\n\t\tsaveTermin(termin) {\n\t\t\tconst paabgabe_id = termin.paabgabe_id\n\t\t\ttermin.note_pk = termin.note?.note ?? null\n\t\t\ttermin.betreuer_person_id = this.projektarbeit.betreuer_person_id\n\t\t\t\n\t\t\t// phrasentext 'no late submission allowed' to 'late submission allowed' + boolean UI invert\n\t\t\ttermin.fixtermin = !termin.invertedFixtermin\n\t\t\treturn this.$api.call(ApiAbgabe.postProjektarbeitAbgabe(termin)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\n\t\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == res.data[0].note)\n\t\t\t\t\tconst newTerminRes = {\n\t\t\t\t\t\t'allowedToSave': true,\n\t\t\t\t\t\t'allowedToDelete': true,\n\t\t\t\t\t\t...res.data[0]\n\t\t\t\t\t}\n\t\t\t\t\tif(newTerminRes.note) {\n\t\t\t\t\t\tnewTerminRes.note = noteOpt\n\t\t\t\t\t\tnewTerminRes.noteBackend = noteOpt // certain UI elements should only reflect persisted state\n\t\t\t\t\t}\n\t\t\t\t\tnewTerminRes.invertedFixtermin = !newTerminRes.fixtermin\n\t\t\t\t\tconst existingTerminRes = res.data[1]\n\t\t\t\t\t\n\t\t\t\t\tconst abgabeOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == newTerminRes.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tnewTerminRes.bezeichnung = {\n\t\t\t\t\t\tbezeichnung: termin.bezeichnung?.bezeichnung,\n\t\t\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung?.paabgabetyp_kurzbz,\n\t\t\t\t\t\tbenotbar: abgabeOpt.benotbar\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// only insert new abgabe if we actually created a new one, not when saving/editing existing\n\t\t\t\t\tif(!existingTerminRes){\n\t\t\t\t\t\tnewTerminRes.dateStyle = getDateStyleClass(newTerminRes, this.notenOptions)\n\t\t\t\t\t\tthis.projektarbeit.abgabetermine.push(newTerminRes)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst noteOptExisting = this.allowedNotenOptions.find(opt => opt.note == existingTerminRes.note)\n\t\t\t\t\t\texistingTerminRes.note = noteOptExisting\n\n\t\t\t\t\t\ttermin.paabgabetyp_kurzbz = newTerminRes.paabgabetyp_kurzbz\n\t\t\t\t\t\ttermin.noteBackend = noteOpt // do NOT take noteOptExisting -> should reflect the \"yes the qgate grade is confirmed in backend ux behaviour\"\n\t\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.projektarbeit.abgabetermine.sort((a, b) =>new Date(a.datum) - new Date(b.datum))\n\t\t\t\t\t\n\t\t\t\t\tconst index = this.projektarbeit.abgabetermine.findIndex(t => termin.paabgabe_id == t.paabgabe_id)\n\t\t\t\t\t\n\t\t\t\t\t// negative abgabe -> automagically open new termin modal\n\t\t\t\t\t// really bad feature imo that will be annoying to deal with\n\t\t\t\t\t\n\t\t\t\t\t// termin is completely new and has negative note\n\t\t\t\t\tconst savedNewWithNegative = !existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null\n\n\t\t\t\t\t// termin existed previously + oldTermin had different note/positive note or no note at all\n\t\t\t\t\tconst savedExistingNoteAsNegativeAndWasNotNegativeBefore = existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null && (existingTerminRes.note?.positiv || existingTerminRes.note === undefined)\n\n\t\t\t\t\tconst openModalDueToNegativeBeurteilung = savedNewWithNegative || savedExistingNoteAsNegativeAndWasNotNegativeBefore\n\t\t\t\t\tif(openModalDueToNegativeBeurteilung) {\n\t\t\t\t\t\tthis.newTermin = {\n\t\t\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t\t\t'kurzbz': '', // todo kurzbz textfield value vorschlag für qualgates\n\t\t\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t\t\t'upload_allowed': false,\n\t\t\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === newTerminRes.paabgabetyp_kurzbz),\n\t\t\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = true\n\n\t\t\t\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = false\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\topenZusatzdatenModal() {\n\t\t\tthis.$refs.modalContainerZusatzdaten.show()\n\t\t},\n\t\tasync saveZusatzdaten(){\n\t\t\tif (!await this.validateZusatzdaten())\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst pa = this.projektarbeit\n\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id);\n\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZusatzdaten(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res.meta.status == 'success') {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\tif(!data?.retval?.[0]) return\n\t\t\t\t\t\tconst paRes = data.retval[0]\n\t\t\t\t\t\tpa.seitenanzahl = paRes.seitenanzahl ?? 1\n\t\t\t\t\t\tpa.kontrollschlagwoerter = paRes.kontrollschlagwoerter ?? ''\n\t\t\t\t\t\tpa.schlagwoerter = paRes.schlagwoerter ?? ''\n\t\t\t\t\t\tpa.sprache = paRes.sprache ?? ''\n\t\t\t\t\t\tpa.schlagwoerter_en = paRes.schlagwoerter_en ?? ''\n\t\t\t\t\t\tpa.abstract = paRes.abstract ?? ''\n\t\t\t\t\t\tpa.abstract_en = paRes.abstract_en ?? ''\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}).finally(()=> {\n\t\t\t\tthis.loading = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerZusatzdaten.hide()\n\t\t},\n\t\tasync validateZusatzdaten() {\n\t\t\t// just ask once\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/confirmZusatzdatenSpeichern'),\n\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleDeleteTermin(termin){\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/c4confirm_delete'),\n\t\t\t\tacceptLabel: 'Löschen',\n\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\trejectLabel: 'Zurück',\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\tthis.deleteTermin(termin)\n\t\t\t}\n\t\t},\n\t\tdeleteTermin(termin) {\n\t\t\tthis.$api.call(ApiAbgabe.deleteProjektarbeitAbgabe(termin.paabgabe_id)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')]))\n\t\t\t\t\t// this.$p.t('global/tooltipLektorDeleteKontrolle', [this.$entryParams.permissions.kontrolleDeleteMaxReach ])\n\t\t\t\t\tconst deletedTerminIndex = this.projektarbeit.abgabetermine.findIndex(t => t.paabgabe_id === termin.paabgabe_id)\n\t\t\t\t\tthis.projektarbeit.abgabetermine.splice(deletedTerminIndex, 1)\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabelSprache(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option) {\n\t\t\treturn this.$p.t('abgabetool/c4paatyp' + option.paabgabetyp_kurzbz)\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t\tgetNotenOptionLabel(option) {\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\topenStudentPage() {\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenPlagiatcheck() {\n\t\t\tconst link = this.turnitin_link\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tasync openBenotung() {\n\t\t\t// old link check ?\n\t\t\t\n\t\t\tif(this.getSemesterBenotbar && this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkNew) {\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkNew\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else if(this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkOld) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4aeltereParbeitBenotenv2'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkOld\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else {\n\t\t\t\t// show info text that no endupload with abgabe has been found\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4keinEnduploadErfolgt'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\t// unsafe for datepickers, dont use there\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\t\t\t\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\topenCreateNewAbgabeModal() {\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') {\n\t\t\t\t// maybe alert that this is not allowed or smth\n\n\t\t\t\tthis.$fhcAlert.alertWarning('Terminanlage disabled')\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.newTermin) {\n\t\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\t\tthis.newTermin = {\n\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t'bezeichnung': typ,\n\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t},\n\t\tvalidateTermin(termin) {\n\t\t\t// compare new termin to existing ones to block illegal termin constellations, if they exist\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleSaveNewAbgabe(termin) {\n\t\t\t\n\t\t\tif(!this.validateTermin(termin)) {\n\t\t\t\tthis.$fhcAlert.alertWarning('invalid termin')\n\t\t\t\t\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tawait this.saveTermin(termin)\n\t\t\t\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.hide()\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': false,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen'),\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\thandleChangeAbgabetyp(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetAllowedToCreateNewTermin() {\n\t\t\tif(this.assistenzMode) return true\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\tif(this.projektarbeit?.note !== undefined && this.projektarbeit.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) return true\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\t// normally should be allowed if no rules apply\n\t\t\treturn true\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\tif(this.assistenzMode) {\n\t\t\t\treturn this.abgabeTypeOptions\n\t\t\t} else {\n\t\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t\t}\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t},\n\t\tgetSemesterBenotbar(){\n\t\t\treturn this.projektarbeit?.isCurrent ?? false\n\t\t},\n\t\tendUploadVorhanden(){\n\t\t\treturn this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null)\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.bezeichnung?.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe?.bezeichnung?.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetSpeedDialStyle() {\n\t\t\treturn 'position: static !important;'\n\t\t},\n\t\tgetSpeedDialWrapperStyle() {\n\t\t\t// non fullscreen -> wrapper is positioned on right bottom corner of modal, wherever that is\n\t\t\treturn 'position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;'\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerspaetet'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerpasst'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbzugeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipStandardv2'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbgegeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipFixtermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToSave() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToEditAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToDelete() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToDeleteAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetProjektarbeitTitel() {\n\t\t\tif(this.projektarbeit?.titel) return this.$capitalize(this.$p.t('abgabetool/c4titel')) + ': ' + this.projektarbeit.titel\n\t\t\t\n\t\t\treturn ''\n\t\t},\n\t\tgetProjektarbeitStudent(){\n\t\t\tif(this.projektarbeit?.student) return this.$capitalize(this.$p.t('person/student')) + ': ' + this.projektarbeit.student\n\n\t\t\treturn ''\n\t\t}\n\t},\n\twatch: {\n\t\t'newTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.newTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\t\t\t\n\t\t\tthis.newTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\t'projektarbeit'(newVal) {\n\t\t\t// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text\n\t\t\t\n\t\t\t// reset newTermin object\n\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': newVal.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': typ,\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t\tnewVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)\n\t\t\t\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t},\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeMitarbeiterbereich') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n`,\n};\n\nexport default AbgabeMitarbeiterDetail;\n","export async function splitMailsHelper(mails, event, subject, alertPluginRef, phrasenPluginRef) {\n\tlet splititem = \",\";\n\tlet maillist = mails.join(splititem);\n\tlet mailto = \"\";\n\t// take subject line length + '?subject=' length into account\n\tconst subjectlength = subject && typeof subject === 'string' ? subject.length + 9 : 0 \n\tif (maillist.length > 2024)\n\t{\n\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'zuvieleEMails') }) === false)\n\t\t\treturn;\n\t}\n\n\tlet firstrun = true;\n\tlet useBcc = event?.ctrlKey || event?.metaKey;\n\twhile (maillist.length > 0)\n\t{\n\t\tif (maillist.length + subjectlength > 2024)\n\t\t{\n\t\t\tlet splitposition = maillist.lastIndexOf(splititem, 1900);\n\t\t\tmailto = maillist.substring(0, splitposition);\n\t\t\tmaillist = maillist.substring(splitposition + 1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmailto = maillist;\n\t\t\tmaillist = \"\";\n\t\t}\n\n\t\tlet mailLink = useBcc ? `mailto:?bcc=${mailto}` : `mailto:${mailto}`;\n\t\tif(subject && typeof subject === 'string') mailLink += `?subject=${subject}`\n\t\tif (firstrun)\n\t\t{\n\t\t\twindow.location.href = mailLink;\n\t\t\tfirstrun = false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'weitereEMail')}) === true)\n\t\t\t{\n\t\t\t\twindow.location.href = mailLink;\n\t\t\t}\n\t\t}\n\n\t}\n}","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\nimport {splitMailsHelper} from \"../../../helpers/EmailHelpers.js\";\n\nexport const AbgabetoolMitarbeiter = {\n\tname: \"AbgabetoolMitarbeiter\",\n\tcomponents: {\n\t\tBsModal,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabetypenBetreuer),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link)\n\t\t}\n\t},\n\tprops: {\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tabgabetypenBetreuer: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tBETREUER_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitDataStretch',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return \n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.detailFormatter, headerFilter: false, headerSort: false, widthGrow: 1, tooltip: false, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4betreuerartv2'))), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))), field: 'prevTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: 'abgabeTableBetreuer2026-02-26'\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"mail\") {\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => {\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tsammelMailStudent(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = \"\"; // empty subject line \n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst rowDate = rowVal.luxonDate;\n\t\t\t\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected) {\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\ttoggleShowAll(showall) {\n\t\t\tthis.showAll = showall\n\t\t\tthis.loading = true\n\t\t\tthis.loadProjektarbeiten(showall, () => {\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tthis.saving = true\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tthis.selectedData?.map(projekt => projekt.projektarbeit_id),\n\t\t\t\tfalse\n\t\t\t)).then(res => {\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\n\t\t\t\t\tconst oldScrollLeft = this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft\n\t\t\t\t\tconst oldScrollTop = this.$refs.abgabeTable?.tabulator.rowManager.scrollTop\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\tthis.loadProjektarbeiten(this.showAll, () => {\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\t\t\tthis.loading = false\n\n\t\t\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\t\t\tif(table) {\n\t\t\t\t\t\t\t\ttable.scrollLeft = oldScrollLeft;\n\t\t\t\t\t\t\t\ttable.scrollTop = oldScrollTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\t\t\t\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\t\t\t\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading=true\n\n\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tlet paIsBenotet = false\n\t\t\tif(pa.note !== undefined && pa.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) paIsBenotet = false\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\tpaIsBenotet = true\n\t\t\t}\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\tif(noteOpt) termin.note = noteOpt\n\t\t\t\ttermin.file = []\n\t\t\t\t\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && noteOpt) {\n\t\t\t\t\ttermin.noteBackend = noteOpt\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// update 08-01-2026: everybody is allowed to do everything in client, critical checks happen at backend level\n\t\t\t\t// termin.allowedToSave = true\n\t\t\t\t\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\t\t\t\t\n\t\t\t\t// lektoren are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = termin.allowedToSave && !termin.abgabedatum\n\t\t\t\t\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\n\t\t\t})\n\t\t\t\n\t\t\tpa.student_uid = details.student_uid\n\t\t\tpa.student = `${pa.vorname} ${pa.nachname}`\n\t\t\t\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\n\t\t\n\t\t\tthis.loading = false\n\t\t\t\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\t\t\t\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\t\n\t\t},\n\t\tsetupData(data){\n\t\t\t\n\t\t\t\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = data[0]?.retval?.map(projekt => {\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\t\t\t\tprojekt.selectable = projekt.betreuerart_kurzbz !== 'Zweitbegutachter'\n\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.$api.call(ApiAbgabe.getMitarbeiterProjektarbeiten(all))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tif(callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\n\t\t\tif(this.BETREUER_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfig()).then(res => {\n\t\t\tthis.turnitin_link = res.data?.turnitin_link\n\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link\n\t\t\tthis.abgabetypenBetreuer = res.data?.abgabetypenBetreuer\n\t\t\tthis.BETREUER_SAMMELMAIL_BUTTON_STUDENT = res.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch noten options\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tthis.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t\t\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolMitarbeiter;\n","export default {\n\tname: 'BootstrapOffcanvas',\n\tdata: () => ({\n\t\toffcanvas: null\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean, String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tscroll: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'start', // start | end | top | bottom\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['start', 'end', 'top', 'bottom'].includes(value);\n\t\t\t}\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\theaderClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: 'p-4'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tdialogClass: [String, Array, Object]\n\t},\n\temits: [\n\t\t\"hideBsOffcanvas\",\n\t\t\"hiddenBsOffcanvas\",\n\t\t\"hidePreventedBsOffcanvas\",\n\t\t\"showBsOffcanvas\",\n\t\t\"shownBsOffcanvas\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.offcanvas?.dispose();\n\t\t},\n\t\thide() {\n\t\t\treturn this.offcanvas?.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.offcanvas?.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.offcanvas?.toggle();\n\t\t},\n\t\tpopup(body, options, title, footer) {\n\t\t\tconst BsOffcanvas = this,\n\t\t\t\tslots = {};\n\n\t\t\tif (body !== undefined)\n\t\t\t\tslots.default = () => body;\n\t\t\tif (title !== undefined)\n\t\t\t\tslots.title = () => title;\n\t\t\tif (footer !== undefined)\n\t\t\t\tslots.footer = () => footer;\n\n\t\t\tlet includedPrimevue = false;\n\t\t\tif (typeof primevue !== 'undefined')\n\t\t\t\tincludedPrimevue = true;\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst instance = Vue.createApp({\n\t\t\t\t\tname: 'OffcanvasTmpApp',\n\t\t\t\t\tsetup() {\n\t\t\t\t\t\treturn () =>\n\t\t\t\t\t\t\tVue.h(BsOffcanvas, {\n\t\t\t\t\t\t\t\tclass: 'offcanvas-wrapper',\n\t\t\t\t\t\t\t\tref: 'offcanvas',\n\t\t\t\t\t\t\t\t...options\n\t\t\t\t\t\t\t}, slots);\n\t\t\t\t\t},\n\t\t\t\t\tmounted() {\n\t\t\t\t\t\tthis.$refs.offcanvas.show();\n\t\t\t\t\t},\n\t\t\t\t\tbeforeUnmount() {\n\t\t\t\t\t\tif (this.$refs.offcanvas)\n\t\t\t\t\t\t\tthis.$refs.offcanvas.result !== false ? resolve(this.$refs.offcanvas.result) : reject();\n\t\t\t\t\t},\n\t\t\t\t\tunmounted() {\n\t\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst wrapper = document.createElement('div');\n\n\t\t\t\tif (includedPrimevue) {\n\t\t\t\t\tinstance.use(primevue.config.default, { zIndex: { overlay: 9999 } });\n\t\t\t\t}\n\n\t\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\t\tinstance.mount(wrapper);\n\t\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.offcanvas) {\n\t\t\tthis.offcanvas = new bootstrap.Offcanvas(this.$refs.offcanvas, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tkeyboard: this.keyboard,\n\t\t\t\tscroll: this.scroll\n\t\t\t});\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAllStudiensemesterAndAktOrNext() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext',\n\t\t};\n\t},\n\tgetAll(order = null, start = null)\n\t{\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: 'api/frontend/v1/organisation/studiensemester/getAll',\n\t\t\tparams: { order, start }\n\t\t};\n\t}\n};","export const AbgabeterminStatusLegende = {\n\tname: 'AbgabeterminStatusLegende',\n\ttemplate: `\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerspaetet')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerpasst')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbzugeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipStandardv2')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbgegeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBeurteilungerforderlich')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBestanden')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipNichtBestanden')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t`\n};\nexport default AbgabeterminStatusLegende;","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport BsOffcanvas from '../../Bootstrap/Offcanvas.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport ApiStudiensemester from '../../../api/factory/studiensemester.js';\nimport AbgabeterminStatusLegende from \"./StatusLegende.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { splitMailsHelper } from \"../../../helpers/EmailHelpers.js\"\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport const AbgabetoolAssistenz = {\n\tname: \"AbgabetoolAssistenz\",\n\tcomponents: {\n\t\tAbgabeterminStatusLegende,\n\t\tBsModal,\n\t\tBsOffcanvas,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tInplace: primevue.inplace,\n\t\tTextarea: primevue.textarea,\n\t\tTimeline: primevue.timeline,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabeTypeOptions)\n\t\t}\n\t},\n\tprops: {\n\t\tstg_kz_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tstudiensemesterOptions: null,\n\t\t\tallSem: null,\n\t\t\tcurSem: null,\n\t\t\tnotenOptionFilter: null,\n\t\t\tinplaceToggle: false,\n\t\t\theaderFiltersRestored: false,\n\t\t\tfiltersRestored: false,\n\t\t\tcolLayoutRestored: false,\n\t\t\tsortRestored: false,\n\t\t\tstateRestored: false,\n\t\t\ttimelineProjekt: null,\n\t\t\tselectedStudiengangOption: null,\n\t\t\tstudiengaengeOptions: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tallConfigPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_BETREUER: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenFilterOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tfixtermin: false,\n\t\t\t\tinvertedFixtermin: true,\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitData',\n\t\t\t\tplaceholder: Vue.computed(() => this.$capitalize(this.$p.t('global/noDataAvailable'))),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\trenderVerticalBuffer: 2000,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t// {\n\t\t\t\t\t// \tfield: 'rowSelection',\n\t\t\t\t\t// \tformatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatterParams: {\n\t\t\t\t\t// \t\trowRange: \"active\" // Only toggle the values of the active filtered rows\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \thozAlign:\"center\",\n\t\t\t\t\t// \theaderSort: false,\n\t\t\t\t\t// \tfrozen: true,\n\t\t\t\t\t// \twidth: 40\n\t\t\t\t\t// },\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', headerFilter: false, headerSort: false, formatter: this.formAction, tooltip:false, minWidth: 150, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'student_vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'student_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4studstatus'))), field: 'studienstatus', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4orgform'))), field: 'orgform', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4note'))), field: 'note_bez', headerFilter: true,\n\t\t\t\t\t\t formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerv2'))), field: 'erstbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPre'))), field: 'betreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerVorname'))), field: 'betreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerNachname'))), field: 'betreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPost'))), field: 'betreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerv2'))), field: 'zweitbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPre'))), field: 'zweitbetreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerVorname'))), field: 'zweitbetreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerNachname'))), field: 'zweitbetreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPost'))), field: 'zweitbetreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))),\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tfield: 'prevTermin', formatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: \"abgabetool_2026_02_26\"\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => \n\t\t\t\t{\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\t\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\t\t\t\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\t\t\t\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs) \n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst rowDate = rowVal.luxonDate;\n\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tsammelMailStudent(param) {\n\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailStudentBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tsammelMailBetreuer(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) recipientList.push(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) recipientList.push(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\t// actually not necessary for email clients but looks better for assistenz if we avoid duplicates here\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailBetreuerBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()){\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected){\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\t\t\t\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\t\t\t\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\t\t\t\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\t\t\t\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tgetItemBezeichnung(item){\n\t\t\tif(!item.bezeichnung) return ''\n\t\t\t\n\t\t\treturn item?.bezeichnung?.bezeichnung ?? item?.bezeichnung\n\t\t},\n\t\tgetItemNote(item) {\n\t\t\t// note can be just a number if it is coming from backend\n\t\t\t// if note was just set it is a note option\n\t\t\tif(!item?.note) return ''\n\t\t\tif(item.note?.bezeichnung) return item.note.bezeichnung\n\t\t\t\n\t\t\tconst notenOption = this.notenOptions.find(note => note.note == item.note)\n\t\t\tif(!notenOption) return item.note\n\t\t\t\n\t\t\treturn notenOption.bezeichnung\n\t\t},\n\t\thandleChangeAbgabetypSerientermin(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t},\n\t\tsemesterChanged(e) {\n\t\t\tif(this.$refs.abgabeTable.tabulator) {\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\t\t// TODO: maybe check if existing synergy really works with many filters\n\t\t\t\tconst existing = table.getFilters().filter(f => f.field != 'studiensemester_kurzbz');\n\n\t\t\t\tconst compVal = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '' : e.value.studiensemester_kurzbz\n\t\t\t\tconst compType = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '!=' : '='\n\t\t\t\tconst newFilter = { field: \"studiensemester_kurzbz\", type: compType, value: compVal };\n\n\t\t\t\t// merge and reapply\n\t\t\t\ttable.setFilter([...existing, newFilter]);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\t\t\t\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\t\t\t\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStg(option){\n\t\t\treturn option.kurzbzlang + ' ' + option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStudiensemester(option){\n\t\t\treturn option.studiensemester_kurzbz\n\t\t},\n\t\tgetNotenFilterOptionLabel(option) {\n\t\t\treturn option.bezeichnung\t\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tif(dateParam === null) return ''\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tformAction(cell) {\n\t\t\tconst actionButtons = document.createElement('div');\n\t\t\tactionButtons.className = \"d-flex gap-3\"; // you can keep Bootstrap gap if loaded\n\t\t\tactionButtons.style.display = \"flex\";\n\t\t\tactionButtons.style.alignItems = \"stretch\"; // buttons stretch to full height\n\t\t\tactionButtons.style.justifyContent = \"center\";\n\t\t\tactionButtons.style.height = \"100%\"; // full grid cell height\n\n\t\t\tconst val = cell.getValue();\n\n\t\t\tconst createButton = (iconClass, titleKey, clickHandler) => {\n\t\t\t\tconst btn = document.createElement('button');\n\t\t\t\tbtn.className = 'btn btn-outline-secondary';\n\t\t\t\tbtn.style.display = \"flex\";\n\t\t\t\tbtn.style.alignItems = \"center\"; // center icon vertically\n\t\t\t\tbtn.style.justifyContent = \"center\"; // center icon horizontally\n\t\t\t\tbtn.style.height = \"100%\"; // fill parent container height\n\t\t\t\tbtn.style.aspectRatio = \"1 / 1\"; // keep square shape (optional)\n\t\t\t\tbtn.style.padding = \"0\"; // remove extra padding for compactness\n\t\t\t\tif(iconClass == 'fa fa-timeline') btn.style.transform = \"rotate(90deg)\";\n\t\t\t\tbtn.innerHTML = ``;\n\t\t\t\tbtn.title = this.$capitalize(this.$p.t(titleKey));\n\t\t\t\tbtn.addEventListener('click', (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tclickHandler();\n\t\t\t\t});\n\t\t\t\treturn btn;\n\t\t\t};\n\n\t\t\tactionButtons.append(\n\t\t\t\tcreateButton('fa fa-folder-open', 'abgabetool/c4details', () => this.setDetailComponent(val)),\n\t\t\t\tcreateButton('fa fa-timeline', 'abgabetool/c4termineTimeLine', () => this.openTimeline(val))\n\t\t\t);\n\n\t\t\treturn actionButtons;\n\t\t},\n\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tconst pids = this.selectedData?.map(projekt => projekt.projektarbeit_id)\n\t\t\t\n\t\t\tconst preserveSelected = [...this.selectedData]\n\t\t\t\n\t\t\tthis.saving = true\n\t\t\tthis.serienTermin.fixtermin = !this.serienTermin.invertedFixtermin\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tpids,\n\t\t\t\tthis.serienTermin.fixtermin\n\t\t\t)).then(res => {\n\t\t\t\t\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// put new abgaben into projektarbeiten\n\t\t\t\tconst newAbgaben = res.data\n\t\t\t\tpids.forEach(pid => {\n\t\t\t\t\tconst abgabe = newAbgaben.find(abgabe => abgabe.projektarbeit_id == pid)\n\t\t\t\t\t\n\t\t\t\t\tconst pa = this.projektarbeiten.find(pa => pa.projektarbeit_id == pid)\n\t\t\t\t\n\t\t\t\t\tabgabe.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == abgabe.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tpa.abgabetermine.push(abgabe)\n\t\t\t\t\tpa.abgabetermine.sort((a, b) => new Date(a.datum) - new Date(b.datum))\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\t// reset selection to empty\n\t\t\t\t// this.$refs.abgabeTable.tabulator.deselectRow()\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator;\n\t\t\t\tconst scrollX = table.rowManager.scrollLeft;\n\t\t\t\tconst scrollY = table.rowManager.scrollTop;\n\t\t\t\t\n\t\t\t\tconst mappedData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\t\ttable.setData(mappedData)\n\t\t\t\ttable.redraw(true)\n\n\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\tif(table) {\n\t\t\t\t\t\ttable.scrollLeft = scrollX;\n\t\t\t\t\t\ttable.scrollTop = scrollY;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t\tthis.selectedData = preserveSelected\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tmapProjekteToTableData(projekte) {\n\t\t\t// const now = luxon.DateTime.now();\n\t\t\treturn projekte.map(projekt => {\n\t\t\t\t\n\t\t\t\t// in assistenz context every projektarbeit should be allowed to be selected i guess\n\t\t\t\tprojekt.selectable = true;\n\t\t\t\t\n\t\t\t\tprojekt.prevTermin = null;\n\t\t\t\tprojekt.nextTermin = null;\n\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\n\t\t\t\tif(this.notenOptions && projekt.note) {\n\t\t\t\t\tconst opt = this.notenOptions.find(n => n.note == projekt.note)\n\t\t\t\t\n\t\t\t\t\t// TODO: mehrsprachig englisch\n\t\t\t\t\tprojekt.note_bez = opt.bezeichnung\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tabgabetermine: projekt.abgabetermine,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\terstbetreuer: this.buildErstbetreuer(projekt),\n\t\t\t\t\tzweitbetreuer: this.buildZweitbetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tconst pa = this.projektarbeiten.find(projektarbeit => projektarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tif(typeof termin.note !== 'object') {\n\t\t\t\t\ttermin.note = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\t}\n\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && termin.note) {\n\t\t\t\t\ttermin.noteBackend = termin.note\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttermin.file = []\n\n\t\t\t\t// assistenz should be able to edit every abgabe\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\n\t\t\t\t// assistenz are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = paIsBenotet ? false : !termin.abgabedatum\n\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tconst vorname = pa.vorname ?? pa.student_vorname\n\t\t\tconst nachname = pa.nachname ?? pa.student_nachname\n\t\t\tpa.student = `${vorname} ${nachname}`\n\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t},\n\t\topenTimeline(val) {\n\t\t\tconst projekt = this.projektarbeiten.find(p => p.projektarbeit_id == val.projektarbeit_id)\n\t\t\tif(!projekt) {\n\n\t\t\t\tthis.$fhcAlert.alertInfo('Keine projektarbeit gefunden')\n\t\t\t\t\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t// show note only on termine with abgabetypen which are benotbar\n\t\t\t\tconst terminTypOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == termin.paabgabetyp_kurzbz)\n\t\t\t\ttermin.benotbar = terminTypOpt.benotbar \n\t\t\t})\n\t\t\tthis.timelineProjekt = projekt\n\t\t\tthis.$refs.drawer.show()\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\ttimelineFormatter() {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\t\t\t\t\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' + \n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\treturn 'mailto:' + projekt.student_uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.student_uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\n\t\t},\n\t\tbuildErstbetreuer(projekt) {\n\t\t\tif(projekt.erstbetreuer_full_name) return projekt.erstbetreuer_full_name\n\t\t\treturn projekt.betreuer_vorname + ' ' + projekt.betreuer_nachname\n\t\t},\n\t\tbuildZweitbetreuer(projekt) {\n\t\t\treturn projekt.zweitbetreuer_full_name ?? ''\n\t\t},\n\t\tasync setupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.getProjektarbeitenForStudiengang(\n\t\t\t\tthis.selectedStudiengangOption.studiengang_kz,\n\t\t\t\tthis.notenOptionFilter?.benotet ?? 0\n\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback()\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.loading=false\n\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tawait this.allConfigPromise\n\t\t\t\n\t\t\t// called through notenOptionFilter/selectedStudiengangOption watcher on startup\n\t\t\t// this.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER) {\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailBetreuerv3', [this.uniqueBetreuerEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailBetreuer\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueBetreuerEmailCount() {\n\t\t\tconst emails = new Set();\n\t\t\t\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) emails.add(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) emails.add(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\tselectedStudiengangOption(newVal, oldVal) {\n\t\t\t// implicitely avoids juggling around promises for created api calls,\n\t\t\t// since we need note & stg flags for loadProjektarbeiten\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tnotenOptionFilter(newVal) {\n\t\t\t// that single where clause is worth a decent load time so rather not filter tabulator but just \n\t\t\t// adapt the qry\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tselectedData(newVal) {\n\t\t\tconst table = this.$refs.abgabeTable?.tabulator\n\t\t\tif(!table) return\n\n\t\t\tconst allRows = table.getRows();\n\n\t\t\tnewVal.forEach(selected => {\n\t\t\t\tconst row = allRows.find(r => {\n\t\t\t\t\tconst data = r.getData()\n\t\t\t\t\tif (data.projektarbeit_id == selected.projektarbeit_id) return r\n\t\t\t\t}) \t\n\t\t\t\t\n\t\t\t\trow.select()\n\t\t\t\tconst cb = row.getElement().children[0]?.children[0]?.children[0]\n\t\t\t\tif(cb) cb.checked = true\n\t\t\t})\n\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.loading = true\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tconst requests = [\n\t\t\tthis.$api.call(ApiAbgabe.getConfig()),\n\t\t\tthis.$api.call(ApiAbgabe.getStudiengaenge()),\n\t\t\tthis.$api.call(ApiStudiensemester.getAllStudiensemesterAndAktOrNext()),\n\t\t\tthis.$api.call(ApiAbgabe.getNoten()),\n\t\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen())\n\t\t];\n\n\t\tthis.allConfigPromise = Promise.allSettled(requests)\n\t\t\t.then((results) => {\n\t\t\t\t// results is an array of { status: 'fulfilled'|'rejected', value?: any, reason?: any }\n\n\t\t\t\t// 1. Config\n\t\t\t\tif (results[0].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[0].value;\n\t\t\t\t\tthis.turnitin_link = res.data?.turnitin_link;\n\t\t\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER;\n\t\t\t\t}\n\n\t\t\t\t// 2. Studiengänge\n\t\t\t\tif (results[1].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[1].value;\n\t\t\t\t\tthis.studiengaengeOptions = res.data;\n\t\t\t\t\tif (this.studiengaengeOptions?.length) {\n\t\t\t\t\t\tthis.selectedStudiengangOption = this.stg_kz_prop\n\t\t\t\t\t\t\t? res.data.find(stgOpt => stgOpt.studiengang_kz == this.stg_kz_prop)\n\t\t\t\t\t\t\t: res.data[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 3. Studiensemester\n\t\t\t\tif (results[2].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[2].value;\n\t\t\t\t\tthis.allSem = res.data[0];\n\t\t\t\t\tconst all = { studiensemester_kurzbz: this.$p.t('abgabetool/c4all') };\n\t\t\t\t\tthis.curSem = all;\n\t\t\t\t\tthis.studiensemesterOptions = [all, ...this.allSem];\n\t\t\t\t}\n\n\t\t\t\t// 4. Noten\n\t\t\t\tif (results[3].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[3].value;\n\t\t\t\t\tif (res.meta?.status === 'success') {\n\t\t\t\t\t\tthis.notenOptions = res.data[0];\n\t\t\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.allowedNotenFilterOptions = [\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/keineNoteEingetragen')), benotet: 0 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/c4benotet')), benotet: 1 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/showAll')), benotet: -1 }\n\t\t\t\t\t];\n\t\t\t\t\tthis.notenOptionFilter = this.allowedNotenFilterOptions[0];\n\t\t\t\t}\n\n\t\t\t\t// 5. Abgabetypen\n\t\t\t\tif (results[4].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[4].value;\n\t\t\t\t\tthis.abgabeTypeOptions = res.data;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.loading = false;\n\t\t\t});\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolAssistenz;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\n\nexport const DeadlineOverview = {\n\tname: \"DeadlineOverview\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t},\n\tprops: {\n\t\tperson_uid_prop: {\n\t\t\tdefault: null\t\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfullName: null, // TODO: fetch this somewhere\n\t\t\tdeadlines: null,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tdeadlineTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zieldatumv2'))), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4fixterminv4'))), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabetyp'))), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabekurzbzv2'))), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('person/studentIn'))), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'semester', formatter: this.centeredTextFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tdeadlineTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"cellClick\",\n\t\t\t\t\thandler: async (e, cell) => {\n\n\t\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tloadDeadlines() {\n\t\t\tthis.$api.call(ApiAbgabe.fetchDeadlines(this.person_uid_prop ?? null))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tsetupData(data) {\n\t\t\tthis.deadlines = data\n\t\t\t\n\t\t\tthis.deadlines.forEach(dl => {\n\t\t\t\tdl.student = (dl.stud_titelpre ? (dl.stud_titelpre + ' ') :'') + dl.stud_vorname + ' ' + dl.stud_nachname + (dl.stud_titelpost ? (' ' + dl.stud_titelpost) :'')\n\t\t\t\tdl.fixterminstring = dl.fixtermin ? this.$p.t('abgabetool/c4yes') : this.$p.t('abgabetool/c4no')\n\t\t\t})\n\n\t\t\tthis.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns)\n\t\t\tthis.$refs.deadlineTable.tabulator.setData(this.deadlines);\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.deadlineTableOptions.height = window.visualViewport.height - rect.top - 30\n\t\t\tthis.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadDeadlines()\n\t\t\tthis.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t

    {{$p.t('abgabetool/deadlinesTitle')}} {{ fullName ? ('-' + fullName) : ''}}

    \n\t\t
    \n\t\t\t\n\t\t \n `,\n};\n\nexport default DeadlineOverview;\n","import LvUebersicht from \"../Mylv/LvUebersicht.js\";\n\n\nexport default {\n\tdata(){\n\t\treturn {\n\t\t\tstudienSemester :[],\n\t\t\tselectedStudiensemester: null,\n\t\t\tstudiengaenge:[],\n\t\t\tselectedStudiengang:null,\n\t\t\tstudienOrdnung: [],\n\t\t\tselectedStudienordnung: null,\n\t\t\tsemester:[],\n\t\t\tselectedSemester:null,\n\t\t\tlehrveranstaltungen: [],\n\t\t\tselectedLehrveranstaltung: null,\n\t\t\tmenu:null,\n\t\t}\n\t},\n\tprovide(){\n\t\treturn {\n\t\t\tstudium_studiengang : Vue.computed(()=> this.selectedStudiengang),\n\t\t\tstudium_studiensemester: Vue.computed(() => this.selectedStudiensemester),\n\t\t\tstudium_semester: Vue.computed(() => this.selectedSemester),\n\t\t\tstudium_studienordnung: Vue.computed(() => this.selectedStudienordnung),\n\n\t\t}\n\t},\n\tcomponents: {\n\t\tLvUebersicht,\n\t},\n\twatch:{\n\t\tselectedStudiensemester: function(newVal, oldVal){\n\t\t\tif(newVal && newVal != oldVal){\n\t\t\t\tconst studiensemester =this.getDataFromLocalStorage(\"sudiensemester\");\n\t\t\t\tif (newVal && (!studiensemester || (studiensemester && studiensemester != newVal))){\n\t\t\t\t\tthis.storeDataToLocalStorage(\"sudiensemester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedSemester: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst semester = this.getDataFromLocalStorage(\"semester\");\n\t\t\t\tif (!semester || (semester && semester != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"semester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudiengang: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studiengang = this.getDataFromLocalStorage(\"studiengang\");\n\t\t\t\tif (!studiengang || (studiengang && studiengang != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studiengang\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudienordnung: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studienordnung = this.getDataFromLocalStorage(\"studienordnung\");\n\t\t\t\tif (!studienordnung || (studienordnung && studienordnung != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studienordnung\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods:{\n\t\tchangeStudiensemester(value){\n\t\t\tlet studiensemester = this.$refs.studiensemester;\n\t\t\tstudiensemester.selectedIndex = (studiensemester.selectedIndex + value + studiensemester.options.length) % studiensemester.options.length;\n\t\t\tthis.changeSelectedStudienSemester(studiensemester.value);\n\t\t},\n\t\tchangeStudiengang(value) {\n\t\t\tlet studiengang = this.$refs.studiengaenge;\n\t\t\tstudiengang.selectedIndex = (studiengang.selectedIndex + value + studiengang.options.length) % studiengang.options.length;\n\t\t\tthis.changeSelectedStudienGang(studiengang.value);\n\t\t},\n\t\tchangeSemester(value) {\n\t\t\tlet semester = this.$refs.semester;\n\t\t\tsemester.selectedIndex = (semester.selectedIndex + value + semester.options.length) % semester.options.length;\n\t\t\tthis.changeSelectedSemester(semester.value);\n\t\t},\n\t\tchangeStudienordnung(value) {\n\t\t\tlet studienordnung = this.$refs.studienordnung;\n\t\t\tlet newSelectIndex = (studienordnung.selectedIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\tif(studienordnung.options[newSelectIndex].disabled){\n\t\t\t\tnewSelectIndex = (newSelectIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\t}\n\t\t\tstudienordnung.selectedIndex = newSelectIndex;\n\t\t\tthis.changeSelectedStudienPlan(studienordnung.value);\n\t\t},\n\t\t\n\t\tstoreDataToLocalStorage(key,value){\n\t\t\tlocalStorage.setItem(key, value);\n\t\t},\n\t\tgetDataFromLocalStorage(key){\n\t\t\tconst value = localStorage.getItem(key);\n\t\t\treturn value;\n\t\t},\n\t\tchangeSelectedStudienSemester(studiensemester_kurzbz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester_kurzbz, this.selectedStudiengang, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienGang(studiengang_kz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, studiengang_kz, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedSemester(semester) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, semester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienPlan(studienplan_id) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, this.selectedSemester, studienplan_id)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\topenLvUebersicht(lehrveranstaltung) {\n\t\t\tthis.selectedLehrveranstaltung = lehrveranstaltung;\n\t\t\t//convert lehrveranstaltung properties for compatibility with LvPlan LvModal\n\t\t\tthis.selectedLehrveranstaltung.type =\"lehreinheit\";\n\t\t\tthis.selectedLehrveranstaltung.lehreinheit_id = this.selectedLehrveranstaltung.lehrveranstaltung_id;\n\t\t\tif(this.selectedLehrveranstaltung){\n\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tsortStudienSemester(studienSemester){\n\t\t\tlet regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tstudienSemester.sort((sem1,sem2)=>{\n\t\t\t\tlet [sem1Match, sem1Semester, sem1Year] = sem1.studiensemester_kurzbz.match(regex);\n\t\t\t\tlet [sem2Match, sem2Semester, sem2Year] = sem2.studiensemester_kurzbz.match(regex);\n\t\t\t\tif(sem1Year == sem2Year){\n\t\t\t\t\treturn sem1Semester > sem2Semester? -1:1;\n\t\t\t\t}\n\t\t\t\treturn sem1Year > sem2Year? -1:1;\n\t\t\t})\n\t\t},\n\t\tsetHash(val) {\n\t\t\t// TODO: make this a router param to enable history\n\t\t\tlocation.hash = val;\n\t\t},\n\t\textractPropertyValues(res){\n\t\t\tlet { studienSemester, studiengang, semester, studienplan, lehrveranstaltungen } = res;\n\t\t\tthis.sortStudienSemester(studienSemester.all);\n\t\t\tthis.studienSemester = studienSemester.all;\n\t\t\tthis.selectedStudiensemester = studienSemester.preselected.studiensemester_kurzbz;\n\n\t\t\tthis.studiengaenge = studiengang.all;\n\t\t\tthis.selectedStudiengang = studiengang.preselected?.studiengang_kz;\n\n\t\t\tthis.semester = semester.all;\n\t\t\tthis.selectedSemester = semester?.preselected;\n\n\t\t\tthis.studienOrdnung = studienplan.all;\n\t\t\tthis.selectedStudienordnung = studienplan.preselected?.studienplan_id;\n\n\t\t\tthis.lehrveranstaltungen = lehrveranstaltungen;\n\t\t\tthis.lehrveranstaltungen.sort((lv1, lv2) => {\n\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.lehrveranstaltungen.forEach((lehrveranstaltung)=>{\n\t\t\t\tlehrveranstaltung.lehrveranstaltungen.sort((lv1,lv2)=>{\n\t\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\tstudienordnungTitel(studienordnung){\n\t\t\tif(!studienordnung) return \"\";\n\t\t\treturn `${studienordnung?.bezeichnung}-${studienordnung?.orgform_kurzbz} ( ${studienordnung?.orgform_bezeichnung}, ${studienordnung?.sprache} )`;\n\t\t},\n\t\tstudiengangTitel(studiengang) {\n\t\t\tif (!studiengang) return \"\";\n\t\t\treturn `${studiengang?.kurzbzlang} (${studiengang?.bezeichnung})`;\n\t\t},\n\t\tstudiensemesterTitel(studiensemester){\n\t\t\tif (!studiensemester) return \"\";\n\t\t\tlet studiensemester_regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tlet match = studiensemester.match(studiensemester_regex);\n\t\t\tswitch(match[1]){\n\t\t\t\tcase \"WS\":\n\t\t\t\t\treturn `Wintersemester ${match[2]}`;\n\t\t\t\tcase \"SS\":\n\t\t\t\t\treturn `Sommersemester ${match[2]}`;\t\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${studiensemester}`;\n\t\t\t}\n\t\t}\n\t},\n\n\tcomputed:{\n\t\tselectedLehrveranstaltungTitel(){\n\t\t\tconst studiengang = this.studiengaenge.find((studiengang) => studiengang.studiengang_kz == this.selectedStudiengang);\n\t\t\treturn `${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${studiengang.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`;\n\t\t},\n\t\tcomputedStudienOrdnung(){\n\t\t\tif(!this.studienOrdnung) return null;\n\t\t\treturn Object.values(this.studienOrdnung).reduce((carry, item)=>{\n\t\t\t\tif(!carry[item.bezeichnung]){\n\t\t\t\t\tcarry[item.bezeichnung] = [];\n\t\t\t\t}\n\t\t\t\tcarry[item.bezeichnung].push(item);\n\t\t\t\treturn carry;\n\t\t\t},{});\n\t\t},\n\t\tcomputedStudienOrdnungSelectValues() {\n\t\t\tif (!this.computedStudienOrdnung) return null;\n\t\t\tlet result = [];\n\t\t\tObject.entries(this.computedStudienOrdnung).forEach(([key,value])=>{\n\t\t\t\tresult.push({\n\t\t\t\t\tbezeichnung: `Studienordnung: ${key}`,\n\t\t\t\t\tdisabled: true,\n\t\t\t\t});\n\t\t\t\tvalue.forEach((studienplan)=>{\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tstudienplan:studienplan,\n\t\t\t\t\t\tdiabled: false,\n\t\t\t\t\t\tbezeichnung: `${studienplan?.bezeichnung}-${studienplan?.orgform_kurzbz} ( ${studienplan?.orgform_bezeichnung}, ${studienplan?.sprache} )`\n\t\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t},\n\t\n\tcreated(){\n\n\t\tconst studiensemester = this.getDataFromLocalStorage(\"sudiensemester\") ?? undefined;\n\t\tconst studiengang = JSON.parse(this.getDataFromLocalStorage(\"studiengang\")) ?? undefined;\n\t\tconst semester = this.getDataFromLocalStorage(\"semester\") ?? undefined;\n\t\tconst studienordnung = JSON.parse(this.getDataFromLocalStorage(\"studienordnung\")) ?? undefined;\n\n\t\t// only fetch default data if no data is stored in the local storage\n\t\t\n\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester, studiengang, semester, studienordnung)\n\t\t.then(data => data.data)\n\t\t.then(res => {\n\t\t\tthis.extractPropertyValues(res);\n\t\t})\n\n\t},\n\ttemplate: `\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t`\n};","\nexport default {\n\t\t\n\tloadRenderers() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/RendererLoader/GetRenderers',\n\t\t\tparams: {\n\t\t\t}\n\t\t};\n\t},\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tinfo(app, path) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/RouteInfo/info',\n\t\t\tparams: {\n\t\t\t\tapp: app,\n\t\t\t\tpath: path\n\t\t\t}\n\t\t};\n\t}\n};","import FhcDashboard from '../../components/Dashboard/Dashboard.js';\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\nimport Theme from '../../plugins/Theme.js';\nimport contrast from '../../directives/contrast.js';\nimport {setScrollbarWidth} from \"../../helpers/CssVarCalcHelpers.js\";\nimport LvPlan from \"../../components/Cis/LvPlan/Lehrveranstaltung.js\";\nimport MyLvPlan from \"../../components/Cis/LvPlan/Personal.js\";\nimport MylvStudent from \"../../components/Cis/Mylv/Student.js\";\nimport Profil from \"../../components/Cis/Profil/Profil.js\";\nimport Raumsuche from \"../../components/Cis/Raumsuche/Raumsuche.js\";\nimport CmsNews from \"../../components/Cis/Cms/News.js\";\nimport CmsContent from \"../../components/Cis/Cms/Content.js\";\nimport Info from \"../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js\";\nimport RoomInformation, {DEFAULT_MODE_RAUMINFO} from \"../../components/Cis/Mylv/RoomInformation.js\";\nimport AbgabetoolStudent from \"../../components/Cis/Abgabetool/AbgabetoolStudent.js\";\nimport AbgabetoolMitarbeiter from \"../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js\";\nimport AbgabetoolAssistenz from \"../../components/Cis/Abgabetool/AbgabetoolAssistenz.js\";\nimport DeadlineOverview from \"../../components/Cis/Abgabetool/DeadlineOverview.js\";\nimport Studium from \"../../components/Cis/Studium/Studium.js\";\n\nimport ApiRenderers from '../../api/factory/renderers.js';\nimport ApiRouteInfo from '../../api/factory/routeinfo.js';\nimport {capitalize} from \"../../helpers/StringHelpers.js\";\n\nconst ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\\/\\/)(.*?\\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;\n\nconst router = VueRouter.createRouter({\n\thistory: VueRouter.createWebHistory(`/${ciPath}`),\n\troutes: [\n\t\t{\n\t\t\tpath: `/Cis/Studium`,\n\t\t\tname: 'Studium',\n\t\t\tcomponent: Studium,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil/View/:uid`,\n\t\t\tname: 'ProfilView',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil`,\n\t\t\tname: 'Profil',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Student/:student_uid_prop?`,\n\t\t\tname: 'AbgabetoolStudent',\n\t\t\tcomponent: AbgabetoolStudent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Mitarbeiter`,\n\t\t\tname: 'AbgabetoolMitarbeiter',\n\t\t\tcomponent: AbgabetoolMitarbeiter,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Assistenz/:stg_kz_prop?`,\n\t\t\tname: 'AbgabetoolAssistenz',\n\t\t\tcomponent: AbgabetoolAssistenz,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Deadlines/:person_uid_prop?`,\n\t\t\tname: 'DeadlineOverview',\n\t\t\tcomponent: DeadlineOverview,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Raumsuche`,\n\t\t\tname: 'Raumsuche',\n\t\t\tcomponent: Raumsuche,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\tpath: \"/CisVue/Cms/getRoomInformation/:ort_kurzbz\",\n\t\t\tname: \"RoomInformationOld\",\n\t\t\tcomponent: RoomInformation,\n\t\t\tredirect: (to) => {\n\t\t\t\treturn { // redirect to longer Rauminfo url and map params\n\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\tparams: { // in this case always populate other params since they are not optional\n\t\t\t\t\t\tort_kurzbz: to.params.ort_kurzbz,\n\t\t\t\t\t\tmode: DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\tfocus_date: new Date().toISOString().split(\"T\")[0]\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz`,\n\t\t\tname: 'RoomInformation',\n\t\t\tcomponent: RoomInformation,\n\t\t\tprops: (route) => { // validate and set mode/focus date if for some reason missing\n\t\t\t\tconst validModes = [\"Month\", \"Week\", \"Day\"];\n\n\t\t\t\t// check mode string\n\t\t\t\tconst mode = route.params.mode &&\n\t\t\t\tvalidModes.includes(route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase())\n\t\t\t\t\t? route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase()\n\t\t\t\t\t: DEFAULT_MODE_RAUMINFO;\n\n\t\t\t\t// default to today date if not provided\n\t\t\t\tconst d = new Date(route.params.focus_date)\n\t\t\t\tconst focus_date = !isNaN(d) ? route.params.focus_date : new Date().toISOString().split(\"T\")[0];\n\n\t\t\t\t// for consistency reasons format the props into one object but actually use a new name to we dont collide with\n\t\t\t\t// existing viewData declaration written from codeigniter 3 into routerview tag\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\tbeforeEnter: (to, from, next) => {\n\t\t\t\t// missing mode or focus_date -> set defaults\n\t\t\t\tif (!to.params.mode || !to.params.focus_date) {\n\t\t\t\t\tnext({\n\t\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tmode: to.params.mode || DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\t\tfocus_date: to.params.focus_date || new Date().toISOString().split(\"T\")[0],\n\t\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/Content/:content_id`,\n\t\t\tname: 'Content',\n\t\t\tcomponent: CmsContent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/News`,\n\t\t\tname: 'News',\n\t\t\tcomponent: CmsNews,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/:studiensemester?`,\n\t\t\tname: 'MyLv',\n\t\t\tcomponent: MylvStudent,\n\t\t\tprops: true,\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id`,\n\t\t\tname: 'LvInfo',\n\t\t\tcomponent: Info,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\t// only trigger on first param being numeric to avoid paths like \"LvPlan/Month\" entering here\n\t\t\tpath: \"/Cis/LvPlan/:lv_id(\\\\d+)\", \n\t\t\tname: \"LvPlanOld\",\n\t\t\tcomponent: LvPlan,\n\t\t\tredirect(to) {\n\t\t\t\tconst route = Vue.unref(router.currentRoute);\n\t\t\t\tconst { mode, focus_date } = route.params; // keep mode and focus_date if available\n\t\t\t\treturn { // redirect to longer LvPlan url and map params\n\t\t\t\t\tname: \"LvPlan\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tlv_id: to.params.lv_id\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/LvPlan/:mode?/:focus_date?/:lv_id?`,\n\t\t\tname: 'LvPlan',\n\t\t\tcomponent: LvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLvPlan/:mode?/:focus_date?`,\n\t\t\tname: 'MyLvPlan',\n\t\t\tcomponent: MyLvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis4`,\n\t\t\tname: 'Cis4',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: `/`,\n\t\t\tname: 'FhcDashboard',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: '/:pathMatch(.*)*',\n\t\t\tname: 'Fallback',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t\tredirect: () => {\n\t\t\t\treturn {\n\t\t\t\t\tname: \"Cis4\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tdashboard: 'CIS'\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t]\n})\n\nconst app = Vue.createApp({\n\tname: 'FhcApp',\n\tdata: () => ({\n\t\tappSideMenuEntries: {},\n\t\trenderers: null,\n\t}),\n\tcomponents: {},\n\tcomputed: {\n\t\tisMobile() {\n\t\t\tconst smallScreen = window.matchMedia(\"(max-width: 767px)\").matches;\n\t\t\tconst touchCapable = (\"ontouchstart\" in window) || navigator.maxTouchPoints > 0;\n\t\t\treturn smallScreen;// && touchCapable;\n\t\t}\t\n\t},\n\tprovide() {\n\t\treturn { // provide injectable & watchable language property\n\t\t\tlanguage: Vue.computed(() => this.$p.user_language),\n\t\t\trenderers: Vue.computed(() => this.renderers),\n\t\t\tisMobile: this.isMobile\n\t\t}\t\n\t},\n\tmethods: {\n\t\tisInternalRoute(href) {\n\t\t\tconst internalBase = window.location.origin\n\t\t\treturn href.startsWith(internalBase);\n\t\t},\n\t\thandleClick(event) {\n\t\t\tconst target = event.target.closest('a');\n\n\t\t\tif(target?.id == 'skiplink') return\n\t\t\tif (target && this.isInternalRoute(target.href)) {\n\t\t\t\tconst url = new URL(target.href)\n\t\t\t\t\n\t\t\t\tconst path = url.pathname\n\t\t\t\tconst base = this.$router.options.history.base\n\t\t\t\tconst route = path.replace(base, '') || '/'\n\n\t\t\t\t// let click event propagate normally if we dont route internally\n\t\t\t\tconst res = this.$router.resolve(route)\n\t\t\t\tif(!res?.matched?.length || res.name === 'Fallback') return\n\t\t\t\t\n\t\t\t\tevent.preventDefault(); // Prevent browser navigation\n\t\t\t\t\n\t\t\t\tif(this.isMobile) { // toggle the menu\n\t\t\t\t\tconst navMain = document.getElementById('nav-main');\n\t\t\t\t\t// fix unwanted toggle from off to on for some links on mobile\n\t\t\t\t\tif(navMain.classList.contains('show')){\n\t\t\t\t\t\tdocument.getElementById('nav-main-btn').click();\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.$router.push(route);\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\tasync created(){\n\t\t\n\t\tawait this.$api\n\t\t\t.call(ApiRenderers.loadRenderers())\n\t\t\t.then(res => res.data)\n\t\t\t.then(data => {\n\t\t\t\tfor (let rendertype of Object.keys(data)) {\n\t\t\t\t\tlet modalTitle = null;\n\t\t\t\t\tlet modalContent = null;\n\t\t\t\t\tlet calendarEvent = null;\n\t\t\t\t\tif (data[rendertype].modalTitle)\n\t\t\t\t\t\tmodalTitle = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalTitle)));\n\t\t\t\t\tif (data[rendertype].modalContent) \t\n\t\t\t\t\t\tmodalContent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalContent)));\n\t\t\t\t\tif (data[rendertype].calendarEvent) \t\n\t\t\t\t\t\tcalendarEvent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].calendarEvent)));\n\n\t\t\t\t\tif (data[rendertype].calendarEventStyles){\n\t\t\t\t\t\tvar head = document.head;\n\t\t\t\t\t\tif(!head.querySelector(`link[href=\"${data[rendertype].calendarEventStyles}\"]`)){\n\t\t\t\t\t\t\tvar link = document.createElement(\"link\");\n\t\t\t\t\t\t\tlink.type = \"text/css\";\n\t\t\t\t\t\t\tlink.rel = \"stylesheet\";\n\t\t\t\t\t\t\tlink.href = data[rendertype].calendarEventStyles;\n\t\t\t\t\t\t\thead.appendChild(link);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(this.renderers === null) {\n\t\t\t\t\t\tthis.renderers = {};\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.renderers[rendertype]) {\n\t\t\t\t\t\tthis.renderers[rendertype] = {}\n\t\t\t\t\t}\n\t\t\t\t\tthis.renderers[rendertype].modalTitle = modalTitle;\n\t\t\t\t\tthis.renderers[rendertype].modalContent = modalContent;\n\t\t\t\t\tthis.renderers[rendertype].calendarEvent = calendarEvent;\n\t\t\t\t}\n\t\t\t});\n\t},\n\tmounted() {\n\t\tdocument.addEventListener('click', this.handleClick);\n\t\t\n\t},\n\tbeforeUnmount() {\n\t\tdocument.removeEventListener('click', this.handleClick);\n\t},\n});\n\n// kind of a bandaid for bad css on some pages to avoid horizontal scroll\nsetScrollbarWidth();\napp.config.globalProperties.$capitalize = capitalize;\n\nFhcApps.router.makeExtendable(router);\nFhcApps.makeExtendable(app);\n\napp.use(router);\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.directive('tooltip', primevue.tooltip);\napp.use(PluginsPhrasen);\napp.use(Theme);\napp.directive('contrast', contrast);\napp.mount('#fhccontent');\n\nrouter.afterEach((to, from, failure) => {\n\tapp.config.globalProperties.$api.call(ApiRouteInfo.info('cis4', to.fullPath));\n});","// Create a temporary div element, set styles to ensure it's scrollable and off-screen, get scrollbar width from that\nfunction getScrollbarWidth() {\n\tconst div = document.createElement('div');\n\n\tdiv.style.position = 'absolute';\n\tdiv.style.top = '-9999px';\n\tdiv.style.width = '100px';\n\tdiv.style.height = '100px';\n\tdiv.style.overflow = 'scroll';\n\n\tdocument.body.appendChild(div);\n\tconst scrollbarWidth = div.offsetWidth - div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn scrollbarWidth;\n}\n\n// Detect the browser and set a CSS variable for the scrollbar width since chrome scrollbars mess with 100vw/vh css\nexport function setScrollbarWidth() {\n\tconst isChromium = /Chrome/.test(navigator.userAgent);\n\tconst isFirefox = /Firefox/.test(navigator.userAgent);\n\n\tif (isChromium) {\n\t\tconst width = getScrollbarWidth() + 'px';\n\t\tdocument.body.style.setProperty('--scrollbar-width', width); // Set the value for Chrome\n\t} else if (isFirefox) {\n\t\tdocument.body.style.setProperty('--scrollbar-width', '0px'); // Set the value for Firefox or adjust as needed\n\t}\n}","export function capitalize(string) {\n\tif (!string) return '';\n\treturn string[0].toUpperCase() + string.slice(1);\n}"],"names":["BsModal","name","data","modal","fullscreen","props","backdrop","type","Boolean","String","default","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","Object","headerClass","bodyClass","footerClass","allowFullscreenExpand","emits","methods","dispose","this","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","$emit","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","undefined","includedPrimevue","primevue","Promise","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","then","Phrasen$1","Phrasen","mount","appendChild","template","Alert","components","mixins","onHideBsModal","Function","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsConfirm$1","BsAlert","GridItem","inject","item","active","dragAction","dragging","computed","registerDragAction","evt","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","length","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","console","error","place","pinned","originalFrame","isArray","some","occupiersData","map","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","Number","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","get","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","keys","current_item","max_x","max_y","occupied_y","occupied_x","placeholder","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","widget_id","watch","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","CachedWidgetLoader","getWidget","loadWidget","axios","params","retval","catch","response","setPath","path","DashboardItem","HeightTransition","onEnter","el","done","scrollHeight","onLeave","component","arguments","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","call","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","created","import","file","$options","WidgetIcon","required","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","widgets","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","BsConfirm","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","ApiDashboard","getViewData","method","url","FhcDashboard","dashboard","viewData","uid","timezone","sections","viewDataInternal","apiurl","widgetAdd","section_name","db","JSON","parse","err","widgetpicker","Date","valueOf","loading","section","post","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","preset","widgetRemove","loadCategory","section1","section2","beforeMount","$api","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$2","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","detail","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","theme_name","theme","theme_modes","modes","toggleTheme","documentElement","setAttribute","stylesheet","attributes","href","localStorage","setItem","Theme","initializeTheme","getItem","$theme","switchTheme","rgbToHex","hex","getContrastYIQ","hexcolor","substring","contrast","element","binding","bgColor","backgroundColor","rgbRegEx","RegExp","isRgb","r","g","hexColor","color","TYPE_DEFINITION","dragIcon","extras","vevent","student","VALID_TYPES","isValidDragObject","substr","extra","getValidTransferData","allowedTypes","strict","getTransferData","_error","types","base_type","collection","DragAndDrop","isValidTransferData","convertToValidDragObject","converted","sorted","found","typedef","setTransferData","validDragObject","dragElements","icon","label","iconContainer","className","textContent","boxShadow","itemContainer","requestAnimationFrame","setData","eventHasTypes","bindDragEnterLeave","skipLeave","skipLeaveParent","init","globalDragenter","globalDragleave","globalDrop","removeEventListener","cleanup","wasDropped","CalDnd","vnode","arg","cancelable","bubbles","offsetX","offsetWidth","offsetY","offsetHeight","originalEvent","hitbox","pos","pageX","scrollLeft","pageY","scrollTop","modifiers","once","timestamp","prevVnode","BaseDraganddrop","directives","events","correctedEvents","backgrounds","dropAllowed","dropableEvents","draggedInternalEvent","draggedExternalEvent","targetTimestamp","targetGridEnds","shadowPreview","findIndex","previewEvent","toSpliced","correctedBackgrounds","start","end","orig","onDragstart","convertToTransferData","onDragend","onDragenter","isostart","luxon","DateTime","fromISO","setZone","local","isoend","onDragleave","onDragchange","ends","onDrop","BaseHeader","DatePicker","VueDatePicker","listLength","convertedDate","keepLocalTime","current","month","year","startOf","ts","plus","days","useLocaleWeeks","endOf","toLocaleString","localWeekYear","week","toFormat","DATE_FULL","weekStart","Info","getStartOfWeek","fromObject","setLocale","locale","fromJSDate","weekNumbers","localWeekNumber","modeOptions","btnMonth","btnWeek","btnDay","btnList","clickMode","defaultPrevented","BaseSlider","time","extrasAfter","extrasBefore","running","promiseResolve","itemsAfter","itemsBefore","styleSlider","position","transition","styleBefore","display","right","styleAfter","prevPage","slidePages","nextPage","newTarget","endSlide","clickListeners","saveAddClickListener","source","listener","stopPropagation","customEvent","CalClick","finalEvent","FhcCalendar$1","timeGrid","draggableEvents","hasDragoverFunc","onDragover","now","showBtns","internalView","internalDate","modalEvent","convertedEvents","convertedBackgrounds","bg","isInteger","fromMillis","zone","sDate","cDate","cMode","sMode","o","isValid","hasSame","clickPrev","clickNext","handleClickDefaults","number","zoneName","onDropItem","showEventModal","eventObj","hideEventModal","closeFn","onModalHidden","ApiLvPlan","getLvPlan","eventsPersonal","eventsLv","getLv","GridLineEvent","isHeaderOrFooter","draggable","classes","startsHere","endsHere","CalendarGrid","GridLine","LineEvent","LineBackground","flipAxis","background","styles","perc","border","diff","axisRow","eventsWithRowInfo","toMillis","originalEvents","originalBackgrounds","axisMain","axisParts","Duration","allDayEvents","axisMainCollapsible","snapToGrid","resizeObserver","mutationObserver","userScroll","axisCol","axisPartsWithBreaks","tu","lastTuEnd","slice","axisPartsSave","partsEnds","part","axisMainBorders","curr","eventsAllDay","mapIntoMainAxis","allDayEvent","eventsNormal","hasValidEvents","styleGridCols","styleGridRows","gridlines","mainIndex","day","laneStart","laneEnd","getPageTop","pageTop","offsetTop","offsetParent","getPageLeft","pageLeft","offsetLeft","getTimestampFromMouse","dayTimestamp","mouse","mouseFrac","main","enableAutoScroll","ResizeObserver","scrollToEarliestEvent","observe","MutationObserver","mutations","m","addedNodes","matches","subtree","childList","disableAutoScroll","disconnect","eventElements","scroller","earliestEventOffset","scrollIntoView","behavior","scrollTo","LabelDay","titleFull","titleLong","titleShort","titleNarrow","LabelDow","weekday","LabelTime","start_ok","end_ok","sanitizedTimestamps","formatTime","toISOTime","suppressSeconds","ModeDay","DayView","emptyMessage","emptyMessageDetails","chosenEvent","gridMainRef","fromISOTime","hours","currentEvent","first","isToday","compact","threshold","elementRef","isRef","$el","compareArray","updateResultVars","compare","observer","addObserver","removeObserver","onMounted","onUnmounted","watchEffect","useResizeObserver","currentDate","focusDate","rangeOffset","range","last","Interval","fromDateTimes","view","slider","updatePage","newFocusDate","viewAttrs","$attrs","ModeWeek","WeekView","collapseEmptyDays","weeks","ModeMonth","MonthView","LabelWeek","firstDay","lastDay","d","startdate","nextRangeStart","months","dayInWeek","FhcCalendar","getPromiseFunc","markRaw","teachingunits","includeOffset","eventStyle","farbe","updateRange","rangeInterval","context","lv","loading_id","loadingEvents","allEvents","eventsLoaded","mergePromiseArr","markEventsLoaded","indexIsLast","nStart","rStart","nEnd","toISODate","toValue","promises","results","useEventLoader","newValue","emit","stunde","beginn","ende","ApiAuthinfo","LvPlan","propsViewData","currentDay","focus_date","isNaN","currentMode","currentLv","lvTitle","bezeichnung_english","bezeichnung","handleChangeDate","newMode","handleChangeMode","$router","MyLvPlan","studiensemester_start","studiensemester_ende","downloadLinks","opts","toUnixInteger","download_link","link","LvPruefungen","pruefungenData","ApiLehre","infos","studien_semester","studiengang_kuerzel","orgform_kurzbz","ects","incoming","info","lektorNamesLinks","lektorenLinks","lektoren","titelpre","vorname","nachname","titelpost","lektorNames","lvLeitung","oe","organisationseinheittyp","oeLeitung","koordinator","currentLang","lastLang","lvinfo","lvinfoDefaultLang","assign","reloadRefs","triggerRef","initialval","FHC_JS_PHRASES_STORAGE_OBJECT","tmp_category","loadLazy","unref","LvMenu","containerStyles","rowStyles","hasLvPlanEintraege","c4_disabled","menuItem","c4_link","c4_moodle_links","c4_target","getMenuName","ApiAddons","LvUebersicht","titel","preselectedMenu","isMenuSelected","lvEvaluierungMessage","hiddenModal","showModal","studium_studiensemester","MylvSemester","MylvSemesterStudiengang","MylvSemesterStudiengangLv","bezeichnung_eng","module","benotung","lvnote","lvnotebez","znote","znotebez","positiv","note_index","preselectedMenuItem","gradeColor","is_organisatorische_einheit","emptyMenu","bodyStyle","grade","languageIndex","LvHasPruefungenInformation","fetchMenu","openLvOption","location","nextTick","lvUebersicht","openPruefungen","openInfos","LvInfo","pruefungen","kuerzel","lvs","sg_bezeichnung_eng","lehrveranstaltungen","Map","studiengaenge","sg_bezeichnung","lvsForStudiengang","MylvStudent","firstLoad","currentSemester","nearestSem","nearestSemDiff","sem","abs","currentIsFirst","currentIsLast","prevSem","selectedIndex","nextSem","updateRouter","routerStudiensemester","$route","s","beforeRouteUpdate","to","next","CoreFetchCmpt","refresh","apiFunction","apiFunctionParameters","oldValue","fetchData","errorMessage","apiFunctionResult","successHandler","errorHandler","finally","finallyHandler","setError","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","columns","fields","switchFilter","applyFilterConfig","currentFields","c","currentTarget","filteredFields","addField","removeField","FilterColumns","selected","names","selectedFields","DEFAULT_ICONS","jsonLines","xlsx","pdf","json","csv","DEFAULT_LABELS","TableDownload","tabulator","iconClass","currentConfig","newConfig","stringToFileFormatter","formatter","validateFileFormatter","lcInput","XLSX","jspdf","jsPDF","autoTable","download","elementDataMap","WeakMap","collapseAutoClose","collapse","getInstance","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","gap","lastCol","column","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","ApiFilter","_uuid","CoreFilterCmpt","onNwNewEntry","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","headerFilter","notSelectedFields","filteredData","filteredColumns","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","idExtra","columnsForFilter","filterTitles","reloadTable","initTabulator","hash","resolvePromiseFunc","setRenderData","startFetchCmpt","layout","movableColumns","columnDefaults","tooltip","selectable","dataTree","on","toDelete","childIdx","child","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","handlerSaveCustomFilter","attr","parentId","parentIdx","_children","beforeCreate","$props","Mailverteiler","AusweisStatus","QuickLinks","mobile","hideCollapse","collapseOpen","showCollapse","Adresse","withZustelladresse","Kontakt","ProfilEmails","RoleInformation","getLinkGruppeListe","gruppe","getLinkVerbandListe","getLinkSemesterListe","ApiProfil","profilViewData","Upload","DmsItem","preview","multiple","inputClass","noList","disabled","stringifyFile","lastModified","lastModifiedDate","addFiles","files","dt","DataTransfer","doubles","removeFile","fileToRemove","upload","dmsFile","ApiProfilUpdate","updateProfilbild","getProfilUpdateWithPermission","ImageUpload","dmsData","Dms","updateID","uploadImage","ProfilInformation","fotoStatus","FotoSperre","foto_sperre","imageUpload","sperre_foto_function","get_image_base64_src","foto","Vorname","Nachname","profilInfo","notIncludedProperties","EditProfilSelect","EditKontakt","originalValue","zustellKontakteCount","updateValue","checked","isChanged","getZustellkontakteCount","showZustellKontakteWarning","zustellung","kontakteOfSelectedType","kontakttyp","EditAdresse","AutoComplete","autocomplete","gemeinden","ortschaftnamen","selectedNation","nationenList","zustellAdressenCount","fileschanged","autocompleteSearchGemeinden","gemeinde","autocompleteSearchOrtschaftsnamen","ortschaft","getGemeinde","Set","ortschaftsname","updateFileID","getZustelladressenCount","deleteDmsData","showZustellAdressenWarning","zustelladresse","adresse_id","strasse","Status","getDocumentLink","dms_id","getComponentView","profilUpdateTopic","cardHeader","status_timestamp","TextInputDokument","withFiles","didFilesChange","didDataChange","emitChanges","toRaw","ariaLabel","breadcrumb","submit","select","breadcrumbItems","modal_topic","properties","addItem","anmerkung","deleteItem","profilUpdateEmit","updateOptions","Loading","state","clearTimeout","EditProfil","Loader","zustelladressenCount","zustellkontakteCount","editData","updateFileIDFunction","newFileID","handleFailedError","setLoading","submitProfilChange","fileData","uploadFiles","handleApiResponse","showFooter","FetchProfilUpdates","showUpdateModal","editProfilTitle","hideEditProfilModal","updateEditModal","showEditProfilModal","updateRequest","profilUpdateStates","deleteRequest","dateFilter","cell","onRendered","div","initialValue","getValue","PrimevueCalendar","calendar","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","StudentProfil","collapseIconBetriebsmittel","editDataFilter","preloadedPhrasen","zutrittsgruppen_table_options","persistenceID","zutrittsGruppenPhrase","betriebsmittel_table_options","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","$collapseFormatter","headerSort","headerClick","collapseFunction","entlehnteBetriebsmittelPhrase","inventarnummerPhrase","ausgabedatum","headerFilterFunc","formatterParams","datetimeFormatterParams","betriebsmittelTableBuilt","betriebsmittelTable","mittel","zutrittsgruppenTableBuilt","zutrittsgruppenTable","zuttritsgruppen","fetchProfilUpdates","profilUpdates","sortProfilUpdates","editModal","inputFormat","outputFormat","invalidPlaceholder","filteredEditData","profilInformation","Username","username","Anrede","anrede","Titel","Postnomen","postnomen","roleInformation","geburtsdatum","gebdatum","geburtsort","gebort","personenkennzeichen","loaded","newVal","MitarbeiterProfil","funktionen_table_options","bezeichnungPhrase","organisationseinheitPhrase","gueltigVonPhrase","gueltigBisPhrase","wochenstundenPhrase","Nummer","Ausgegeben_am","ausgabedatumPhrase","funktionenTableBuilt","funktionenTable","funktionen","setTableColumnTitles","getTelefonValue","standort_telefon","telefonklappe","kurzbz","telefon","office","ViewStudentProfil","personEmails","emails","ViewMitarbeiterProfil","collapseIconFunktionen","item2","innerHTML","Profil","notFoundUID","isEditable","editable","allClickableIcons","_column","cells","click","ele1","ele2","insertamum","reverse","load","profil_data","adressen","adressenArray","adresse","adr","kontakte","kontakteArray","kontant","kon","Personen_Informationen","Private_Kontakte","listview","Private_Adressen","loadingModalRef","oldVal","ApiOrt","Raumsuche","InputNumber","inputnumber","phrasenPromise","phrasenResolved","tabulatorUuid","tableBuiltResolve","tableBuiltPromise","roomtypes","defaultType","raumtyp_kurzbz","beschreibung","anzahl","selectedType","getHours","minutes","getMinutes","datepickerTextInputOptions","enterSubmit","tabSubmit","selectOnFocus","format","escClose","timepickerTextInputOptions","raumsucheTableOptions","widthGrow","linkFormatter","raumsucheTableEventHandlers","tableResolve","arialabel","roomPlanLink","room","roomInfoLink","getTimeString","setupData","nummer","planbezeichnung","personen","max_person","linkInfo","linkRes","raumsucheTable","loadRoomTypes","loadRooms","toISOString","handleUuidDefined","setRoute","dateFormat","getDate","getMonth","getFullYear","timeFormat","setupMounted","tableID","tableDataSet","visualViewport","setProperty","isDarkMode","Pagination","paginator","maxPageCount","newPageEvent","StudiengangPerson","telefoneklappe","email","displayWidget","formattedEmail","emailArray","fullname","phone","email_link","base64Image","profilViewLink","StudiengangVertretung","vertretungsList","showBezeichnung","vertretungFormatedName","vertretung","ApiStudiengang","StudiengangInformation","stg_ltg","gf_ltg","stv_ltg","ass","hochschulvertr","stdv","jahrgangsvertr","collection_array","returnData","moodleLink","studiengangInformationen","ApiCms","CmsNews","fetchNews","Axios","loadNewPageContent","raum_contentmittitel","imgContent","sanitizeLegacyTables","pElement","parentNode","replaceChild","u","li","scrollWidth","firstChild","TEXT_NODE","th","childNodes","cn","tables","getElementsByTagName","innerText","room_name","room_name_reg_exp","room_name_reg_exp_result","link_element","replaceWith","lvplanlinks","lvplanlink","img","DOMParser","parseFromString","imgAttributes","regexList","relative","priority","regex","replacement","group_replacement_strategy","absolute","relative_regex","replaceRelativeLegacyLink","relativeLegacyLink","new_link","query_parameter","prepareContent","new_href","CmsContent","news_content","iframe_content","srcUrl","iframe","content_type","content_id_internal","fetchContent","$nextTick","computeContentType","DEFAULT_MODE_RAUMINFO","RoomInformation","ApiAbgabe","getConfig","getConfigStudent","getStudentProjektarbeiten","getStudentProjektabgaben","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getMitarbeiterProjektarbeiten","showall","postProjektarbeitAbgabe","termin","dateString","paabgabe_id","paabgabetyp_kurzbz","note_pk","upload_allowed","beurteilungsnotiz","fixtermin","insertvon","betreuer_person_id","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","getPaAbgabetypen","getProjektarbeitenForStudiengang","benotet","getStudiengaenge","postStudentProjektarbeitZusatzdaten","getSignaturStatusForProjektarbeitAbgaben","paabgabe_ids","FhcOverlay","AbgabeStudentDetail","Checkbox","checkbox","Dropdown","dropdown","Textarea","textarea","Accordion","accordion","AccordionTab","accordiontab","Message","Inplace","inplace","projektarbeit","viewMode","eidAkzeptiert","enduploadTermin","allActiveLanguages","abstract","abstract_en","schlagwoerter","schlagwoerter_en","kontrollschlagwoerter","seitenanzahl","getNoteBezeichnung","noteOpt","notenOptions","opt","$capitalize","benotbar","validate","endupload","triggerEndupload","bperson_id","handleUploadRes","modalContainerEnduploadZusatzdaten","downloadAbgabe","formatDate","dateParam","padZero","num","abgabedatum","signatur","signaturInfo","getOptionLabel","getTerminNoteBezeichnung","getMoodleLink","moodle_link","getMessagePtStyle","margin","padding","getEid","allowedToSaveZusatzdaten","getAllowedToSendEndupload","qualityGateTerminAvailable","qgatefound","abgabetermine","abgabe","getTooltipVerspaetet","getTooltipVerpasst","getTooltipAbzugeben","getTooltipStandard","getTooltipAbgegeben","getTooltipFixtermin","getTooltipAbgabeDetected","getTooltipNotAllowedToUpload","isViewMode","getTooltipBeurteilungerforderlich","getTooltipBestanden","getTooltipNichtBestanden","today","getDateStyleClass","diffindays","isLate","nopt","AbgabetoolStudent","AbgabeDetail","student_uid_prop","activeTabIndex","abgabeTypeOptions","projektarbeiten","selectedProjektarbeit","checkQualityGatesStrict","termine","qgate1Passed","qgate2Passed","noteOption","checkQualityGatesOptional","qgate1found","qgate2found","qgate1positiv","qgate2positiv","isPastDate","deadline","setDetailComponent","loadAbgaben","pa","projekarbeit","paIsBenotet","allowedToUpload","inTime","dateStyle","betreuer","buildBetreuer","modalContainerAbgabeDetail","centeredTextFormatter","detailFormatter","mailFormatter","beurteilungFormatter","buildMailToLink","btitelpre","bvorname","bnachname","btitelpost","betreuerart_kurzbz","beurteilung1","downloadLink1","beurteilung2","downloadLink2","stg","kurzbzlang","mail","projekttypbezeichnung","loadProjektarbeiten","getAccTabHeaderForProjektarbeit","getMailLink","handleDownloadBeurteilung1","handleDownloadBeurteilung2","allowedNotenOptions","AbgabeMitarbeiterDetail","SpeedDial","speeddial","isFullscreen","assistenzMode","showAutomagicModalPhrase","speedDialItems","command","openCreateNewAbgabeModal","getAllowedToCreateNewTermin","openBenotung","openPlagiatcheck","openStudentPage","newTermin","noteBackend","getPlaceholderTermin","saveTermin","invertedFixtermin","newTerminRes","allowedToSave","allowedToDelete","existingTerminRes","abgabeOpt","noteOptExisting","savedNewWithNegative","savedExistingNoteAsNegativeAndWasNotNegativeBefore","modalContainerCreateNewAbgabe","openZusatzdatenModal","modalContainerZusatzdaten","saveZusatzdaten","validateZusatzdaten","paRes","handleDeleteTermin","deleteTermin","deletedTerminIndex","openBeurteilungLink","getOptionLabelSprache","getOptionLabelAbgabetyp","getOptionDisabled","aktiv","getNotenOptionLabel","turnitin_link","getSemesterBenotbar","beurteilungLinkNew","beurteilungLinkOld","upload_allowed_default","validateTermin","handleSaveNewAbgabe","handleChangeAbgabetyp","notenOptionsNonFinal","getAllowedAbgabeTypeOptions","abgabetypenBetreuer","getEnduploadErlaubt","isCurrent","endUploadVorhanden","getSpeedDialStyle","getSpeedDialWrapperStyle","getTooltipNotAllowedToSave","getTooltipNotAllowedToDelete","getProjektarbeitTitel","getProjektarbeitStudent","splitMailsHelper","mails","subject","alertPluginRef","phrasenPluginRef","maillist","mailto","subjectlength","firstrun","useBcc","ctrlKey","metaKey","splitposition","lastIndexOf","mailLink","AbgabetoolMitarbeiter","TieredMenu","tieredmenu","old_abgabe_beurteilung_link","tableData","detailIsFullscreen","BETREUER_SAMMELMAIL_BUTTON_STUDENT","saving","serienTermin","showAll","domain","detailOffset","abgabeTableOptions","selectableCheck","selectionCheck","rowHeight","getRow","handleClick","cssText","titleFormatter","hozAlign","selectHandler","titleFormatterParams","selectAllHandler","cssClass","pkzTextFormatter","headerFilterTerminCol","sorter","sortFuncTerminCol","abgabterminFormatter","headerFilterParams","valuesLookup","getQGateStatusList","abgabeTableEventHandlers","getColumn","undoSelection","sd","fsd","handlePaUpdated","checkAbgabetermineProjektarbeit","abgabeTable","redraw","sammelMailStudent","param","recipientList","aRow","bRow","diffMs","filterVal","rowVal","luxonDate","toLuxon","loadState","saveState","stateRestored","getColumnLayout","getSorters","getFilters","headerFilters","handleTableBuilt","saved","colLayoutRestored","setColumnLayout","filtersRestored","setFilter","headerFiltersRestored","hf","sortRestored","sortList","columnManager","findColumn","setSort","checkQualityGateStatus","qgate1Termine","qgate2Termine","qgate1Status","qgate1StatusRank","qgate2Status","qgate2StatusRank","qgate","prevTermin","nextTermin","isSelected","deselect","getTable","getRows","handleToggleFullscreenDetail","showDeadlines","toggleShowAll","openAddSeriesModal","modalContainerAddSeries","addSeries","oldScrollLeft","oldScrollTop","createInfoString","str","paabgabe","buildPKZ","matrikelnr","buildStg","pkz","beurteilung","beurteilungLink","projekttyp_kurzbz","callback","calcMaxTableHeight","setHeight","emailItems","uniqueStudentEmailCount","BsOffcanvas","offcanvas","scroll","placement","Offcanvas","ApiStudiensemester","getAllStudiensemesterAndAktOrNext","order","AbgabetoolAssistenz","AbgabeterminStatusLegende","Timeline","timeline","stg_kz_prop","studiensemesterOptions","allSem","curSem","notenOptionFilter","inplaceToggle","timelineProjekt","selectedStudiengangOption","studiengaengeOptions","allConfigPromise","ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT","ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER","allowedNotenFilterOptions","renderVerticalBuffer","formAction","uniqueRecipients","sammelMailBetreuer","betreuer_mail","zweitbetreuer_mail","getItemBezeichnung","getItemNote","notenOption","handleChangeAbgabetypSerientermin","semesterChanged","existing","compVal","newFilter","getOptionLabelStg","getOptionLabelStudiensemester","getNotenFilterOptionLabel","actionButtons","alignItems","justifyContent","createButton","titleKey","clickHandler","btn","aspectRatio","transform","stopImmediatePropagation","openTimeline","pids","preserveSelected","newAbgaben","pid","scrollX","scrollY","mappedData","mapProjekteToTableData","projekte","note_bez","erstbetreuer","buildErstbetreuer","zweitbetreuer","buildZweitbetreuer","student_vorname","student_nachname","terminTypOpt","drawer","timelineFormatter","erstbetreuer_full_name","betreuer_vorname","betreuer_nachname","zweitbetreuer_full_name","uniqueBetreuerEmailCount","allRows","cb","getElement","requests","stgOpt","DeadlineOverview","person_uid_prop","fullName","deadlines","deadlineTableOptions","deadlineTableEventHandlers","pdfExportLink","loadDeadlines","dl","stud_titelpre","stud_vorname","stud_nachname","stud_titelpost","fixterminstring","deadlineTable","Studium","studienSemester","selectedStudiensemester","selectedStudiengang","studienOrdnung","selectedStudienordnung","selectedSemester","selectedLehrveranstaltung","studium_studiengang","studium_semester","studium_studienordnung","getDataFromLocalStorage","storeDataToLocalStorage","studienordnung","changeStudiensemester","changeSelectedStudienSemester","changeStudiengang","changeSelectedStudienGang","changeSemester","changeSelectedSemester","changeStudienordnung","newSelectIndex","changeSelectedStudienPlan","extractPropertyValues","studienplan_id","openLvUebersicht","lehrveranstaltung","sortStudienSemester","sem1","sem2","sem1Match","sem1Semester","sem1Year","sem2Match","sem2Semester","sem2Year","setHash","preselected","lv1","lv2","studienordnungTitel","orgform_bezeichnung","studiengangTitel","studiensemesterTitel","studiensemester_regex","selectedLehrveranstaltungTitel","lehrform_kurzbz","computedStudienOrdnung","carry","computedStudienOrdnungSelectValues","diabled","ApiRenderers","loadRenderers","ApiRouteInfo","ciPath","router","VueRouter","createRouter","history","createWebHistory","routes","redirect","route","charAt","beforeEnter","currentRoute","appSideMenuEntries","renderers","isMobile","matchMedia","isInternalRoute","internalBase","origin","startsWith","URL","pathname","matched","rendertype","modalTitle","modalContent","calendarEvent","defineAsyncComponent","calendarEventStyles","head","rel","isChromium","test","navigator","userAgent","isFirefox","overflow","scrollbarWidth","getScrollbarWidth","setScrollbarWidth","string","FhcApps","makeExtendable","directive","afterEach","failure","fullPath"],"mappings":"4eAEA,IAAAA,EAAe,CACdC,KAAM,iBACNC,KAAMA,KAAAA,CACLC,MAAO,KACPC,YAAY,IAEbC,MAAO,CACNC,SAAU,CACTC,KAAM,CAACC,QAAQC,QACfC,SAAS,EACTC,UAAUC,GACF,CAAC,UAAU,GAAM,GAAOC,SAASD,IAG1CE,MAAO,CACNP,KAAMC,QACNE,SAAS,GAEVK,SAAU,CACTR,KAAMC,QACNE,SAAS,GAEVM,WAAYR,QACZS,YAAa,CAACR,OAAOS,MAAMC,QAC3BC,YAAa,CACZb,KAAM,CAACE,OAAOS,MAAMC,QACpBT,QAAS,IAEVW,UAAW,CACVd,KAAM,CAACE,OAAOS,MAAMC,QACpBT,QAAS,aAEVY,YAAa,CACZf,KAAM,CAACE,OAAOS,MAAMC,QACpBT,QAAS,IAEVa,sBAAuB,CACtBhB,KAAMC,QACNE,SAAS,IAGXc,MAAO,CACN,cACA,gBACA,uBACA,cACA,eACA,oBAEDC,QAAS,CACRC,OAAAA,GACC,OAAOC,KAAKxB,MAAMuB,SACnB,EACAE,YAAAA,GACC,OAAOD,KAAKxB,MAAMyB,cACnB,EACAC,IAAAA,GACC,OAAOF,KAAKxB,MAAM0B,MACnB,EACAC,IAAAA,CAAKC,GACJ,OAAOJ,KAAKxB,MAAM2B,KAAKC,EACxB,EACAC,MAAAA,GACC,OAAOL,KAAKxB,MAAM6B,QACnB,EACAC,gBAAAA,GACCN,KAAKvB,YAAcuB,KAAKvB,WACxBuB,KAAKO,MAAM,mBACZ,GAEDC,OAAAA,GACKR,KAAKS,MAAMjC,QACdwB,KAAKxB,MAAQ,IAAIkC,UAAUC,MAAMX,KAAKS,MAAMjC,MAAO,CAClDG,SAAUqB,KAAKrB,SACfQ,MAAOa,KAAKb,MACZC,SAAUY,KAAKZ,WAElB,EACAwB,KAAAA,CAAMC,EAAMC,EAASC,EAAOC,GAC3B,MAAM3C,EAAU2B,KACfiB,EAAQ,CAAA,OACIC,IAATL,IACHI,EAAMlC,QAAU,IAAM8B,QACTK,IAAVH,IACHE,EAAMF,MAAQ,IAAMA,QACNG,IAAXF,IACHC,EAAMD,OAAS,IAAMA,GAGtB,IAAIG,GAAmB,EAKvB,MAJuB,oBAAbC,WACTD,GAAmB,GAGb,IAAIE,QAAQ,CAACC,EAAQC,KAC3B,MAAMC,EAAWC,IAAIC,UAAU,CAC9BpD,KAAM,cACNqD,MAAKA,IACG,IAAMF,IAAIG,EAAEvD,EAAS,CAC3BwD,MAAO,UACHf,EACJgB,IAAK,QACL,oBAAqBN,EAASO,SAC3Bd,GAELT,OAAAA,GACCR,KAAKS,MAAMjC,MAAM2B,MAElB,EACA6B,aAAAA,GACKhC,KAAKS,MAAMjC,SACc,IAA5BwB,KAAKS,MAAMjC,MAAMyD,OAAmBX,EAAQtB,KAAKS,MAAMjC,MAAMyD,QAAUV,IACzE,EACAW,SAAAA,GACCC,EAAQC,cAAcC,YAAYF,EACnC,IAEKA,EAAUG,SAASC,cAAc,OAGnCpB,GACHK,EAASgB,IAAIpB,SAASqB,OAAO1D,QAAS,CAAC2D,OAAQ,CAACC,QAAS,QAI1DtB,QAAAC,UAAAsB,KAAA,WAAA,OAAAC,EAAA,GAAmCD,KAAME,IACxCtB,EAASgB,IAAIM,EAAQ/D,SACrByC,EAASuB,MAAMZ,GACfG,SAASzB,KAAKmC,YAAYb,MAG7B,EACAc,SAAU,u/CCpIXC,EAAe,CACd5E,KAAM,iBACN6E,WAAY,CACX9E,WAED+E,OAAQ,CACP/E,GAEDK,MAAO,CACNY,YAAa,CACZV,KAAM,CAACE,OAAOS,MAAMC,QACpBT,QAAS,yBAQVsE,cAAeC,SACfC,gBAAiBD,SACjBE,uBAAwBF,SACxBG,cAAeH,SACfI,eAAgBJ,UAEjB/E,KAAMA,KAAAA,CACL0D,QAAQ,IAETzB,OAAAA,GACCR,KAAKxB,MAAQwB,KAAKS,MAAMkD,eAAenF,KACxC,EACAoC,KAAAA,CAAMgD,EAAK9C,GACV,OAAOzC,EAAQuC,MAAMiD,KAAK7D,KAAnB3B,CAAyBuF,EAAK9C,EACtC,EACAmC,SAAU,uSClCXa,EAAe,CACdxF,KAAM,mBACN8E,OAAQ,CACPW,GAEDxF,KAAMA,KAAAA,CACL0D,QAAQ,IAETrB,KAAAA,CAAMgD,EAAK9C,GACV,OAAOiD,EAAQnD,MAAMiD,KAAK7D,KAAnB+D,CAAyBH,EAAK9C,EACtC,EACAmC,SAAU,iZCbXe,EAAe,CACd1F,KAAK,WACL6E,WAAY,CAAA,EAEZc,OAAQ,CAAA,EAERvF,MAAO,CACNwF,KAAM1E,OACN2E,OAAQtF,SAETgB,MAAO,CACN,YACA,UACA,YACA,cACA,WACA,UACA,WACA,OACA,aACA,YAEDtB,KAAIA,KACI,CACN6F,WAAY,GACZC,UAAU,IAGZC,SAAU,CAAA,EAEVxE,QAAS,CACRyE,kBAAAA,CAAmBC,GAElB,GADAxE,KAAKO,MAAM,YAAaiE,GACpBA,EAAIC,OAAOC,aAAa,eAC3B1E,KAAKoE,WAAaI,EAAIC,OAAOE,aAAa,mBACpC,CACN,IAAIC,EAASJ,EAAIC,OAAOI,QAAQ,iBAE/B7E,KAAKoE,WADFQ,EACeA,EAAOD,aAAa,eAEpB,EAEpB,CACD,EACAG,YAAAA,CAAaN,EAAKN,GACjB,IAAIE,EAAapE,KAAKoE,YAAcI,EAAIC,OAAOE,aAAa,eAC5D,GAAIP,EAAY,CAEf,GADApE,KAAKqE,UAAW,EACE,QAAdD,EACH,OAAOpE,KAAKO,MAAM,YAAaiE,EAAKN,GAChC,GAAkB,UAAdE,EACR,OAAOpE,KAAKO,MAAM,cAAeiE,EAAKN,EACxC,CAED,EACAa,YAAAA,CAAaP,GACPxE,KAAKqE,WAEVrE,KAAKqE,UAAW,EAChBrE,KAAKO,MAAM,WAAYiE,GACxB,EACAQ,UAAAA,CAAWC,GACVjF,KAAKO,MAAM,aAAc0E,GACzBjF,KAAKuE,mBAAmBU,GACxBjF,KAAK8E,aAAaG,EAAOjF,KAAKkE,KAC/B,EACAgB,SAAAA,CAAUD,GACNjF,KAAKqE,WACPY,EAAME,iBACNnF,KAAKO,MAAM,WAAY0E,GAEzB,GAGDhC,SAAU,ubCnEX,MAAMmC,EACLC,WAAAA,CAAYC,GACPA,EAAEA,GACLtF,KAAKsF,EAAIA,EAAEA,EACXtF,KAAK4B,EAAI0D,EAAE1D,EACX5B,KAAKzB,KAAO,IAAI+G,EAAE/G,MAClByB,KAAKuF,KAAO,IAAID,EAAEC,QAElBvF,KAAKsF,EAAIA,EACTtF,KAAK4B,EAAI,EACT5B,KAAKzB,KAAO,GACZyB,KAAKuF,KAAO,GAEd,CACAC,UAAAA,CAAWC,EAAGC,GACb,MAAMC,EAAID,EAAE1F,KAAKsF,EAAIG,EACrB,OAAQzF,KAAKuF,KAAKI,IAAuB,IAAjB3F,KAAKuF,KAAKI,EACnC,CACAC,OAAAA,GACC,OAAO5F,KAAKzB,KAAKsH,OAAO,CAACC,EAAK5B,KACzBA,GAAMwB,EAAII,IACZA,EAAM5B,EAAKwB,GAENI,GACL,EACJ,CACAC,YAAAA,GACC,MAAMC,EAAY,GAClB,IAAIC,EAAWjG,KAAK4F,UAChBM,EAAclG,KAAKsF,GAAKW,EAAS,GACrC,IAAI,IAAIN,EAAE,EAAGA,EAAIO,EAAaP,IACxB3F,KAAKuF,KAAKI,IAAuB,IAAjB3F,KAAKuF,KAAKI,KAC9B3F,KAAKuF,KAAKI,QAAKzE,GAGjB,IAAI,IAAIyE,EAAG,EAAGA,EAAI3F,KAAKuF,KAAKY,OAAQR,IACnC,IAAK3F,KAAKuF,KAAKI,IAAuB,IAAjB3F,KAAKuF,KAAKI,GAAS,CACvC,IAAIF,EAAIE,EAAI3F,KAAKsF,EACbI,EAAIU,KAAKC,MAAMV,EAAI3F,KAAKsF,GAC5BU,EAAUM,KAAK,CAACb,IAAGC,KACpB,CAED,OAAOM,CACR,CACAO,GAAAA,CAAIrC,EAAMsC,GACT,IAAIC,EAAYzG,KAAK0G,gBAAgBxC,EAAKyC,OAC1C,IAAKF,EAAUN,OAId,OAHAjC,EAAKyC,MAAMC,QAAQC,GAAK7G,KAAKuF,KAAKsB,GAAK3C,EAAK4C,OAC5C9G,KAAKzB,KAAK2F,EAAK4C,OAAS5C,EACxBlE,KAAK4B,EAAIwE,KAAKW,IAAI/G,KAAK4B,EAAGsC,EAAKwB,EAAIxB,EAAKtC,GACjC,GACD,CACN,MAAMoF,EAAa,IAAI5B,EAAUpF,MAEjCkE,EAAKyC,MAAMC,QAAQC,GAAKG,EAAWzB,KAAKsB,OAExC,MAAMI,EAAeD,EAAWE,UAAUT,EAAWD,GACrD,GAAIS,EAAad,OAAQ,CACxB,MAAMgB,EAAaF,EAAaG,KAAK,CAACC,EAAEC,UACxBpG,IAAXmG,EAAEE,OACLF,EAAEE,KAAOF,EAAEG,MAAM3B,OAAO,CAACwB,EAAGI,IAAMJ,EAAII,EAAEF,KAAM,SAChCrG,IAAXoG,EAAEC,OACLD,EAAEC,KAAOD,EAAEE,MAAM3B,OAAO,CAACwB,EAAGI,IAAMJ,EAAII,EAAEF,KAAM,IACxCF,EAAEE,KAAOD,EAAEC,OAEbtF,EAAS,GAmBf,OAlBAkF,EAAW,GAAGK,MAAMZ,QAAQc,IAC3B,MAAMC,EAAW,IAAI3H,KAAKzB,KAAKmJ,EAAKZ,QACpCa,EAASlC,GAAKiC,EAAKjC,EACnBkC,EAASjC,GAAKgC,EAAKhC,EACnBiC,EAAShB,MAAQ3G,KAAK4H,aAAaD,GACnC3H,KAAK4B,EAAIwE,KAAKW,IAAI/G,KAAK4B,EAAG+F,EAASjC,EAAIiC,EAAS/F,GAChD5B,KAAK6H,OAAOF,GACZA,EAAShB,MAAMC,QAAQC,GAAK7G,KAAKuF,KAAKsB,GAAKc,EAASb,OACpD9G,KAAKzB,KAAKmJ,EAAKZ,OAASa,EACxB1F,EAAOyF,EAAKZ,OAAS,CACpBA,MAAOa,EAASb,MAChBrB,EAAGkC,EAASlC,EACZC,EAAGiC,EAASjC,KAGdxB,EAAKyC,MAAMC,QAAQC,GAAK7G,KAAKuF,KAAKsB,GAAK3C,EAAK4C,OAC5C9G,KAAKzB,KAAK2F,EAAK4C,OAAS5C,EAEjBjC,CACR,CACC6F,QAAQC,MAAM,QAAS,6BAEzB,CACD,CACAL,IAAAA,CAAKxD,EAAMuB,EAAGC,GACb,GAAIxB,EAAK3F,KAAKyJ,MAAMhI,KAAKsF,IAAI2C,OAC5B,MAAO,GACR,GAAI/D,EAAKuB,GAAKA,GAAKvB,EAAKwB,GAAKA,EAC5B,MAAO,GAIR,IAAIc,EAFJxG,KAAK6H,OAAO3D,GAGRA,EAAKuB,GAAKA,EAEZe,EADGd,EAAExB,EAAKwB,EAAI,EAzGH,EAGE,EA0GJxB,EAAKwB,GAAKA,IAEnBc,EADGf,EAAEvB,EAAKuB,EAAI,EA7GD,EACC,GAkHhB,MAAMyC,EAAgB3I,MAAM4I,QAAQjE,EAAKyC,OAAS,IAAIzC,EAAKyC,OAAS,CAACzC,EAAKyC,OAEpEgB,EAAW,IAAIzD,GACrByD,EAASlC,EAAIA,EACbkC,EAASjC,EAAIA,EACbiC,EAAShB,MAAQ3G,KAAK4H,aAAaD,GACnC,IAAIlB,EAAYzG,KAAK0G,gBAAgBiB,EAAShB,OAG9C,GAAIF,EAAU2B,KAAKzB,GAAS3G,KAAKzB,KAAKoI,IAAQpI,KAAKyJ,MAAMhI,KAAKsF,IAAI2C,QACjE,MAAO,GAIR,IAAII,EAAgB5B,EAAU6B,IAAIC,GAAYvI,KAAKzB,KAAKgK,IACpDC,EAAiBH,EAAcC,IAAIC,GAAYA,EAAS5B,OAAO8B,OACnE,IAAKD,EAAeJ,KAAKzB,IAAUgB,EAAShB,MAAMzH,SAASyH,MAAY6B,EAAeJ,KAAKzB,GAASuB,EAAchJ,SAASyH,IAAQ,CAClI,IAAI+B,EAAgB,GAChBC,EAAoB,GACxB,IAAI,IAAI9B,KAAKqB,EAAc,CAC1B,GAAGS,EAAkBzJ,SAAS2H,GAC7B,SAED,IAAI+B,EAAMP,EAAcQ,QACrBD,IACFD,EAAoB,IAAIA,KAAsB3I,KAAK4H,aAAa,IAAKgB,KAAQ5I,KAAK8I,uBAAuBjC,MACzG6B,EAAcE,EAAI9B,OAAS,CAAEA,MAAO8B,EAAI9B,SAAU9G,KAAK8I,uBAAuBjC,IAEhF,CAGA,OAFA6B,EAAcxE,EAAK4C,OAAS,CAAEA,MAAO5C,EAAK4C,MAAOrB,IAAGC,KAE7CgD,CACR,CAEA,MAAMK,EAAU/I,KAAKuG,IAAIoB,EAAUnB,GAEnC,OADAuC,EAAQ7E,EAAK4C,OAAS,CAACA,MAAO5C,EAAK4C,MAAOrB,IAAGC,KACtCqD,CACR,CACAC,MAAAA,CAAO9E,EAAMoB,EAAG1D,GACf,GAAIsC,EAAKoB,GAAKA,GAAKpB,EAAKtC,GAAKA,EAC5B,MAAO,GACR5B,KAAK6H,OAAO3D,GAEZ,MAAMyD,EAAW,IAAIzD,GACrByD,EAASrC,EAAIA,EACbqC,EAAS/F,EAAIA,EACb+F,EAAShB,MAAQ3G,KAAK4H,aAAaD,GAEnC,MAAMoB,EAAU/I,KAAKuG,IAAIoB,GAIzB,OAHGoB,IACFA,EAAQ7E,EAAK4C,OAAS,CAACA,MAAO5C,EAAK4C,MAAOxB,IAAG1D,IAAG6D,EAAEvB,EAAKuB,EAAGC,EAAExB,EAAKwB,EAAGsD,QAAO,IAErED,CACR,CACA7B,SAAAA,CAAUJ,EAAON,GAChB,GAAIjH,MAAM4I,QAAQrB,GAAQ,CACzBA,EAAMF,QAAQjB,GAAK3F,KAAK6H,OAAO,CAACf,MAAMnB,KACtC,IAAIsB,EAAe,CAAC,CAAC1B,KAAMvF,KAAMwH,MAAO,KAYxC,OAXAV,EAAMF,QAAQjB,IACb,IAAIsD,EAAU,GACdhC,EAAaL,QAAQsC,IACpBA,EAAW3D,KAAK2B,UAAUvB,EAAGa,GAAQI,QAAQuC,IAC5CD,EAAW1B,MACX2B,EAAE3B,MAAQ,IAAI2B,EAAE3B,SAAU0B,EAAW1B,OACrCyB,EAAQ3C,KAAK6C,OAGflC,EAAegC,IAEThC,CACR,CACA,MAAMmC,EAAa,CA3LN,EAGE,EAFA,EACC,GA2LhBpJ,KAAK6H,OAAO,CAACf,UAEb,MAAMuC,EAAS,EAAI,IAAIrJ,KAAKzB,KAAKuI,GAAOuC,QAAU,GAElD,OAAOD,EAAWvD,OAAO,CAAC5D,EAAQqH,KACjC,IAAIC,EAAMvJ,KAAKwJ,qBAAqBF,EAAKxC,EAAO,GAAIN,IAAW8C,EAAM,GAAK,EAAQ,GAAJA,GAAUD,GACxF,OAAKE,EAEE,IAAItH,KAAWsH,GADdtH,GAEN,IAAIwH,OAAON,GAAKA,EACpB,CACAK,oBAAAA,CAAqBF,EAAKxC,EAAO4C,EAAQnC,GACxC,MAAMG,EAAO,CAACZ,QAAOrB,EAAE,EAAGC,EAAG,EAAG6B,KAAMA,GACtC,IAAIoC,EACJ,OAAOL,GACN,KA5MY,EA6MX,GAAItJ,KAAKzB,KAAKuI,GAAOvI,MAAMyJ,MAAMhI,KAAKsF,IAAI2C,QAAUjI,KAAKzB,KAAKuI,GAAOpB,EAAIgE,EAAS,EACjF,OAAO,EACRC,EAAc3J,KAAKzB,KAAKuI,GAAOH,MAAM2B,IAAI3C,GAAKA,EAAE3F,KAAKsF,EAAEoE,GACvDhC,EAAKhC,GAAKgE,EACV,MACD,KA/Mc,EAgNb,GAAI1J,KAAKzB,KAAKuI,GAAOvI,MAAMyJ,MAAMhI,KAAKsF,IAAI2C,OACzC,OAAO,EACJjI,KAAKzB,KAAKuI,GAAOpB,EAAI1F,KAAKzB,KAAKuI,GAAOlF,EAAI8H,EAAS1J,KAAK4B,IAC3D2F,GAAQ,IACToC,EAAc3J,KAAKzB,KAAKuI,GAAOH,MAAM2B,IAAI3C,GAAKA,EAAE3F,KAAKsF,EAAEoE,GACvDhC,EAAKhC,EAAIgE,EACT,MACD,KAzNc,EA0Nb,GAAI1J,KAAKzB,KAAKuI,GAAOvI,MAAMyJ,MAAMhI,KAAKsF,IAAI2C,QAAUjI,KAAKzB,KAAKuI,GAAOrB,EAAIiE,EAAS,EACjF,OAAO,EACRC,EAAc3J,KAAKzB,KAAKuI,GAAOH,MAAM2B,IAAI3C,GAAKA,EAAE+D,GAChDhC,EAAKjC,GAAKiE,EACV,MACD,KA9Ne,EA+Nd,GAAI1J,KAAKzB,KAAKuI,GAAOvI,MAAMyJ,MAAMhI,KAAKsF,IAAI2C,QAAUjI,KAAKzB,KAAKuI,GAAOrB,EAAIzF,KAAKzB,KAAKuI,GAAOxB,EAAIoE,EAAS1J,KAAKsF,EAC3G,OAAO,EACRqE,EAAc3J,KAAKzB,KAAKuI,GAAOH,MAAM2B,IAAI3C,GAAKA,EAAE+D,GAChDhC,EAAKjC,EAAIiE,EAIX,MAAMjD,EAAYzG,KAAK0G,gBAAgBiD,GACvC,GAAIlD,EAAUvH,UAAS,GACtB,OAAOc,KAAKwJ,qBAAqBF,EAAKxC,EAAO4C,EAAO,EAAGnC,GAGxD,MAAMP,EAAa,IAAI5B,EAAUpF,MAGjC,GAFA2J,EAAY/C,QAAQC,GAAKG,EAAWzB,KAAKsB,QAEpCJ,EAAUN,OACd,MAAO,CAAC,CAACZ,KAAMyB,EAAYQ,MAAO,CAACE,KAEpC,MAAMT,EAAeD,EAAWE,UAAUT,GAAW6B,IAAIY,GAAcA,EAAW1B,MAAMoC,QAAQlC,IAASwB,GACzG,QAAOjC,EAAad,QAASc,CAC9B,CACA4C,YAAAA,GACC7J,KAAKzB,KAAKqI,QAAQ1C,GAAQA,EAAKmF,YAASnI,EACzC,CACAwF,eAAAA,CAAgBC,GACf,OAAOA,EAAM2B,IAAI3C,GAAK3F,KAAKuF,KAAKI,IAAI8D,OAAO,CAAChC,EAAE9B,EAAE0B,KAAOI,GAAW,IAANA,IAAYJ,EAAEyC,QAAQrC,KAAO9B,EAC1F,CACAkC,MAAAA,CAAO3D,GACNlE,KAAKuF,KAAOvF,KAAKuF,KAAK+C,IAAI3C,GAAKA,GAAKzB,EAAK4C,MAAQnB,OAAIzE,EACtD,CACA0G,YAAAA,CAAa1D,GACZ,MAAMyC,EAAQ,GACd,IAAK,IAAIhB,EAAI,EAAGA,EAAIzB,EAAKoB,EAAGK,IAC3B,IAAK,IAAIoE,EAAI,EAAGA,EAAI7F,EAAKtC,EAAGmI,IAC3BpD,EAAML,KAAKX,EAAIzB,EAAKuB,GAAKsE,EAAI7F,EAAKwB,GAAK1F,KAAKsF,GAC9C,OAAOqB,CACR,CACAmC,sBAAAA,CAAuBnC,GACtB,MAAO,CAAElB,EAAGkB,EAAQ3G,KAAKsF,EAAGI,EAAGU,KAAKC,MAAMM,EAAQ3G,KAAKsF,GACxD,CACA0E,KAAAA,GACC,OAAOhK,KAAKuF,IACb,ECnQD,IAAA0E,EAAe,CACd3L,KAAM,OACN6E,WAAY,CACXa,YAEDtF,MAAO,CACNwL,KAAMC,OACNC,MAAO7K,MACP8K,WAAY7K,OACZ8K,YAAahH,SACba,OAAQ,CACPvF,KAAMC,QACNE,SAAS,GAEVwL,kBAAmB,CAClB3L,KAAMuL,OACNpL,QAAS,GAEVyL,cAAc,CACb5L,KAAMC,QACNE,SAAS,IAGXc,MAAO,CACN,iBACA,UACA,aACA,cACA,wBAEDtB,KAAIA,KACI,CACNkH,GAAG,EACHC,GAAG,EACH+E,QAAQ,EACRC,QAAS,EACTC,KAzCe,EA0CfpF,KAAM,KACNqF,SAAU,KACVC,YAAa,GACbC,gBAAiB,KACjBC,qBAAsB,KACtBC,cAAe,CAAC,EAAE,GAClBC,YAAa,KACbC,YAAa,KACbC,eAAe,GACfC,aAAa,OAGfnH,OAAO,CACNoH,YAAa,CACZzM,KAAME,OACNC,QAAS,KAGXuF,SAAU,CACTgH,sBAAuB,CACtBC,GAAAA,GACC,OAAOvL,KAAKwK,aACb,EACAgB,GAAAA,CAAIvM,GACHe,KAAKO,MAAM,uBAAwBtB,EACpC,GAEDwM,aAAAA,GACC,IAAIrB,EAAQ,CAAA,EAWZ,OAVApK,KAAKoK,MAAMxD,QAAQ1C,IAClB,GAAIlE,KAAKmL,eAAehF,OAAS,GAAKnG,KAAK0L,gBAAgBxH,GAAM,CAC/D,IAAIyH,EAAqB3L,KAAKmL,eAAe1B,OAAOmC,GAAUA,EAAOrN,KAAKsN,UAAY3H,EAAK2H,WAAWC,MAClGH,IACHzH,EAAKuB,EAAIkG,EAAmBlG,EAC5BvB,EAAKwB,EAAIiG,EAAmBjG,EAE/B,CACA0E,EAAM,IAAIlG,EAAKuB,KAAKvB,EAAKwB,KAAOxB,IAE1BkG,CACR,EACA2B,kBAAAA,GACC,IAAIC,EAAe,GACfC,EAAUjM,KAAKkK,KACfgC,EAAWlM,KAAKmM,KAGhBC,EAAW,CAAA,EAEf,IAAK,IAAI1G,EAAI,EAAGA,EAAIwG,EAAUxG,IAC7B,IAAK,IAAID,EAAI,EAAGA,EAAIwG,EAASxG,IAAK,CAEjC,GAAIjG,OAAO6M,KAAKD,GAAUjG,QAAUiG,EAAS,IAAI3G,KAAKC,KACrD,SAED,IAAI4G,EAAetM,KAAKyL,cAAc,IAAIhG,KAAKC,KAC/C,GAAI4G,EAAc,CAEjB,IAEIC,EAAQ9G,EAFA6G,EAAahH,EAED,EACpBkH,EAAQ9G,EAFC4G,EAAa1K,EAED,EACzB,GAAG6D,GAAK8G,GAAS7G,GAAK8G,EACrB,IAAK,IAAIC,EAAa/G,EAAG+G,GAAcD,EAAOC,IAC7C,IAAK,IAAIC,EAAajH,EAAGiH,GAAcH,EAAOG,IACzCA,GAAcjH,GAAKgH,GAAc/G,IACpC0G,EAAS,IAAIM,KAAcD,MAAc,EAK9C,MAECT,EAAa1F,KAAK,CAAEb,EAAGA,EAAGC,EAAGA,EAAGJ,EAAG,EAAG1D,EAAG,EAAG+K,aAAa,EACxDpO,KAAM,CAAEqO,GAAI,eAAiB9N,OAAOkN,EAAa7F,QAAQ0G,SAAS,EAAG,OAExE,CAED,OAAOb,CACR,EACAc,4BAAAA,GACC,MAAO,IAAI9M,KAAK+M,eAAgB/M,KAAK+L,mBACtC,EACAI,IAAAA,GACC,OAAInM,KAAKsL,sBACAtL,KAAKuF,KAAQvF,KAAKuF,KAAK3D,EAAE,EAAK,EAEhC5B,KAAKuF,KAAOvF,KAAKuF,KAAK3D,EAAI,CAElC,EACAoL,SAAAA,GACC,MAAMC,EAAOjN,KAAKmE,OAASnE,KAAKuK,kBAAoB,EACpD,MAAO,CACN,sBAAuB,KAAKvK,KAAKmM,KAAOc,GAAQ,IAChD,qBAAsB,IAAIjN,KAAKkK,KAAO,IACtC,mCAAoC,QACpC,4BAA6B,OAC7B,iBAAkB,KAAOlK,KAAKmM,KAAOc,GAAMjN,KAAKkK,KAAO,IAEzD,EACAgD,YAAAA,GACC,OAAOlN,KAAKoK,MAAM9B,IACjB,CAACpE,EAAM4C,KACC,CACNA,MAAOA,EACPrB,EAAGvB,EAAKuB,EACRC,EAAGxB,EAAKwB,EACRJ,EAAGpB,EAAKoB,EACR1D,EAAGsC,EAAKtC,EACRyH,OAAQnF,EAAKmF,QAAU,EACvB9K,KAAM2F,IAIV,EACAiJ,cAAAA,GACC,OAAKnN,KAAK+K,qBAEH/K,KAAKkN,aAAa5E,IAAIpE,GACvBlE,KAAK+K,qBAAqB7G,EAAK4C,OAE7B,CACNA,MAAO5C,EAAK4C,MACZuC,OAAQnF,EAAKmF,OACb9K,KAAM2F,EAAK3F,KACXkH,OAA+CvE,IAA5ClB,KAAK+K,qBAAqB7G,EAAK4C,OAAOrB,EAAkBvB,EAAKuB,EAAIzF,KAAK+K,qBAAqB7G,EAAK4C,OAAOrB,EAC1GC,OAA+CxE,IAA5ClB,KAAK+K,qBAAqB7G,EAAK4C,OAAOpB,EAAkBxB,EAAKwB,EAAI1F,KAAK+K,qBAAqB7G,EAAK4C,OAAOpB,EAC1GJ,OAA+CpE,IAA5ClB,KAAK+K,qBAAqB7G,EAAK4C,OAAOxB,EAAkBpB,EAAKoB,EAAItF,KAAK+K,qBAAqB7G,EAAK4C,OAAOxB,EAC1G1D,OAA+CV,IAA5ClB,KAAK+K,qBAAqB7G,EAAK4C,OAAOlF,EAAkBsC,EAAKtC,EAAI5B,KAAK+K,qBAAqB7G,EAAK4C,OAAOlF,GARnGsC,GAHDlE,KAAKkN,YAcd,EACAH,WAAAA,GACC,IAAK/M,KAAK8K,gBACT,OAAO9K,KAAKmN,eACb,IAAIC,EAAmBpN,KAAKmN,eAAe7E,IAAIpE,IAC9C,IAAKlE,KAAK8K,gBAAgB5G,EAAK4C,OAC9B,OAAO5C,EACR,IAAImJ,EAAcrN,KAAK8K,gBAAgB5G,EAAK4C,QAAQlF,EAAIsC,EAAKtC,EACzD0L,EAAatN,KAAK8K,gBAAgB5G,EAAK4C,QAAQxB,EAAIpB,EAAKoB,EAC5D,MAAO,CACN0D,OAAQhJ,KAAK8K,gBAAgB5G,EAAK4C,QAAQkC,OAC1ClC,MAAO5C,EAAK4C,MACZuC,OAAQnF,EAAKmF,OACb9K,KAAM2F,EAAK3F,KACXkH,OAA0CvE,IAAvClB,KAAK8K,gBAAgB5G,EAAK4C,OAAOrB,EAAkBvB,EAAKuB,EAAIzF,KAAK8K,gBAAgB5G,EAAK4C,OAAOrB,EAChGC,OAA0CxE,IAAvClB,KAAK8K,gBAAgB5G,EAAK4C,OAAOpB,EAAkBxB,EAAKwB,EAAI1F,KAAK8K,gBAAgB5G,EAAK4C,OAAOpB,EAChGJ,EAAGgI,EAAW,QAAgDpM,IAAvClB,KAAK8K,gBAAgB5G,EAAK4C,OAAOxB,EAAxCpB,EAAKoB,EAA8DtF,KAAK8K,gBAAgB5G,EAAK4C,OAAOxB,EACpH1D,EAAGyL,EAAc,QAAiDnM,IAAvClB,KAAK8K,gBAAgB5G,EAAK4C,OAAOlF,EAAxCsC,EAAKtC,EAA8D5B,KAAK8K,gBAAgB5G,EAAK4C,OAAOlF,KAKtH2L,EAAuB,GAa3B,OAZAH,EAAkBxG,QAAQ1C,IACzB,GAAGA,EAAK8E,OAAO,CACd,IAAIwE,EAAU,IACVtJ,EACHoB,OAAyCpE,IAAvClB,KAAK8K,gBAAgB5G,EAAK4C,OAAOxB,EAAkBpB,EAAKoB,EAAItF,KAAK8K,gBAAgB5G,EAAK4C,OAAOxB,EAC/F1D,OAAyCV,IAAvClB,KAAK8K,gBAAgB5G,EAAK4C,OAAOlF,EAAkBsC,EAAKtC,EAAI5B,KAAK8K,gBAAgB5G,EAAK4C,OAAOlF,EAC/F6L,eAAc,EACdC,OAAM,GAEPH,EAAqBjH,KAAKkH,EAC3B,IAEM,IAAIJ,KAAsBG,EAClC,EACAI,kBAAAA,GACC,SAAK3N,KAAKmE,SAAWnE,KAAKuF,MAnNX,GAmNmBvF,KAAK2K,MAAqB3K,KAAKyF,EAAI,GAAKzF,KAAK0F,EAAI,GAAK1F,KAAKyF,GAAKzF,KAAKkK,MAAQlK,KAAK0F,GAAK1F,KAAKmM,OAEvHnM,KAAKuF,KAAKC,WAAWxF,KAAKyF,EAAGzF,KAAK0F,EAC1C,EACAkI,WAAAA,GACC,GAAK5N,KAAK6N,aAEV,OAAO7N,KAAK6N,aAAahI,OAAO,CAACC,EAAKgI,KACrChI,EAAIgI,EAAIC,WAAYD,EACbhI,GACL,CAAA,EACJ,GAEDkI,MAAO,CACN7J,MAAAA,CAAOA,GACDA,GACJnE,KAAKiO,YACP,EACA/D,IAAAA,GACClK,KAAKiO,YACN,EACG9B,KAAM,CACR+B,OAAAA,CAAQjP,GACPe,KAAKO,MAAM,aAActB,EAC1B,EACAkP,WAAW,GAEZjB,aAAc,CACbgB,OAAAA,CAAQjP,GACPe,KAAKiO,aAEL,MAAMG,EAAUpO,KAAKqO,cAAcpP,GAEnCe,KAAK+K,qBAAuBqD,EACxBA,EAAQjI,QACXnG,KAAKO,MAAM,iBAAkB6N,EAAQ3E,OAAOhC,GAAKA,GACnD,EACA0G,WAAW,EACXG,MAAM,IAGRxO,QAAS,CACR4L,eAAAA,CAAgBxH,GACf,OAAKA,GAAM3F,MAAMyJ,MAAMhI,KAAKkK,KAI7B,EACAqE,wBAAAA,CAAyBC,GACpBxO,KAAKkL,cAENsD,EACFxO,KAAKkL,YAAYuD,kBAAkBC,UAAUnI,IAAI,0BAEjDvG,KAAKkL,YAAYuD,kBAAkBC,UAAU7G,OAAO,0BAEtD,EACAxD,QAAAA,CAASY,GACR,GA5Qe,GA4QZjF,KAAK2K,KAAkB,CACzB3K,KAAKuO,0BAAyB,GAE9B,MAAMI,EAAgB3O,KAAKS,MAAMmO,UAAUC,wBACrCC,EAAmB9O,KAAKoL,aAAayD,wBAE3C,IAAIE,EAAa/O,KAAK0K,QAAU,GAC5BsE,EAAchP,KAAKyK,QAAU,GAEjC,MAAMwE,EAAS,EACTC,EAASP,EAAcQ,OAASL,EAAiBK,OACjDC,EAAU,EACVC,EAAUV,EAAcW,MAAQR,EAAiBQ,MAEjDC,EAAiBnJ,KAAKW,IAAIkI,EAAQ7I,KAAKoJ,IAAIN,EAAQH,IACnDU,EAAkBrJ,KAAKW,IAAIqI,EAAShJ,KAAKoJ,IAAIH,EAASL,IAE5DhP,KAAKoL,aAAasE,MAAMC,IAAM,GAAGJ,MACjCvP,KAAKoL,aAAasE,MAAME,KAAO,GAAGH,KACnC,CACD,EACApB,aAAAA,CAAcjE,GACbpK,KAAKuF,KAAO,IAAIH,EAAUpF,KAAKkK,MAC/B,MAAMjI,EAAS,GACf,IAAI4N,EAAc,IAAIzF,GAAOhD,KAAK,CAACC,EAAGC,IAClCtH,KAAK0L,gBAAgBrE,IAAMrH,KAAK0L,gBAAgBpE,GAC3C,EAEAtH,KAAK0L,gBAAgBrE,GACrB,IAEArH,KAAK0L,gBAAgBpE,IACrB,IAGDD,EAAEgC,OAAS/B,EAAE+B,QAEjB8B,EAAiB,GA0CrB,OAzCA0E,EAAYjJ,QAAQ1C,IACnB,IAAI8B,EAAYhG,KAAKuF,KAAKQ,eAE1B,GAAG/F,KAAK0L,gBAAgBxH,GAAM,CAC7B,IAAI4L,EAAgB9J,EAAU6C,QACzBiH,GAIJ5L,EAAKuB,EAAIqK,EAAcrK,EACvBvB,EAAKwB,EAAIoK,EAAcpK,IAJvBxB,EAAKuB,EAAI,EACTvB,EAAKwB,EAAI1F,KAAKuF,KAAK3D,GAKpBuJ,EAAe7E,KAAKpC,EAErB,CACA,GAAIA,EAAKuB,EAAIvB,EAAKoB,EAAItF,KAAKkK,KAAM,CAChC,IACC6F,EADGC,EAAUhQ,KAAKkK,KAAKhG,EAAKuB,EAEzBzF,KAAKsK,eACP0F,GAAWhQ,KAAKsK,YAAYpG,EAAK3F,KAAMyR,EAAS9L,EAAKtC,IAEnDoO,EAAU,IACbA,EAAU,GACPA,EAAUhQ,KAAKkK,OAClB8F,EAAUhQ,KAAKkK,MACZhG,EAAKuB,EAAIuK,EAAUhQ,KAAKkK,OAC3B6F,EAAU/P,KAAKkK,KAAO8F,GAEnBA,GAAW9L,EAAKoB,IACnB0K,OAAU9O,GACXe,EAAOiC,EAAK4C,OAAS,CACpB5C,KAAMA,EAAK3F,KACXkH,EAAGsK,EACHzK,EAAG0K,EAEL,CACA9L,EAAKyC,MAAQ3G,KAAKuF,KAAKqC,aAAa1D,GACpClE,KAAKiQ,0BAA0BjQ,KAAKuF,KAAKgB,IAAIrC,GAAOjC,EAAQmI,KAE7DpK,KAAKmL,eAAiBA,EACtBnL,KAAKuF,KAAKsE,eACH5H,CACR,EACAgO,yBAAAA,CAA0BC,EAAOC,EAAQC,GAEnCF,IAEAE,IACJA,EAAYpQ,KAAKkN,cAClBgD,EAAMtJ,QAAQ1C,IACb,IAAIjC,EAAS,CACZiC,KAAMkM,EAAUlM,EAAK4C,OAAOvI,WAEd2C,IAAXgD,EAAKuB,IACRxD,EAAOwD,EAAIvB,EAAKuB,QACFvE,IAAXgD,EAAKwB,IACRzD,EAAOyD,EAAIxB,EAAKwB,QACFxE,IAAXgD,EAAKoB,IACRrD,EAAOqD,EAAIpB,EAAKoB,QACFpE,IAAXgD,EAAKtC,IACRK,EAAOL,EAAIsC,EAAKtC,GACjBuO,EAAOjM,EAAK4C,OAAS7E,IAEvB,EACAoO,UAAAA,GACC,EAMDC,YAAAA,CAAa9L,GACZ,IAAKxE,KAAKmE,OAET,OADAnE,KAAKyF,EAAIzF,KAAK0F,GAAI,GACX,EAER,MAAMuH,EAAOjN,KAAKmE,OAASnE,KAAKuK,kBAAoB,EAC9CgG,EAAOvQ,KAAKS,MAAMmO,UAAUC,wBAE7BrK,EAAIiG,SAAYjG,EAAIkG,UAAWlG,EAAIgM,UACvChM,EAAIiG,QAAUjG,EAAIgM,QAAQ,GAAG/F,QAC7BjG,EAAIkG,QAAUlG,EAAIgM,QAAQ,GAAG9F,SAG9B1K,KAAKyK,QAAWjG,EAAIiG,QAAU8F,EAAKX,KACnC5P,KAAK0K,QAAWlG,EAAIkG,QAAU6F,EAAKZ,IACnC,MAAMc,EAAQrK,KAAKC,MAAMrG,KAAKkK,MAAQ1F,EAAIiG,QAAU8F,EAAKX,MAAQ5P,KAAKS,MAAMmO,UAAU8B,aAChFC,EAAQvK,KAAKC,OAAOrG,KAAKmM,KAAOc,IAASzI,EAAIkG,QAAU6F,EAAKZ,KAAO3P,KAAKS,MAAMmO,UAAUgC,cAE9F,OAAI5Q,KAAKyF,GAAKgL,GAASzQ,KAAK0F,GAAKiL,KAGjC3Q,KAAKyF,EAAIgL,EACTzQ,KAAK0F,EAAIiL,GAEF,EACR,EACAE,UAAAA,CAAWrM,EAAKN,GACXM,EAAIsM,eACPtM,EAAIsM,aAAaC,aAAavM,EAAIC,QAAQ,cAC1CD,EAAIsM,aAAaE,WAAa,OAC9BxM,EAAIsM,aAAaG,cAAgB,OAEnC,EACAC,SAAAA,CAAU1M,EAAKN,GAETlE,KAAKmE,SAGVnE,KAAK2K,KA/ZU,EAiaf3K,KAAKiL,YAAc/G,EAEnBlE,KAAKO,MAAM,cAAe2D,GAE1BiN,WAAW,KACVnR,KAAKkL,YAAc1G,EAAIC,OAAOI,QAAQ,mBAGtC,IAAIuM,EAAQ5M,EAAIC,OAAOI,QAAQ,oBAAoBwM,WAAU,GAE7DD,EAAM1B,MAAMhN,OAAS,EACrB0O,EAAM1C,UAAUnI,IAAI,eACpBvG,KAAKS,MAAMmO,UAAU5L,YAAYoO,GACZA,EAAME,cAAc,4BAC5B5B,MAAM6B,eAAe,WAClCvR,KAAKoL,aAAegG,GAClB,GAEHpR,KAAKgL,cAAgB,CAAC9G,EAAKuB,EAAIzF,KAAKyF,EAAGvB,EAAKwB,EAAI1F,KAAK0F,GACrD1F,KAAK6Q,WAAWrM,EAAKN,GACtB,EACAsN,WAAAA,CAAYhN,EAAKN,GACXlE,KAAKmE,SAEVnE,KAAK2K,KAxbY,EAybjB3K,KAAKiL,YAAc/G,EACnBlE,KAAKO,MAAM,cAAe2D,GAC1BlE,KAAK6Q,WAAWrM,GACjB,EACAiN,QAAAA,CAASjN,GAKR,GAJKxE,KAAK0F,EAAI,EAAK1F,KAAKmM,OA/bT,GA+bkBnM,KAAK2K,MA9brB,GA8b0C3K,KAAK2K,OAC/D3K,KAAKiO,cAGDjO,KAAKmE,OACT,OAAOnE,KAAKiO,aAKb,GAJAjO,KAAK0R,6BApcY,GAqcd1R,KAAK2K,MACP3K,KAAK2R,gCAEF3R,KAAKsQ,aAAa9L,GACrB,OAAOxE,KAAK2K,MACX,KA3ca,EA2cG,CACfnG,EAAIW,iBACJnF,KAAK4K,SAAW,IAAIxF,EAAUpF,KAAKuF,MACnC,IAAIE,EAAIzF,KAAKyF,EAAIzF,KAAKgL,cAAc,GAChCtF,EAAI1F,KAAK0F,EAAI1F,KAAKgL,cAAc,GAChCvF,EAAI,GACPzF,KAAKgL,cAAc,IAAMvF,EACzBA,EAAI,GACMA,EAAIzF,KAAKiL,YAAY3F,EAAItF,KAAKkK,OACxClK,KAAKgL,cAAc,IAAMhL,KAAKkK,KAAOlK,KAAKiL,YAAY3F,EAAIG,EAC1DA,EAAIzF,KAAKkK,KAAOlK,KAAKiL,YAAY3F,GAE9BI,EAAI,IACP1F,KAAKgL,cAAc,IAAMtF,EACzBA,EAAI,GAEL1F,KAAK8K,gBAAiB9K,KAAK4K,SAASlD,KAAK1H,KAAKiL,YAAaxF,EAAGC,GAC9D,KACD,CACA,KA7de,EA6dG,CACjBlB,EAAIW,iBACJnF,KAAK4K,SAAW,IAAIxF,EAAUpF,KAAKuF,MACnC,IAAID,EAAIc,KAAKoJ,IAAIxP,KAAKkK,KAAOlK,KAAKiL,YAAYxF,EAAGW,KAAKW,IAAI,EAAG/G,KAAKyF,EAAIzF,KAAKiL,YAAYxF,EAAI,IACvF7D,EAAIwE,KAAKW,IAAI,EAAG/G,KAAK0F,EAAI1F,KAAKiL,YAAYvF,EAAI,GAC9C1F,KAAKsK,eACPhF,EAAG1D,GAAK5B,KAAKsK,YAAYtK,KAAKiL,YAAY1M,KAAM+G,EAAG1D,IACrD5B,KAAK8K,gBAAkB9K,KAAK4K,SAAS5B,OAAOhJ,KAAKiL,YAAa3F,EAAG1D,GACjE,KACD,EAGH,EACAqM,UAAAA,GACCjO,KAAK4R,qBACL5R,KAAKsL,uBAAwB,EAC7BtL,KAAKuO,0BAAyB,GAC9BvO,KAAK2K,KAhfU,EAiff3K,KAAK8K,gBAAkB,KACvB9K,KAAKgL,cAAgB,CAAC,EAAE,GACxBhL,KAAKiL,YAAc,KACnBjL,KAAKO,MAAM,cAAc,MACzBP,KAAKkL,YAAc,IAEpB,EACA2G,OAAAA,GAIC,GAHA7R,KAAK4R,qBACL5R,KAAKuO,0BAAyB,GA1ff,GA4fXvO,KAAK2K,KACR,OAGqBrI,SAASwP,eAAe9R,KAAKiL,YAAY1M,KAAKsN,UACpD6C,UAAU7G,OAAO,iBACjCtI,MAAMwS,KAAKzP,SAAS0P,uBAAuB,+BAA+BpL,QAAQkH,IACjFA,EAAIY,UAAU7G,OAAO,+BAMtB7H,KAAK2K,KAzgBU,EA0gBf,IAAIyD,EAAU,GACdpO,KAAKiQ,0BAA0BjQ,KAAK8K,gBAAiBsD,GACrDA,EAAUpO,KAAKiS,sBAAsB7D,GACjCA,EAAQjI,QACXnG,KAAKO,MAAM,iBAAkB6N,EAAQ3E,OAAOhC,GAAKA,IAElDzH,KAAKiL,YAAc,KACnBjL,KAAKkL,YAAc,KACnBlL,KAAKO,MAAM,cAAe,KAC3B,EACA0R,qBAAAA,CAAsB7D,GACrBA,EAAQxH,QAAQ,CAAC1C,EAAM4C,KACjB9G,KAAK+K,qBAAqBjE,GAG9B9G,KAAK+K,qBAAqBjE,GAAS,IAAI9G,KAAK+K,qBAAqBjE,MAAW5C,GAF5ElE,KAAK+K,qBAAqBjE,GAAS5C,IAIrC,IAAIgO,EAAoBlS,KAAKqO,cAAcrO,KAAKmN,gBAChD,OAAI+E,EAAkB/L,QAErB+L,EAAkBtL,QAAQ,CAAC1C,EAAM4C,IAAUsH,EAAQtH,GAAS5C,GACrDlE,KAAKiS,sBAAsB7D,IAE5BA,CACR,EACA+D,gBAAAA,GACCnS,KAAKsL,uBAAwB,EAC7BtL,KAAKO,MAAM,UAAWP,KAAKyF,EAAGzF,KAAK0F,EACpC,EACA0M,uBAAAA,CAAwB5N,GAviBR,GAwiBZxE,KAAK2K,MACP3K,KAAKsQ,aAAa9L,EAEpB,EACAkN,0BAAAA,GACC,IAAIW,EAAe,GACnB,OAAOrS,KAAK2K,MACX,KA7iBgB,EA8iBf,IAAK,IAAIlF,EAAIzF,KAAKiL,YAAYxF,EAAGA,GAAKzF,KAAKyF,EAAGA,IAC7C,IAAK,IAAIC,EAAI1F,KAAKiL,YAAYvF,EAAGA,GAAK1F,KAAK0F,EAAGA,IAC7C1F,KAAKoK,MAAMxD,QAAQ1C,IACdA,EAAKuB,GAAKA,GAAKvB,EAAKwB,GAAKA,GAC5B2M,EAAe/L,KAAKpC,KAKxB,MACD,KAzjBc,EA0jBbmO,EAAiBrS,KAAKoK,MAAMX,OAAOvF,GAAMA,EAAKuB,GAAKzF,KAAKyF,GAAKvB,EAAKwB,GAAK1F,KAAK0F,GAI9EnG,MAAMwS,KAAKzP,SAAS0P,uBAAuB,+BAA+BpL,QAAQkH,IACjFA,EAAIY,UAAU7G,OAAO,+BAGtBwK,EAAezL,QAAQ1C,IACtB,GAAIA,EAAK8D,MAAMhI,KAAKkK,OAAShG,EAAK8D,MAAMhI,KAAKkK,MAAMjC,OAAQ,CAC1D,IACIqK,EADehQ,SAASwP,eAAe5N,EAAK2H,UACrByF,cAAc,mBACpCgB,EAAQ5D,UAAU6D,SAAS,8BAC/BD,EAAQ5D,UAAUnI,IAAI,4BAExB,GAEF,EACAoL,6BAAAA,GAEC,IAAIa,EAAmBxS,KAAKqK,WAAWrK,KAAKiL,YAAY1M,KAAKqN,QACzD6G,EAAsBD,EAAiBlD,MAAMvI,KAAOyL,EAAiBlD,MACrEoD,EAAsBF,EAAiBlD,MAAME,KAAOgD,EAAiBlD,MACrEqD,EAAuBH,EAAiBrD,OAAOpI,KAAOyL,EAAiBrD,OACvEyD,EAAuBJ,EAAiBrD,OAAOK,KAAOgD,EAAiBrD,OACvE0D,EAAkBvQ,SAASwP,eAAe9R,KAAKiL,YAAY1M,KAAKsN,UAEhEiH,EAAqB9S,KAAKyF,EAAIzF,KAAKiL,YAAYxF,EAAI,EACnDsN,EAAsB/S,KAAK0F,EAAI1F,KAAKiL,YAAYvF,EAAI,EAEtDoN,EAAqB,IAAMA,EAAqBL,GAC9CK,EAAqBJ,IAGvBK,EAAsB,IAAMA,EAAsBJ,GAChDI,EAAsBH,GAGzBC,EAAgBnE,UAAUnI,IAAI,iBAE9BsM,EAAgBnE,UAAU7G,OAAO,gBAEnC,EACA+J,kBAAAA,GACC,IAAIoB,EAAezT,MAAMwS,KAAKzP,SAAS0P,uBAAuB,gBAC9D,IAAK,IAAIrM,EAAI,EAAGA,EAAIqN,EAAa7M,OAAQR,IACxC3F,KAAKS,MAAMmO,UAAUvM,YAAY2Q,EAAarN,GAEhD,EACAsN,SAAAA,GACCjT,KAAK2K,KA1mBgB,CA2mBtB,EACAuI,OAAAA,GACClT,KAAK2K,KAhnBU,CAinBhB,GAED1H,SAAU,8oDCxnBX,IAAIkQ,EAAY,CAAA,EACZC,EAAmB,CAAA,EACnBC,EAASC,2BAA2BC,SAAWD,2BAA2BE,UAAY,oBAE1F,IAAAC,EAAe,CACdC,UAAU9G,GACFuG,EAAUvG,GAElB+G,WAAW/G,GACNuG,EAAUvG,GACNvL,QAAQC,QAAQ6R,EAAUvG,IAC9BwG,EAAiBxG,GACbwG,EAAiBxG,GACpByG,GAGLD,EAAiBxG,GAAM,IAAIvL,QAAQ,CAACC,EAASC,KAC5CqS,MAAMrI,IAAI8H,EAAQ,CAACQ,OAAO,CAACjH,QAAMhK,KAAK2G,IACrC4J,EAAUvG,GAAMrD,EAAIhL,KAAKuV,OACzBV,EAAiBxG,QAAM1L,EACvBI,EAAQ6R,EAAUvG,MAChBmH,MAAMhM,GAASxG,EAAOwG,EAAMiM,SAASzV,KAAKuV,OAAO/L,UAE9CqL,EAAiBxG,IAThBvL,QAAQE,OAAO,4DAWxB0S,OAAAA,CAAQC,GACPb,EAASa,CACV,GCrBDC,EAAe,CACd7V,KAAM,OACN6E,WAAY,CACX9E,UACA+V,iBCVa,CACd7V,KAAIA,KACI,CAAA,GAIRuB,QAAQ,CACPuU,OAAAA,CAAQC,EAAGC,GACVD,EAAG5E,MAAMP,OAAS,IAClBmF,EAAG5E,MAAMP,OAASmF,EAAGE,aAAe,IACrC,EACAC,OAAAA,CAAQH,EAAGC,GACVD,EAAG5E,MAAMP,OAASmF,EAAGE,aAAe,KACpCF,EAAG5E,MAAMP,OAAS,GACnB,GAEDlM,SACQ,2HDLR1E,KAAMA,KAAAA,CACLmW,UAAW,GACXC,UAAW,KACXlQ,QAAQ,EACRmH,OAAQ,KACRgJ,UAAW,CAAA,EACXC,WAAW,EACXC,WAAW,EACXC,WAAY,OAEblV,MAAO,CACN,SACA,SACA,YACA,cACA,eACA,eACA,UACA,aAEDnB,MAAO,CACN,KACA,WACA,SACA,QACA,SACA,SACA,SACA,WACA,UACA,YACA,QACA,QACA,YACA,gBACA,iBAED4F,SAAU,CACT0Q,SAAAA,GACC,OAAOhV,KAAK2B,OAAOwN,QAAQpI,GAC5B,EACAkO,QAAAA,GACC,MAAyD,mBAArDzV,OAAO0V,UAAUC,SAASC,KAAKpV,KAAK2B,OAAO2N,OACvCtP,KAAK2B,OAAO2N,MAEbtP,KAAK2B,OAAO2N,OAAOvI,GAC3B,EACAsO,SAAAA,GACC,OAAOrV,KAAK2B,OAAOwN,QAAQK,GAC5B,EACA8F,QAAAA,GACC,OAAOtV,KAAK2B,OAAO2N,OAAOE,GAC3B,EACA+F,YAAAA,GACC,OAAOvV,KAAKiV,SAAU,GAAKjV,KAAKgV,UAAW,CAC5C,EACAQ,QAAAA,GACC,QAAOxV,KAAKgI,OAAOC,MACpB,EACAwN,KAAAA,GACC,OAAOzV,KAAK0U,WAAgC,OAAnB1U,KAAK2U,SAC/B,GAED7U,QAAS,CACR4V,KAAAA,GAEC,IAAI1V,KAAK2V,SACR,OACD,IAAI1T,EAAS,CAAEiC,KAAMlE,KAAK4V,UAAWnQ,EAAGzF,KAAK4V,UAAUnQ,EAAGC,EAAG1F,KAAK4V,UAAUlQ,GAC5E1F,KAAKO,MAAM,YAAa,CAAC0B,GAC1B,EACA4T,OAAAA,GACC,IAAI5T,EAAS,CAAEiC,KAAMlE,KAAK4V,UAAWnQ,EAAGzF,KAAK4V,UAAUnQ,EAAGC,EAAG1F,KAAK4V,UAAUlQ,GAC5E1F,KAAKO,MAAM,UAAU,CAAC0B,GACvB,EACA6T,gBAAgBlK,GACP0H,2BAA2BC,SAClCD,2BAA2BE,UAAY5H,EAAOjK,MAAMoU,SAEtDC,iBAAAA,GACChW,KAAKO,MAAM,eACZ,EACA0V,iBAAAA,GACCjW,KAAKO,MAAM,eACZ,EACA0S,SAAAA,CAAUiD,GACTlW,KAAKyE,OAASyR,EAAEzR,MACjB,EACA0R,SAAAA,CAAUD,GACLlW,KAAKS,MAAM2V,WAAW7D,SAASvS,KAAKyE,QACvCzE,KAAKO,MAAM,YAAa2V,GAExBlW,KAAKuV,cACLvV,KAAKS,MAAM4V,aAAa9D,SAASvS,KAAKyE,SAElCzE,KAAKuV,aAAcvV,KAAKO,MAAM,cAAe2V,GAGjDA,EAAE/Q,gBAEJ,EACAmR,UAAAA,GACCtW,KAAK4U,UAAY,IAAK5U,KAAK2U,WAC3B3U,KAAKS,MAAMgC,OAAOtC,MACnB,EACAoW,SAAAA,CAAUzB,GACT9U,KAAK8U,UAAYA,CAClB,EACA0B,YAAAA,GACCxW,KAAK6U,WAAY,EACjB,IAAIpS,EAAS,IAAKzC,KAAK4U,WACvB5U,KAAKyW,iBAAiBhU,EACvB,EACAiU,oBAAAA,GACC,IAAIjU,EAAS,IAAKzC,KAAK2U,WACvB3U,KAAKyW,iBAAiBhU,EACvB,EACAgU,gBAAAA,CAAiBhU,GAChB,IAAK,IAAIkU,KAAKlU,EACTzC,KAAK4L,OAAO+I,UAAUgC,IAAMlU,EAAOkU,WAChClU,EAAOkU,GAGf3W,KAAKO,MAAM,SAAUkC,EACtB,GAEDuL,MAAO,CACNvL,MAAAA,GACCzC,KAAK2U,UAAY,IAAK3U,KAAK4L,QAAQ+I,aAAc3U,KAAKyC,QACtDzC,KAAK4U,UAAY,IAAK5U,KAAK2U,WAC3B3U,KAAKS,MAAMgC,QAAUzC,KAAKS,MAAMgC,OAAOvC,OACvCF,KAAK6U,WAAY,CAClB,GAED,aAAM+B,GACL5W,KAAK4L,aAAe6H,EAAmBE,WAAW3T,KAAK4M,IACvD,IAAI8H,SAAmBmC,OAAO7W,KAAK4L,OAAOjK,MAAMmV,OAAO/X,QACvDiB,KAAK+W,SAAS5T,WAAW,SAAWnD,KAAK4L,OAAOmC,WAAa2G,EAC7D1U,KAAK0U,UAAY,SAAW1U,KAAK4L,OAAOmC,UACxC/N,KAAK2U,UAAY,IAAK3U,KAAK4L,OAAO+I,aAAc3U,KAAKyC,QACrDzC,KAAK4U,UAAY,IAAK5U,KAAK2U,UAC5B,EACA1R,SAAmB,srKE1JpB+T,EAAe,CACdzY,KAAIA,KACI,CAAA,GAIRG,MAAM,CACLkN,OAAO,CACNhN,KAAKY,OACLyX,UAAS,IAGXnX,QAAQ,CACPoU,KAAKgD,GACU,KAAVA,EAAI,GACA5D,2BAA2BC,SAAW2D,EACvCA,GAGTrX,MAAM,CAAC,UACPoD,SAAmB,gaCdpBkU,EAAe,CACd7Y,KAAM,UACN6E,WAAY,CACX8G,WACAkK,gBACA6C,cAED/S,OAAQ,CACP4J,aAAa,CACZjP,KAAMW,MACNR,QAAS,IAEVqY,UAAW,CACVxY,KAAMC,QACNE,SAAS,GAEV4W,SAAU,CACT/W,KAAMC,QACNE,SAAS,IAGXL,MAAO,CACN,OACA,WAEDmB,MAAO,CACN,YACA,eACA,gBAEDtB,KAAIA,KACI,CACN8Y,cAAc,EACdC,UAAW,EACXC,WAAY,KACZtM,YAAY,KACZT,eAAc,IAGhBgN,OAAAA,GACC,MAAO,CACNC,iBAAkBhW,IAAI6C,SAAS,IAC9BtE,KAAKyX,kBAENpM,YAAa5J,IAAI6C,SAAS,IAAMtE,KAAK1B,MAEvC,EACAgG,SAAU,CACToT,oBAAAA,GACC,OAAI1X,KAAK6N,aACF7N,KAAK6N,aAAahI,OAAO,CAACC,EAAKnE,KACrCmE,EAAInE,EAAMoM,WAAapM,EAAMA,MACtBmE,GACN,CAAA,GAJ4B,CAAA,CAK/B,EACA2R,gBAAAA,GACC,OAAQzX,KAAK2V,UAAY3V,KAAKoX,aAAepX,KAAKqX,YACnD,EACAM,gBAAeA,IACP,sBAERvN,KAAAA,GAsBC,OANkBpK,KAAK4X,QAAQtP,IAAIpE,KAC9BA,GAAM2H,UAAY3H,GAAM0I,KAC3B1I,EAAK2H,SAAW3H,EAAK0I,IAEf,IAAK1I,EAAM2T,SAAS,KAAW3T,EAAK8D,MAAMhI,KAAKsX,YAAc,CAAEO,SAAS,EAAWpS,EAAG,EAAGC,EAAG,EAAGJ,EAAG,EAAG1D,EAAG,KAIjH,GAGD9B,QAAS,CACRgY,sBAAAA,GACC,OAAO9X,KAAK1B,MACX,IAAK,UAGL,IAAK,SACJ,OAAO0B,KAAK+X,GAAGC,EAAE,YAAYhY,KAAK1B,MAEnC,QACC,OAAO0B,KAAK1B,KAGf,EACA2Z,sBAAAA,GACC,MAAiB,WAAbjY,KAAK1B,KACD0B,KAAK+X,GAAGC,EAAE,YAAa,sCAEV,UAAbhY,KAAK1B,KACL0B,KAAK+X,GAAGC,EAAE,YAAa,qCAGvBhY,KAAK+X,GAAGC,EAAE,YAAa,8BAA+B,CAAChY,KAAK1B,MAErE,EACA4Z,kBAAAA,GACClY,KAAKqX,cAAe,CACrB,EACAc,kBAAAA,GACCnY,KAAKqX,cAAe,CACrB,EACAe,gBAAAA,CAAiBlU,EAAMoB,EAAG1D,GAEzB,IAAIgK,EAAS6H,EAAmBC,UAAUxP,EAAK0H,QAC/C,GAAIA,EAAQ,CACX,IAAIyM,EAAUzM,EAAOjK,MAAM2N,MACvB+I,EAAQtR,IACXsR,EAAQ7I,IAAM6I,EAAQ7I,KAAO,EAE7B6I,EAAU,CAAC7I,IAAI6I,EAAQtR,IAAIsR,GACxB/S,EAAI+S,EAAQ7I,MACflK,EAAI+S,EAAQ7I,KACTlK,EAAI+S,EAAQtR,MACfzB,EAAI+S,EAAQtR,KAEb,IAAIuR,EAAU1M,EAAOjK,MAAMwN,OACvBmJ,EAAQvR,IACXuR,EAAQ9I,IAAM8I,EAAQ9I,KAAO,EAE7B8I,EAAU,CAAC9I,IAAI8I,EAAQvR,IAAIuR,GACxB1W,EAAI0W,EAAQ9I,MACf5N,EAAI0W,EAAQ9I,KACT5N,EAAI0W,EAAQvR,MACfnF,EAAI0W,EAAQvR,IACd,CACA,MAAO,CAACzB,EAAG1D,EACZ,EACA2W,YAAAA,CAAarU,EAAMsU,GAClB,GAAItU,EAAKuU,OACRC,EAAU9X,MAAM,gDAAgDgC,KAAK,IAAM5C,KAAKO,MAAM,eAAgBP,KAAK1B,KAAM4F,EAAK0I,SAChH,CACN,IAAI+L,EAAS,CAAA,EACbA,EAAOzU,EAAK0I,IAAM,CAAEgM,QAASJ,GAC7BxY,KAAK6Y,aAAaF,EACnB,CACD,EACAG,UAAAA,CAAWrW,EAAQyB,GAClB,IAAI6U,EAAU,CAAA,EACdA,EAAQ7U,EAAK0I,IAAM,CAAEnK,UACrBzC,KAAK6Y,aAAaE,EACnB,EACAC,eAAAA,CAAgB5K,EAASnG,GAAO,GAC/B,IAAIhG,EAAS,CAAA,EACbmM,EAAQxH,QAAQ+R,IAEf,IAAIzU,EAAO,IAAIyU,EAAOzU,MACjBA,EAAKyI,cACLzI,EAAK8D,MAAMhI,KAAKsX,aACpBpT,EAAK8D,MAAMhI,KAAKsX,WAAa,CAAC7R,EAAG,EAAGC,EAAG,EAAGJ,EAAG,EAAG1D,EAAG,WAC7CsC,EAAKuB,SACLvB,EAAKwB,SACLxB,EAAKoB,SACLpB,EAAKtC,SACLsC,EAAK8D,MAAMhI,KAAKsX,WAAWrP,YACjB/G,IAAbyX,EAAOlT,IACVvB,EAAK8D,MAAMhI,KAAKsX,WAAW7R,EAAIkT,EAAOlT,QACtBvE,IAAbyX,EAAOjT,IACVxB,EAAK8D,MAAMhI,KAAKsX,WAAW5R,EAAIiT,EAAOjT,QACtBxE,IAAbyX,EAAOrT,IACVpB,EAAK8D,MAAMhI,KAAKsX,WAAWhS,EAAIqT,EAAOrT,QACtBpE,IAAbyX,EAAO/W,IACVsC,EAAK8D,MAAMhI,KAAKsX,WAAW1V,EAAI+W,EAAO/W,GACnCqG,IACH/D,EAAK8D,MAAMhI,KAAKsX,WAAWrP,QAAS,GAGrChG,EAAOiC,EAAK0I,IAAM1I,KAGnBlE,KAAK6Y,aAAa5W,EACnB,EACA4W,YAAAA,CAAaF,GACZ,IAAII,EAAU,CAAA,EACdA,EAAQ/Y,KAAK1B,MAAQqa,EACrB3Y,KAAKO,MAAM,eAAgBP,KAAK1B,KAAMya,EACvC,GAEDvY,OAAAA,GACC,IAAIyY,EAAOjZ,KACPkZ,EAAOD,EAAKxY,MAAMmO,UACtBqK,EAAK3B,UAAY6B,SAASC,OAAOC,iBAAiBH,GAAMI,iBAAiB,8BAEzEF,OAAOG,iBAAiB,SAAU,KACjCN,EAAK3B,UAAY6B,SAASC,OAAOC,iBAAiBH,GAAMI,iBAAiB,+BAE3E,EACArW,SAAU,otEC/MXuW,EAAe,CACdrW,WAAY,CACX9E,UACA2Y,cAEDtY,MAAO,CACN,WAEDH,KAAMA,KAAAA,CACLkb,UAAW,CAAA,IAEZ3Z,QAAS,CACR4T,SAAAA,GACC,OAAO,IAAIrS,QAAQ,CAACC,EAAQC,KAC3BvB,KAAKyZ,UAAY,CAACnY,UAAQC,UAC1BvB,KAAKS,MAAMjC,MAAM2B,QAEnB,EACAuZ,KAAAA,GACK1Z,KAAKyZ,UAAUlY,QAClBvB,KAAKyZ,UAAUlY,SAChBvB,KAAKyZ,UAAY,CAAA,CAClB,EACAE,IAAAA,CAAK5L,GACA/N,KAAKyZ,UAAUnY,SAClBtB,KAAKyZ,UAAUnY,QAAQyM,GACxB/N,KAAKyZ,UAAY,CAAA,EACjBzZ,KAAKS,MAAMjC,MAAM0B,MAClB,GAGD+C,SAAU,+yBClCX2W,EAAe,CAQdC,SAAAA,IAAaC,GACZ,MAAMC,EAAWC,GAAOA,GAAsB,iBAARA,EAEtC,OAAOF,EAAQjU,OAAO,CAACoU,EAAMD,KAC5Bxa,OAAO6M,KAAK2N,GAAKpT,QAAQsT,IACxB,MAAMC,EAAOF,EAAKC,GACZE,EAAOJ,EAAIE,GAEb3a,MAAM4I,QAAQgS,IAAS5a,MAAM4I,QAAQiS,GACxCH,EAAKC,GAAOC,EAAKE,UAAUD,GAEnBL,EAASI,IAASJ,EAASK,GACnCH,EAAKC,GAAOla,KAAK6Z,UAAUM,EAAMC,GAGjCH,EAAKC,GAAOE,IAIPH,GACL,CAAA,EACJ,GCZDK,EAAe,CACdC,YAAWA,KACH,CACNC,OAAQ,MACRC,IAAK,6CCfRC,EAAe,CACdpc,KAAM,YACN6E,WAAY,CACXgU,mBACAqC,yBAED9a,MAAO,CACNic,UAAW,CACV/b,KAAME,OACNmY,UAAU,EACVlY,QAAS,OAEV6b,SAAU,CACThc,KAAMY,OACNyX,UAAU,EACVjY,UAAUC,GACFA,GAASA,EAAMX,MAAQW,EAAM4b,KAAO5b,EAAM6b,WAIpDvc,IAAAA,GACC,MAAO,CACNwc,SAAU,GACVnD,QAAS,KACTjC,UAAU,EACVqF,iBAAkBhb,KAAK4a,SAEzB,EACApD,OAAAA,GACC,MAAO,CACN7B,SAAUlU,IAAI6C,SAAS,IAAItE,KAAK2V,UAChC9H,aAAcpM,IAAI6C,SAAS,IAAMtE,KAAK4X,SACtCkD,SAAUrZ,IAAI6C,SAAS,IAAMtE,KAAK4a,SAASE,UAE7C,EACAxW,SAAU,CACT2W,OAAMA,IACE3H,2BAA2BC,SAAWD,2BAA2BE,UAAY,cAGtF1T,QAAS,CACRob,SAAAA,CAAUC,EAAcvP,GACF,OAAjB5L,KAAK4X,SACRhE,MAAMrI,IAAIvL,KAAKib,OAAS,iCAAkC,CAACpH,OAAO,CACjEuH,GAAIpb,KAAK2a,aACN/X,KAAK2G,IACRA,EAAIhL,KAAKuV,OAAOlN,QAAQgF,IACvBA,EAAO+I,UAAY0G,KAAKC,MAAM1P,EAAO+I,WACrC/I,EAAOjK,MAAQ0Z,KAAKC,MAAM1P,EAAOjK,SAElC3B,KAAK4X,QAAUrO,EAAIhL,KAAKuV,SACtBC,MAAMwH,GAAOzT,QAAQC,MAAM,SAAUwT,IAEzCvb,KAAKS,MAAM+a,aAAa9H,YAAY9Q,KAAKmL,IACxCnC,EAAOA,OAASmC,EAChBnC,EAAOgB,GAAK,WAAa9N,QAAQ,IAAI2c,MAAQC,WAC7C,IAAIC,EAAU,IAAI/P,GAClB+P,EAAQA,SAAU,EAClB3b,KAAK+a,SAASnU,QAAQgV,IACjBA,EAAQtd,MAAQ6c,GACnBS,EAAQhE,QAAQtR,KAAKqV,KAGvB/H,MAAMiI,KAAK7b,KAAKib,OAAS,mCAAoC,CAC5DG,GAAIpb,KAAK2a,UACTmB,gBAAiBX,EACjBvD,QAAS,CAAChM,KACRhJ,KAAKX,IACP,IAAI8Z,EAAQvc,OAAO6M,KAAKpK,EAAO1D,KAAKuV,OAAOvV,KAAK4c,GAAcvD,SAAS9L,MACvEF,EAAOgB,GAAKmP,EACZ/b,KAAK+a,SAASnU,QAAQgV,IACjBA,EAAQtd,MAAQ6c,IACnBS,EAAQhE,QAAQoE,OAAOJ,EAAQhE,QAAQ9N,QAAQ6R,GAAS,GACxDC,EAAQhE,QAAQtR,KAAKsF,QAGrBmI,MAAMhM,IACRD,QAAQC,MAAM,UAAWA,GACzBkU,MAAM,UAAYlU,EAAMiM,SAASzV,KAAKuV,YAErCC,MAAM,OACV,EACAmI,YAAAA,CAAaf,EAAcpC,GAE1B,IAAK,IAAIpC,KADToC,EAAUA,EAAQoC,GACK,CACtB,IAAK,IAAIxV,KAAK3F,KAAK+a,SAClB,GAAI/a,KAAK+a,SAASpV,GAAGrH,MAAQ6c,EAAc,CAC1C,IAAK,IAAIgB,KAAOnc,KAAK+a,SAASpV,GAAGiS,QAChC,GAAI5X,KAAK+a,SAASpV,GAAGiS,QAAQuE,GAAKvP,IAAM+J,EAAG,CAG1C,IAAK,IAAIyF,KAFTrD,EAAQpC,GAAKiD,EAAYC,UAAU7Z,KAAK+a,SAASpV,GAAGiS,QAAQuE,GAAMpD,EAAQpC,IAEzD,CAAC0F,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAE1V,MAAM,EAAE8F,GAAG,EAAE6P,OAAO,GACrD1D,EAAQpC,GAAGyF,WACPrD,EAAQpC,GAAGyF,GACpB,KACD,CAED,KACD,CAEDrD,EAAQpC,GAAG9K,SAAW8K,CACvB,CACA/C,MAAMiI,KAAK7b,KAAKib,OAAS,mCAAoC,CAC5DG,GAAIpb,KAAK2a,UACTmB,gBAAiBX,EACjBvD,QAASmB,IACPnW,KAAK,KACP5C,KAAK+a,SAASnU,QAAQgV,IACjBA,EAAQtd,MAAQ6c,GACnBS,EAAQhE,QAAQhR,QAAQ,CAACgF,EAAQjG,KAC5BoT,EAAQnN,EAAOgB,MAClBmM,EAAQnN,EAAOgB,IAAIA,GAAKhB,EAAOgB,GAC/BmM,EAAQnN,EAAOgB,IAAI9F,MAAQ8E,EAAO9E,MAClC8U,EAAQhE,QAAQjS,GAAKoT,EAAQnN,EAAOgB,WAKtCmH,MAAMhM,IAERD,QAAQC,MAAM,UAAWA,GACzBkU,MAAM,UAAYlU,EAAMiM,SAASzV,KAAKuV,SAExC,EACA4I,YAAAA,CAAavB,EAAcvO,GAC1BgH,MAAMiI,KAAK7b,KAAKib,OAAS,uCAAwC,CAChEG,GAAIpb,KAAK2a,UACTmB,gBAAiBX,EACjBtP,SAAUe,IACRhK,KAAK,KACP5C,KAAK+a,SAASnU,QAAQgV,IACjBA,EAAQtd,MAAQ6c,IACnBS,EAAQhE,QAAUgE,EAAQhE,QAAQnO,OAAOmC,GAAUA,EAAOgB,IAAMA,QAEhEmH,MAAMhM,IACRD,QAAQC,MAAM,UAAWA,GACzBkU,MAAM,UAAYlU,EAAMiM,SAASzV,KAAKuV,SAExC,GAED8C,OAAAA,GACC5W,KAAK+X,GAAG4E,aAAa,aACrB/I,MAAMrI,IAAIvL,KAAKib,OAAS,iCAAkC,CACzDpH,OAAQ,CACPuH,GAAIpb,KAAK2a,aAER/X,KAAK2G,IACPvJ,KAAK4X,QAAUrO,EAAIhL,KAAKuV,SACtBC,MAAMwH,GAAOzT,QAAQC,MAAM,SAAUwT,IAExC3H,MAAMrI,IAAIvL,KAAKib,OAAS,UAAW,CAACpH,OAAO,CAC1CuH,GAAIpb,KAAK2a,aACN/X,KAAK2G,IACR,IAAK,IAAIjL,KAAQiL,EAAIhL,KAAKuV,OAAQ,CACjC,IAAI8D,EAAU,GACV/P,EAAS,GACb,IAAK,IAAIsU,KAAO5S,EAAIhL,KAAKuV,OAAOxV,GAAMsZ,QACrCrO,EAAIhL,KAAKuV,OAAOxV,GAAMsZ,QAAQuE,GAAKvP,GAAKuP,EACpC5S,EAAIhL,KAAKuV,OAAOxV,GAAMsZ,QAAQuE,GAAK1D,QAAUlP,EAAIhL,KAAKuV,OAAOxV,GAAMsZ,QAAQuE,GAAKM,OACnF7E,EAAQtR,KAAKiD,EAAIhL,KAAKuV,OAAOxV,GAAMsZ,QAAQuE,IAE3CtU,EAAOvB,KAAK6V,GAEdnc,KAAK+a,SAASzU,KAAK,CAClBhI,KAAMA,EACNsZ,QAASA,IAEV/P,EAAOjB,QAAQuV,GAAOnc,KAAK0c,aAAape,EAAM6d,GAC/C,CACAnc,KAAK+a,SAAW/a,KAAK+a,SAAS3T,KAAK,CAACwV,EAAUC,IACzB,UAAjBD,EAASte,KACJ,EACa,UAAjBue,EAASve,MACL,EACDue,EAASjF,QAAQzR,OAASyW,EAAShF,QAAQzR,UAEjD4N,MAAMwH,GAAOzT,QAAQC,MAAM,SAAUwT,GACzC,EACA,iBAAMuB,GACL,IAAK9c,KAAK4a,SAAStc,OAAS0B,KAAK4a,SAASC,IAAK,CAC9C,MAAMtR,QAAYvJ,KAAK+c,KAAK3H,KAAKkF,EAAaC,eAC9Cva,KAAKgb,iBAAmBzR,EAAIhL,IAC7B,CACD,EACA0E,SAAU,yuBC7KX+Z,EAAe,CACdA,MAAAA,CAAOC,EAAgBxa,GAEtB,OAAOzC,KAAKkd,QAAQrB,KADR,oCACkBoB,EAAgBxa,EAC/C,EACA0a,cAAAA,CAAeF,EAAgBxa,GAE9B,OAAOzC,KAAKkd,QAAQrB,KADR,4CACkBoB,EAAgBxa,EAC/C,EACA2a,WAAAA,CAAYH,GAEX,OAAOjd,KAAKkd,QAAQrB,KADR,yCACkBoB,EAC/B,GCZDI,EAAe,CACdV,YAAAA,CAAaW,GACZ,OAAOtd,KAAKkd,QAAQ3R,IAAI,uCAAyC+R,EAClE,EACAC,WAAAA,CAAYC,EAAWC,GACtB,MAAM1E,EAAU,CAACyE,aAAYC,YAC7B,OAAOzd,KAAKkd,QAAQrB,KAAK,uCAAwC9C,EAClE,EACA2E,WAAAA,GACC,OAAO1d,KAAKkd,QAAQ3R,IAAI,uCAAwC,CAAA,EACjE,EACAoS,oBAAAA,GACC,OAAO3d,KAAKkd,QAAQ3R,IAAI,2CAA4C,CAAA,EACrE,GCbDqS,EAAe,CACdC,SAAAA,CAAUC,GACT,OAAO9d,KAAKkd,QAAQ3R,IACnB,qCACA,CAAEuS,mBAEJ,EACAC,QAAS,SAASD,GACjB,OAAO9d,KAAKkd,QAAQ3R,IACnB,mCACA,CAAEuS,mBAEJ,GCZDE,EAAe,CACdC,gBAAAA,CAAiBC,GAChB,OAAOle,KAAKkd,QAAQrB,KACnB,2CACA,CACCsC,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBC,iBAAkBH,EAASG,kBAG9B,EACAC,kBAAAA,CAAmBJ,GAClB,OAAOle,KAAKkd,QAAQrB,KACnB,6CACA,CACCsC,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,UAGtB,EACAC,iBAAAA,CAAkBN,GACjB,OAAOle,KAAKkd,QAAQrB,KACnB,4CACA,CACCsC,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBK,aAAcP,EAASO,cAG1B,EACAC,cAAAA,CAAeR,GACd,OAAOle,KAAKkd,QAAQrB,KACnB,yCACA,CACCsC,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,aAGzB,EACAC,iBAAAA,CAAkBV,GACjB,OAAOle,KAAKkd,QAAQrB,KACnB,4CACA,CACCsC,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,aAGzB,EACAE,aAAAA,CAAcX,GACb,OAAOle,KAAKkd,QAAQ3R,IACnB,oCACA,CACC4S,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,UAGtB,EACAO,SAAAA,CAAUZ,GACT,OAAOle,KAAKkd,QAAQ3R,IACnB,oCACA,CACC4S,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,YAGxB,GCrEDW,EAAe,CACdC,UAAW,CACVC,UAAAA,CAAWC,EAAWC,GACrB,MAAM1E,EAAM,+CACMvZ,IAAdge,EAA0B,uBAAyBA,EAAY,0BAA4BC,GAC/F,OAAOnf,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACA2E,MAAAA,CAAOC,EAAQF,EAAeG,GAC7B,OAAOtf,KAAKkd,QAAQrB,KAAK,qDAAsD,CAC9E0D,gBAAiBF,EACjBF,gBACAG,SACE,CACFE,cAAe,UAEjB,EACAC,MAAAA,CAAOP,GACN,OAAK3f,MAAM4I,QAAQ+W,GAKZ7d,QAAQqe,WAAWR,EAAU5W,IAAIqX,GAAU3f,KAAKkd,QAAQrB,KAC9D,qDACA,CAAEqD,UAAWS,EAAOC,uBACpB,CAAEC,YAAa,IAAMF,EAAOC,0BAPrB5f,KAAKkd,QAAQrB,KACnB,qDACA,CAAEqD,aAOL,GAEDY,cAAe,CACdb,UAAAA,CAAWC,EAAWC,GACrB,MAAM1E,EAAM,mDACMvZ,IAAdge,EAA0B,uBAAyBA,EAAY,0BAA4BC,GAC/F,OAAOnf,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACA2E,MAAAA,CAAOG,EAAiBJ,EAAeG,EAAOS,EAAsBC,GACnE,OAAOhgB,KAAKkd,QAAQrB,KAAK,yDAA0D,CAClF0D,kBACAJ,gBACAG,QACAS,uBACAC,cACE,CACFR,cAAe,UAEjB,EACAC,MAAAA,CAAOP,GACN,OAAOlf,KAAKkd,QAAQrB,KAAK,yDAA0D,CAClFqD,aACE,CACFM,cAAe,UAEjB,GAEDS,aAAc,CACbhB,UAAAA,CAAWE,GACV,MAAM1E,EAAM,mEAAqE0E,EACjF,OAAOnf,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACAyF,MAAAA,CAAOhB,GACN,MAAMzE,EAAM,mDAAqDyE,EACjE,OAAOlf,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACA2E,MAAAA,CAAOD,EAAeI,GACrB,OAAOvf,KAAKkd,QAAQrB,KAAK,wDAAyD,CACjFsD,gBACAI,mBACE,CACFC,cAAe,UAEjB,EACAC,MAAAA,CAAON,EAAeI,GACrB,OAAOvf,KAAKkd,QAAQrB,KAAK,wDAAyD,CACjFsD,gBACAI,mBACE,CACFC,cAAe,UAEjB,EACAW,OAAAA,CAAQC,EAAcC,GACrB,OAAOrgB,KAAKkd,QAAQrB,KAAK,mDAAoD,CAC5EuE,eACAC,gBAEF,GAEDC,QAAS,CACRC,OAAAA,GACC,OAAOvgB,KAAKkd,QAAQ3R,IAAI,oDACzB,EACAiV,WAAAA,CAAY/F,EAAKhY,EAAQoR,GACxB,OAAO7T,KAAKkd,QACV3R,IAAI,mDAAqDkP,GACzD7X,KAAK2G,GAAOA,EAAIhL,KACnB,EACAkiB,UAAAA,CAAWvB,GACV,OAAOlf,KAAKkd,QAAQ3R,IAAI,kDAAoD2T,EAC7E,EACAwB,cAAAA,CAAeC,EAAOC,GACrB,OAAO5gB,KAAKkd,QAAQrB,KACnB,qDACA,CAAE8E,SACF,CACgCC,OAAQA,EACRC,QAAS,KAG3C,EACAC,OAAAA,CAAQnB,GACP,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,oDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,oDACA8D,EAOH,EACApe,MAAAA,CAAOoe,GACN,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,mDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,mDACA8D,EAOH,EACAoB,MAAAA,CAAOpB,GACN,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,mDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,mDACA8D,EAOH,EACAqB,KAAAA,CAAMrB,GACL,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,kDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,kDACA8D,EAOH,EACAsB,OAAAA,CAAQtB,GACP,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,oDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,oDACA8D,EAOH,EACAuB,MAAAA,CAAOvB,GACN,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,mDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,mDACA8D,EAOH,EACAwB,gBAAAA,CAAiBxB,GAChB,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,uDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,uDACA8D,EAOH,EACAyB,aAAAA,CAAczB,GACb,OAAKpgB,MAAM4I,QAAQwX,GAKZte,QAAQqe,WAAWC,EAAOrX,IAAIjB,GAAKrH,KAAKkd,QAAQrB,KACtD,oDACAxU,EACA,CAAEwY,YAAa,IAAMxY,EAAEuY,0BAPhB5f,KAAKkd,QAAQrB,KACnB,oDACA8D,EAOH,IC5NF0B,EAAe,CAEbC,QAAS,SAAUzG,GACjB,OAAO7a,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,mCAAmCqH,IAAM,CAAA,EAE7C,EAEA0G,WAAY,SAAUtiB,GACpB,OAAOe,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,sCAAsCvU,IACtC,CAAA,EAGJ,EAEAuiB,UAAW,SAAU3G,GACnB,OAAO7a,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oCACA,CACEqH,IAAIA,GAGV,EAEA4G,cAAe,SAAU5G,GACvB,OAAO7a,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCAAyCqH,IACzC,CAAA,EAEJ,EAEA6G,kBAAmB,WACjB,OAAO1hB,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,4CAA4C,GAEhD,EAEAmO,kBAAmB,WACjB,OAAO3hB,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,4CAA4C,GAEhD,EAEAoO,aAAc,SAASC,EAAOC,GAC5B,OAAO9hB,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,wCAAwCqO,KAAUC,IAClD,CAAA,EAGJ,EACAC,eAAe,WACb,OAAO/hB,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCAAyC,GAE7C,GCvEFwO,EAAe;;AAGXC,UAAW,WACP,OAAOjiB,KAAKkd,QAAQ3R,IACpB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,0CAA0C,GAC9C,EAEA0O,SAAU,WACN,OAAOliB,KAAKkd,QAAQ3R,IACpB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCAAyC,GAC7C,EAEA2O,oBAAqB,UAAUC,iBAACA,EAAgBvH,IAAEA,EAAGwH,eAAEA,EAAcC,MAAEA,EAAKC,iBAAEA,IAE5E,OAAOviB,KAAKkd,QAAQrB,KAClBvI,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDAAoD,CAAC4O,mBAAkBvH,MAAKwH,iBAAgBC,QAAOC,oBACvG,EAEAC,kBAAmB,UAAUJ,iBAACA,EAAgBvH,IAAEA,EAAGyH,MAAEA,EAAKD,eAAEA,IAC1D,OAAOriB,KAAKkd,QAAQrB,KAClBvI,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,kDAAkD,CAAC4O,mBAAiBvH,MAAIyH,QAAMD,kBAClF,EAEAI,WAAY,SAAUC,EAAKC,EAAU,MAEnC,OAAO3iB,KAAKkd,QAAQrB,KAClBvI,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,4CAA4CmP,IAC5CD,EAEJ,EAEAE,sBAAuB,SAAUC,GAC/B,OAAO7iB,KAAKkd,QAAQ3R,IAClB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,uDAAuDqP,IAAY,CAAA,EACvE,EAEAC,oBAAqB,SAAUjI,EAAM,KAAMjO,EAAK,MAE5C,OAAO5M,KAAKkd,QAAQ3R,IACpB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,IAAKqH,EAAI,CAACA,OAAK,MACTjO,EAAG,CAACA,MAAI,CAAA,GAElB,EAEAmW,oBAAqB,SAAUT,EAAOvJ,EAASiK,EAAS,MAEtD,OAAOhjB,KAAKkd,QAAQrB,KAClBvI,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,CACE8O,QACAvJ,aACIiK,EAAS,CAAEA,UAAW,CAAA,GAEhC,EAEAC,oBAAqB,SAAUX,EAAOvJ,EAASmK,EAAIF,EAAS,MAE1D,OAAOhjB,KAAKkd,QAAQrB,KAClBvI,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,CACE8O,QACAvJ,UACAmK,QACIF,EAAS,CAAEA,OAAQA,GAAW,CAAA,GAExC,EAEAG,oBAAqB,SAAUN,GAE7B,OAAO7iB,KAAKkd,QAAQrB,KAClBvI,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,oDACA,CACEqP,aAEN,GC/FJO,EAAe,CACdC,WAAAA,CAAYC,EAAYC,EAAYC,GACnC,OAAOxjB,KAAKkd,QAAQrB,KACnB,sCACA,CAAGyH,aAAYC,aAAYC,YAE7B,EACAC,UAAAA,GACC,OAAOzjB,KAAKkd,QAAQ3R,IACnB,kCACA,CAAA,EAEF,EACAmY,oBAAAA,CAAqBJ,EAAYC,EAAYC,GAC5C,OAAOxjB,KAAKkd,QAAQrB,KACnB,6CAA6CyH,IAC7C,CAAEC,aAAYC,YAEhB,EACAG,uBAAAA,CAAwBJ,EAAYC,GACnC,OAAOxjB,KAAKkd,QAAQrB,KACnB,4CACA,CAAE0H,aAAYC,YAEhB,EACAI,6BAAAA,CAA8BC,GAC7B,OAAO7jB,KAAKkd,QAAQ3R,IACnB,yDAAyDsY,IACzD,GAEF,EACAC,2BAAAA,CAA4BC,GAC3B,OAAO/jB,KAAKkd,QAAQ3R,IACnB,uDAAuDwY,IACvD,GAEF,EACAC,YAAAA,CAAaT,EAAYC,EAAUS,GAClC,OAAOjkB,KAAKkd,QAAQ3R,IACnB,uCACA,CAAEgY,aAAYC,WAAUS,SAE1B,GCxBDC,EAAe,CACdC,QCpBc,CACd5Y,GAAAA,GACC,OAAOvL,KAAKkd,QAAQ3R,IAAI,8BACzB,EACA6Y,UAAW,CACV7Y,GAAAA,GACC,OAAOvL,KAAKkd,QAAQ3R,IAAI,gCACzB,EACAC,GAAAA,CAAI4Y,GACH,OAAOpkB,KAAKkd,QAAQrB,KAAK,oCAAqC,CAC7DuI,aAEF,IDSDC,SErBc,CACdxJ,GAAAA,CAAIA,EAAKyJ,GACR,IAAI7J,EAAM,gCACP8J,mBAAmBD,GACnB,QACAC,mBAAmB1J,GACtB,OAAO7a,KAAKkd,QAAQsH,OAAO/J,EAC5B,EACAgK,UAAAA,CAAWtF,EAAemF,GACzB,IAAI7J,EAAM,gCACP8J,mBAAmBD,GACnB,eACAC,mBAAmBpF,GACtB,OAAOnf,KAAKkd,QAAQsH,OAAO/J,EAC5B,EACAiK,MAAAA,CAAOC,EAAWL,GACjB,IAAI7J,EAAM,gCACP8J,mBAAmBD,GACnB,WACAC,mBAAmBI,GACtB,OAAO3kB,KAAKkd,QAAQsH,OAAO/J,EAC5B,EACA0J,OAAAA,CAAQS,GACP,OAAO5kB,KAAKkd,QAAQsH,OAAO,gCAAkCI,EAC9D,GFFAnb,OGtBc,CACdob,MAAAA,GACC,OAAO7kB,KAAKkd,QAAQ3R,IAAI,oCACzB,EACAuZ,MAAAA,CAAOC,GACN,OAAO/kB,KAAKkd,QAAQrB,KAAK,oCAAqC,CAC7DkJ,kBAEF,GHeAC,MIvBc,CACdC,eAAAA,CAAgBxiB,EAAQwW,GAavB,OAZAxW,EAAOyiB,QAAU,gCACjBziB,EAAO0iB,WAAa,KACJ,CACdR,UAAW1L,EAAKmM,WAAWT,WAAa1L,EAAKmM,WAAW9c,IAAI4N,GAAKA,EAAEyO,WACnEU,UAAWpM,EAAKxP,OAChBsb,eAAgB9L,EAAKqM,sBAAwBrM,EAAKsM,OAAS,KAI7D9iB,EAAO+iB,gBAAkB,CAAC/K,EAAKhY,EAAQoR,IAAW7T,KAAKkd,QAAQrB,KAAKpB,EAAK5G,EAAQpR,GACjFA,EAAOgjB,aAAe,CAAChL,EAAK5G,EAAQG,IAAaA,EAASzV,KAEnDkE,CACR,EACAijB,YAAAA,CAAaC,EAAMpnB,GAClB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,yCAA0CpnB,EAAM,CAC9EqnB,oBAAqB7d,IAAS,GAEhC,EACA8d,MAAAA,CAAOF,EAAMpnB,GACZ,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,mCAAoCpnB,EACpE,EACAunB,OAAAA,CAAQvnB,GACP,OAAOyB,KAAKkd,QAAQrB,KAAK,oCAAqCtd,EAC/D,EACAwnB,IAAAA,CAAKJ,EAAMpnB,GACV,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,mCAAoCpnB,EACpE,EACAynB,OAAOC,GACN,OAAOjmB,KAAKkd,QAAQrB,KAAK,mCAAoC,CAACoK,cAC/D,EACAC,gBAAAA,GACC,OAAOlmB,KAAKkd,QAAQ3R,IAAI,6CACzB,GJXA4a,MKxBc,CACdC,UAAAA,CAAW3L,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,0CAA4CsI,EAAOjH,GAC5E,EACAyZ,WAAAA,CAAYxS,GACX,OAAO7T,KAAKkd,QAAQrB,KAAK,4CAA6ChI,EACvE,GLmBAyS,QMzBc,CAEdC,WAAAA,CAAa9L,EAAKhY,EAAQoR,GACzB,OAAO7T,KAAKkd,QAAQ3R,IAAI,2CAA6CsI,EAAOjH,GAC7E,EACA4Z,aAAAA,CAAcb,EAAM/Y,EAAIrO,GACvB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,6CAA+C/Y,EAC7ErO,EAEF,EACAkoB,WAAAA,CAAYC,GACX,OAAO1mB,KAAKkd,QAAQrB,KAAK,2CAA4C,CAAC6K,cACvE,EACAC,aAAAA,CAAchB,EAAMe,EAAYnoB,GAC/B,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,6CAA+Ce,EAC7EnoB,EAEF,EACAqoB,aAAAA,CAAcF,GACb,OAAO1mB,KAAKkd,QAAQrB,KAAK,6CAA8C,CAAC6K,cACzE,EACAG,SAAAA,CAAUC,GACT,OAAO9mB,KAAKkd,QAAQ3R,IAAI,yCAA2Cub,EACpE,EACAC,SAAAA,CAAUC,GACT,OAAOhnB,KAAKkd,QAAQ3R,IAAI,yCAA2Cyb,EACpE,EACAC,UAAAA,GACC,OAAOjnB,KAAKkd,QAAQ3R,IAAI,0CACzB,EACA2b,gBAAAA,GACC,OAAOlnB,KAAKkd,QAAQ3R,IAAI,gDACzB,EAGA4b,iBAAAA,CAAmB1M,EAAKhY,EAAQoR,GAC/B,OAAO7T,KAAKkd,QAAQ3R,IAAI,iDAAmDsI,EAAOjH,GACnF,EACAwa,oBAAAA,CAAqBzB,EAAM/Y,EAAIrO,GAC9B,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,oDAAsD/Y,EACpFrO,EAEF,EACA8oB,kBAAAA,CAAmBC,GAClB,OAAOtnB,KAAKkd,QAAQrB,KAAK,kDAAmD,CAACyL,qBAC9E,EACAC,oBAAAA,CAAqB5B,EAAM2B,EAAmB/oB,GAC7C,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,oDAAsD2B,EACpF/oB,EAEF,EACAipB,oBAAAA,CAAqBF,GACpB,OAAOtnB,KAAKkd,QAAQrB,KAAK,oDAAqD,CAACyL,qBAChF,EAGAG,WAAAA,CAAahN,EAAKhY,EAAQoR,GACzB,OAAO7T,KAAKkd,QAAQ3R,IAAI,2CAA6CsI,EAAOjH,GAC7E,EACA8a,aAAAA,CAAc/B,EAAM/Y,EAAIrO,GACvB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,6CAA+C/Y,EAC7ErO,EAEF,EACAopB,WAAAA,CAAYC,GACX,OAAO5nB,KAAKkd,QAAQrB,KAAK,2CAA4C,CAAC+L,cACvE,EACAC,aAAAA,CAAclC,EAAMiC,EAAYrpB,GAC/B,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,6CAA+CiC,EAC7ErpB,EAEF,EACAupB,aAAAA,CAAcF,GACb,OAAO5nB,KAAKkd,QAAQrB,KAAK,6CAA8C,CAAC+L,cACzE,EACAG,mBAAAA,CAAoBf,GACnB,OAAOhnB,KAAKkd,QAAQ3R,IAAI,mDAAqDyb,EAC9E,EACAgB,eAAAA,GACC,OAAOhoB,KAAKkd,QAAQ3R,IAAI,+CACzB,cChFc,CAIdA,GAAAA,CAAI4T,EAAemF,GAClB,OAAQtkB,KAAKkd,QAAQrB,KACpB,sCACE0I,mBAAmBpF,GACnB,IACAoF,mBAAmBD,GAEvB,EACA2D,gBAAAA,CAAiBtC,EAAMxG,EAAe5gB,GACrC,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,mDAAqDxG,EACnF5gB,EAEF,EACA2pB,iBAAAA,GACC,OAAOloB,KAAKkd,QAAQ3R,IAAI,oDACzB,EACA4c,kBAAAA,GACC,OAAOnoB,KAAKkd,QAAQ3R,IAAI,qDACzB,EACA6c,kBAAAA,GACC,OAAOpoB,KAAKkd,QAAQ3R,IAAI,qDACzB,EACAgV,OAAAA,GACC,OAAOvgB,KAAKkd,QAAQ3R,IAAI,qCACzB,EACA8c,aAAAA,GACC,OAAOroB,KAAKkd,QAAQ3R,IAAI,gDACzB,EACA+c,kBAAAA,GACC,OAAOtoB,KAAKkd,QAAQ3R,IAAI,qDACzB,EACAgd,mBAAAA,GACC,OAAOvoB,KAAKkd,QAAQ3R,IAAI,sDACzB,EACAid,WAAAA,GACC,OAAOxoB,KAAKkd,QAAQ3R,IAAI,8CACzB,EACAkd,cAAAA,GACC,OAAOzoB,KAAKkd,QAAQ3R,IAAI,iDACzB,EAGAmd,oBAAAA,CAAsBjO,EAAKhY,EAAQoR,GAClC,OAAO7T,KAAKkd,QAAQ3R,IAAI,mDAAqDsI,EAAOjH,GACrF,EACA+b,SAAAA,CAAUC,GACT,OAAQ5oB,KAAKkd,QAAQrB,KAAK,6CAA8C,CAAC+M,mBAC1E,EACAC,aAAAA,EAAc1J,cAACA,EAAa2J,cAAEA,EAAaxE,uBAAEA,EAAsByE,oBAAEA,IACpE,OAAO/oB,KAAKkd,QAAQrB,KAAK,4CACtBsD,EAAgB,IAChB2J,EAAgB,IAChBxE,EAAyB,IACzByE,EAEJ,EACAC,aAAAA,EAAc7J,cAACA,EAAa2J,cAAEA,EAAaxE,uBAAEA,EAAsByE,oBAAEA,IACpE,OAAO/oB,KAAKkd,QAAQrB,KAAK,4CACtBsD,EAAgB,IAChB2J,EAAgB,IAChBxE,EAAyB,IACzByE,EAEJ,EACAE,YAAAA,CAAarc,GACZ,OAAO5M,KAAKkd,QAAQ3R,IAAI,2CAA6CqB,EACtE,EACAsc,YAAAA,EAAa/J,cAACA,EAAa2J,cAAEA,EAAaxE,uBAAEA,EAAsByE,oBAAEA,IACnE,OAAO/oB,KAAKkd,QAAQrB,KAAK,2CACtBsD,EAAgB,IAChB2J,EAAgB,IAChBxE,EAAyB,IACzByE,EAEJ,EACAI,uBAAAA,GACC,OAAOnpB,KAAKkd,QAAQ3R,IAAI,sDACzB,EAGA6d,qBAAAA,CAAuB3O,EAAKhY,EAAQoR,GACnC,OAAO7T,KAAKkd,QAAQ3R,IAAI,wDAA0DsI,EAAOjH,GAC1F,GP3DAyc,OQ3Bc,CAIdC,YAAAA,CAAa3D,EAAM/Y,EAAIrO,GACtB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,2CAA6C/Y,EAC3ErO,EAEF,EACAgrB,UAAAA,EAAWpK,cAACA,EAAa2J,cAAEA,EAAaxE,uBAAEA,EAAsByE,oBAAEA,IACjE,OAAO/oB,KAAKkd,QAAQrB,KACnB,yCACEsD,EAAgB,IAChB2J,EAAgB,IAChBxE,EAAyB,IACzByE,EAEJ,EACAS,YAAAA,CAAa7D,GAAMxG,cAACA,EAAa2J,cAAEA,EAAaxE,uBAAEA,EAAsByE,oBAAEA,GAAsBxqB,GAC/F,OAAOyB,KAAKkd,QAAQrB,KACnB8J,EACA,2CACExG,EAAgB,IAChB2J,EAAgB,IAChBxE,EAAyB,IACzByE,EACFxqB,EAEF,EACAkrB,gBAAAA,CAAiBtK,GAChB,OAAOnf,KAAKkd,QAAQ3R,IAAI,mDAAqD4T,EAC9E,EACAuK,cAAAA,CAAevK,GACd,OAAOnf,KAAKkd,QAAQ3R,IAAI,iDAAmD4T,EAC5E,EACAwK,gBAAAA,GACC,OAAO3pB,KAAKkd,QAAQ3R,IAAI,+CACzB,EACAqe,QAAAA,GACC,OAAO5pB,KAAKkd,QAAQ3R,IAAI,sCACzB,EAIAse,UAAAA,CAAWjd,EAAIrO,GACd,OAAOyB,KAAKkd,QAAQrB,KAAK,yCAA2CjP,EACnErO,EACA,CAACshB,YAAajT,GAEhB,EACAkd,YAAAA,CAAald,EAAIrO,GAChB,OAAOyB,KAAKkd,QAAQrB,KAAK,2CAA6CjP,EACrErO,EACA,CAACshB,YAAajT,GAEhB,EACAmd,cAAAA,GACC,OAAO/pB,KAAKkd,QAAQ3R,IAAI,6CACzB,GR9BAye,QS5Bc,CACdze,GAAAA,CAAI4T,EAAemF,GAClB,IAAI7J,EAAM,mCACP8J,mBAAmBpF,GACnB,IACAoF,mBAAmBD,GACtB,OAAOtkB,KAAKkd,QAAQrB,KAAKpB,EAC1B,EACAwP,IAAAA,CAAKtE,EAAMxG,EAAemF,EAAwB/lB,GACjD,IAAIkc,EAAM,oCACP8J,mBAAmBpF,GACnB,IACAoF,mBAAmBD,GACtB,OAAOtkB,KAAKkd,QAAQrB,KAAK8J,EAAMlL,EAAKlc,EACrC,GTeA2rB,KU7Bc,CACdC,aAAAA,CAAc1P,EAAKhY,EAAQoR,GAC1B,OAAO7T,KAAKkd,QAAQ3R,IAAI,8CAAgDsI,EAAOjH,GAChF,EACAwd,YAAAA,CAAaC,GACZ,OAAOrqB,KAAKkd,QAAQ3R,IAAI,6CAA+C8e,EACxE,EACAC,kBAAAA,GACC,OAAOtqB,KAAKkd,QAAQ3R,IAAI,kDACzB,EACAgf,mBAAAA,CAAoBhsB,GACnB,OAAOyB,KAAKkd,QAAQrB,KAAK,oDAAqDtd,EAC/E,EACAisB,eAAAA,CAAgB3P,GACf,OAAO7a,KAAKkd,QAAQ3R,IAAI,gDAAkDsP,EAC3E,EACA4P,qBAAAA,CAAsB5P,EAAK6P,GAC1B,OAAO1qB,KAAKkd,QAAQ3R,IAAI,sDAAwDsP,EAAM,IAAM6P,EAC7F,EACAC,YAAAA,CAAa9P,GACZ,OAAO7a,KAAKkd,QAAQ3R,IAAI,6CAA+CsP,EACxE,EACA+P,gBAAAA,CAAiBhe,GAChB,OAAO5M,KAAKkd,QAAQ3R,IAAI,iDAAmDqB,EAC5E,EACAie,QAAAA,GACC,OAAO7qB,KAAKkd,QAAQ3R,IAAI,wCACzB,EACAuf,kBAAAA,CAAmBvsB,GAClB,OAAQyB,KAAKkd,QAAQrB,KAAK,mDAAoDtd,EAC/E,EACAwsB,WAAAA,CAAYpF,EAAMpnB,GACjB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,+CAAiDpnB,EAChF,EACAysB,cAAAA,CAAerF,EAAM/Y,EAAIrO,GACxB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,+CAAiD/Y,EAAKrO,EACrF,EACA0sB,cAAAA,CAAere,GACd,OAAO5M,KAAKkd,QAAQrB,KAAK,+CAAiDjP,EAC3E,GVTAse,kBW9Bc,CAEdC,oBAAAA,CAAsB1Q,EAAKhY,EAAQoR,GAClC,OAAO7T,KAAKkd,QAAQ3R,IAAI,8DAAgEsI,EAAOjH,GAChG,EACAwe,uBAAAA,CAAwBzF,EAAMpnB,GAC7B,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,iEAAkEpnB,EAElG,EACA8sB,qBAAAA,CAAsBze,GACrB,OAAO5M,KAAKkd,QAAQrB,KAAK,+DAAgE,CAACjP,MAC3F,EACA0e,uBAAAA,CAAwB3F,EAAMpnB,GAC7B,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,iEAAkEpnB,EAElG,EACAgtB,uBAAAA,CAAwB3e,GACvB,OAAO5M,KAAKkd,QAAQrB,KAAK,iEAAkE,CAACjP,MAC7F,EACA4e,yBAAAA,GACC,OAAOxrB,KAAKkd,QAAQ3R,IAAI,mEACzB,EACAkgB,gBAAAA,GACC,OAAOzrB,KAAKkd,QAAQ3R,IAAI,0DACzB,EACAmgB,gBAAAA,GACC,OAAO1rB,KAAKkd,QAAQ3R,IAAI,0DACzB,EACAogB,YAAAA,CAAa5G,GACZ,OAAO/kB,KAAKkd,QAAQrB,KAAK,sDAAuD,CAACkJ,kBAClF,EACA6G,iBAAAA,CAAkB7G,GACjB,OAAO/kB,KAAKkd,QAAQrB,KAAK,2DAA4D,CAACkJ,kBACvF,EACA8G,cAAAA,CAAe7E,GACd,OAAOhnB,KAAKkd,QAAQ3R,IAAI,wDAA0Dyb,EACnF,EACA8E,UAAAA,CAAW9E,GACV,OAAOhnB,KAAKkd,QAAQ3R,IAAI,oDAAsDyb,EAC/E,EACA6D,QAAAA,GACC,OAAO7qB,KAAKkd,QAAQ3R,IAAI,kDACzB,EACAwgB,qBAAAA,CAAsBC,GACrB,OAAOhsB,KAAKkd,QAAQrB,KAAK,+DAAgE,CAACmQ,QAE3F,GXfAC,OY/Bc,CACdC,IAAAA,GACC,OAAOlsB,KAAKkd,QAAQ3R,IAAI,kCACzB,EACA4gB,cAAAA,CAAehN,EAAemF,GAC7B,IAAI7J,EAAM,6CAA+C8J,mBAAmBpF,GAI5E,OAHMmF,IACL7J,EAAMA,EAAM,IAAM8J,mBAAmBD,IAE/BtkB,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACA2R,kBAAAA,CAAmBjN,EAAemF,GACjC,IAAI7J,EAAM,iDAAmD8J,mBAAmBpF,GAIhF,OAHMmF,IACL7J,EAAMA,EAAM,IAAM8J,mBAAmBD,IAE/BtkB,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACA4R,iBAAAA,CAAkBlN,EAAemF,GAChC,IAAI7J,EAAM,gDAAkD8J,mBAAmBpF,GAI/E,OAHMmF,IACL7J,EAAMA,EAAM,IAAM8J,mBAAmBD,IAE/BtkB,KAAKkd,QAAQ3R,IAAIkP,EACzB,EACA6R,iBAAAA,EAAkBC,qBAACA,EAAoBC,YAAEA,EAAWlI,uBAAEA,EAAsBmI,KAAEA,EAAIC,8BAAEA,IACnF,OAAO1sB,KAAKkd,QAAQrB,KACnB,+CACA,CACC0Q,uBACAC,cACAlI,yBACAmI,QAED,CACC5M,YAAa6M,GAGhB,EACAC,iBAAAA,EAAkBJ,qBAACA,EAAoBC,YAAEA,EAAWlI,uBAAEA,EAAsBoI,8BAAEA,IAC7E,OAAO1sB,KAAKkd,QAAQrB,KACnB,+CACA,CACC0Q,uBACAC,cACAlI,0BAED,CACCzE,YAAa6M,GAGhB,EACAE,gCAAAA,EAAiCL,qBAACA,EAAoBC,YAAEA,EAAWlI,uBAAEA,EAAsBoI,8BAAEA,IAC5F,OAAO1sB,KAAKkd,QAAQrB,KACnB,8DACA,CACC0Q,uBACAC,cACAlI,0BAED,CACCzE,YAAa6M,GAGhB,EACAG,8BAAAA,EAA+BC,wCAACA,EAAuCC,eAAEA,IACxE,OAAO/sB,KAAKkd,QAAQrB,KACnB,4DACA,CACCiR,2CAED,CACCjN,YAAakN,GAGhB,EACAC,kBAAAA,CAAmBC,EAAQV,EAAsBjI,EAAwB4I,GACxE,MAAMzqB,EAASyqB,EAAsB,CAAC1N,eAAe,GAAS,CAAA,EAC9D,OAAOxf,KAAKkd,QAAQrB,KAAK,gDACxB,CACCoR,OAAUA,EACVV,qBAAwBA,EACxBjI,uBAA0BA,GAE3B7hB,EAEF,GZtDA0qB,SahCc,CACdC,eAAAA,CAAiB3S,EAAKhY,EAAQoR,GAC7B,OAAO7T,KAAKkd,QAAQ3R,IAAI,gDAAkDsI,EAAOjH,GAClF,EACAygB,mBAAAA,GACC,OAAOrtB,KAAKkd,QAAQ3R,IAAI,oDACzB,EACA+hB,cAAAA,CAAe3H,EAAMpnB,GACpB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,+CAAgDpnB,EAChF,EACAgvB,YAAAA,CAAaC,GACZ,OAAOxtB,KAAKkd,QAAQ3R,IAAI,6CAA+CiiB,EACxE,EACAC,cAAAA,CAAe9H,EAAMpnB,GACpB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,+CAAgDpnB,EAChF,EACAmvB,cAAAA,CAAeF,GACd,OAAOxtB,KAAKkd,QAAQrB,KAAK,+CAAiD2R,EAC3E,EACAG,SAAAA,CAAU5I,GACT,OAAO/kB,KAAKkd,QAAQ3R,IAAI,0CAA4CwZ,EACrE,EACAwF,mBAAAA,CAAoBhsB,GACnB,OAAOyB,KAAKkd,QAAQrB,KAAK,oDAAqDtd,EAC/E,EACAksB,qBAAAA,CAAsB5P,GACrB,OAAO7a,KAAKkd,QAAQ3R,IAAI,sDAAwDsP,EACjF,EACA+S,WAAAA,CAAYnT,EAAKhY,EAAQoR,GACxB,OAAO7T,KAAKkd,QAAQ3R,IAAI,4CAA8CsI,EAAOjH,GAC9E,EACAihB,WAAAA,CAAYpT,EAAKhY,EAAQoR,GACxB,OAAO7T,KAAKkd,QAAQ3R,IAAI,4CAA8CsI,EAAOjH,GAC9E,EACAkhB,eAAAA,GACC,OAAO9tB,KAAKkd,QAAQ3R,IAAI,gDACzB,EACAwiB,eAAAA,GACC,OAAO/tB,KAAKkd,QAAQ3R,IAAI,gDACzB,EACAyiB,qBAAAA,CAAsBna,GACrB,OAAO7T,KAAKkd,QAAQrB,KAAK,sDAAwDhI,EAAO2Z,SAAU3Z,EACnG,EACAoa,kBAAAA,CAAmBpa,GAClB,OAAO7T,KAAKkd,QAAQrB,KAAK,mDAAqDhI,EAAO2Z,SAAU3Z,EAChG,EACAqa,qBAAAA,CAAsBra,GACrB,OAAO7T,KAAKkd,QAAQrB,KAAK,sDAAwDhI,EAAO2Z,SAAU3Z,EACnG,EACAsa,kBAAAA,CAAmBta,GAClB,OAAO7T,KAAKkd,QAAQrB,KAAK,mDAAqDhI,EAAO2Z,SAAU3Z,EAChG,GblBAua,OcjCc,CACdnJ,eAAAA,CAAgBxiB,EAAQwW,GAWvB,OAVAxW,EAAOyiB,QAAU,iCACjBziB,EAAO0iB,WAAa,KACJ,CACdR,UAAW1L,EAAKmM,WAAWT,WAAa1L,EAAKmM,WAAW9c,IAAI4N,GAAKA,EAAEyO,aAIrEliB,EAAO+iB,gBAAkB,CAAC/K,EAAKhY,EAAQoR,IAAW7T,KAAKkd,QAAQrB,KAAKpB,EAAK5G,EAAQpR,GACjFA,EAAOgjB,aAAe,CAAChL,EAAK5G,EAAQG,IAAaA,EAASzV,KAEnDkE,CACR,EACA4rB,iBAAAA,GACC,OAAOruB,KAAKkd,QAAQrB,KAAK,+CAC1B,EACAyS,OAAAA,CAAQ/vB,GACP,OAAOyB,KAAKkd,QAAQrB,KACnB,oCACAtd,EAEF,EACAgwB,aAAAA,CAAchwB,GACb,OAAOyB,KAAKkd,QAAQrB,KACnB,0CACAtd,EAEF,EACAoa,MAAAA,CAAOpa,GACN,OAAOyB,KAAKkd,QAAQrB,KAAK,oCAAqCtd,EAC/D,EACAynB,QAAOwI,QAACA,EAAOzJ,eAAEA,IAChB,OAAO/kB,KAAKkd,QAAQrB,KAAK,oCAAqC,CAAC2S,UAASzJ,kBACzE,GdAA0J,UelCc,CACdC,sBAAAA,CAAuBjU,EAAKhY,EAAQoR,GACnC,OAAO7T,KAAKkd,QAAQ3R,IAAI,wDAA0DsI,EAAOjH,GAAK,IAAMiH,EAAOkR,eAC5G,EACA4J,oBAAAA,CAAqBlU,EAAKhY,EAAQoR,GACjC,OAAO7T,KAAKkd,QAAQ3R,IAAI,sDAAwDsI,EAAOjH,GAAK,IAAMiH,EAAOkR,eAC1G,EACA6J,eAAAA,CAAgB/a,GACf,OAAO7T,KAAKkd,QAAQrB,KAAK,iDAAmDhI,EAAOsL,cAAgB,IAAMtL,EAAOgb,gBACjH,EACAC,eAAAA,CAAgBjb,GACf,OAAO7T,KAAKkd,QAAQrB,KAAK,iDACtBhI,EAAOsL,cAAgB,IACvBtL,EAAOgb,gBACX,EACAE,QAAAA,CAASP,GACR,OAAOxuB,KAAKkd,QAAQ3R,IAAI,0CAA4CijB,EACrE,EACAQ,WAAAA,GACC,OAAOhvB,KAAKkd,QAAQ3R,IAAI,6CACzB,EACA0jB,UAAAA,CAAWT,EAASjwB,GACnB,OAAOyB,KAAKkd,QAAQrB,KAAK,4CAA8C2S,EACtEjwB,EACF,EACA2wB,UAAAA,CAAWV,GACV,OAAOxuB,KAAKkd,QAAQrB,KAAK,4CAA8C2S,EACxE,EACAW,UAAAA,CAAWhQ,EAAe5gB,GACzB,OAAOyB,KAAKkd,QAAQrB,KAAK,gDAAkDsD,EAC1E5gB,EACF,GfIA6wB,WgBnCc,CACdC,eAAAA,CAAgB5U,EAAKhY,EAAQoR,GAC5B,OAAO7T,KAAKkd,QAAQ3R,IAAI,oDAAsDsI,EAAOjH,GACtF,EACA0iB,sBAAAA,CAAuBnQ,GACtB,OAAOnf,KAAKkd,QAAQ3R,IAAI,2DAA6D4T,EACtF,EACAoQ,gBAAAA,GACC,OAAOvvB,KAAKkd,QAAQ3R,IAAI,qDACzB,EACAikB,gBAAAA,CAAiBvL,GAChB,OAAOjkB,KAAKkd,QAAQ3R,IAAI,qDAAuD0Y,EAChF,EACAwL,WAAAA,CAAY1K,GACX,OAAO/kB,KAAKkd,QAAQ3R,IAAI,gDAAkDwZ,EAC3E,EACA2K,gBAAAA,CAAiB/J,EAAMpnB,GACtB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,qDAAsDpnB,EACtF,EACAoxB,cAAAA,CAAeC,GACd,OAAO5vB,KAAKkd,QAAQ3R,IAAI,mDAAqDqkB,EAC9E,EACAC,cAAAA,CAAelK,EAAMpnB,GACpB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAM,qDAAsDpnB,EACtF,EACAuxB,gBAAAA,CAAiBF,GAChB,OAAO5vB,KAAKkd,QAAQrB,KAAK,qDAAuD+T,EACjF,GhBSAG,aiBpCc,CACdC,UAAAA,CAAWvV,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,oDAAsDsI,EAAOjH,GACtF,EACAqjB,gBAAAA,GACC,OAAOjwB,KAAKkd,QAAQ3R,IAAI,0DACzB,EACA2kB,kBAAAA,GACC,OAAOlwB,KAAKkd,QAAQ3R,IAAI,4DACzB,EACA4kB,gBAAAA,GACC,OAAOnwB,KAAKkd,QAAQ3R,IAAI,6DACzB,EACA6kB,cAAAA,GACC,OAAOpwB,KAAKkd,QAAQ3R,IAAI,0DACzB,EACA8kB,kBAAAA,GACC,OAAOrwB,KAAKkd,QAAQ3R,IAAI,4DACzB,EACA+kB,SAAAA,CAAU1jB,GACT,OAAO5M,KAAKkd,QAAQ3R,IAAI,oDAAsDqB,EAC/E,EACA2jB,WAAAA,CAAY5K,EAAMpnB,GACjB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,sDAAuDpnB,EACtF,EACAiyB,WAAAA,CAAY7K,EAAMpnB,GACjB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,sDAAuDpnB,EACtF,EACAkyB,WAAAA,CAAY7jB,GACX,OAAO5M,KAAKkd,QAAQrB,KAAK,sDAAwDjP,EAClF,GjBOA8jB,WkBrCc,CACdC,aAAAA,CAAclW,EAAKhY,EAAQoR,GAE1B,OAAO7T,KAAKkd,QAAQ3R,IAAI,gDACrBsI,EAAO2Y,YAAc,IACrB3Y,EAAO0P,WAAa,IACpB1P,EAAO2P,SAAW,IAClB3P,EAAO+c,uBAAyB,IAChC/c,EAAOgd,mBAEX,EACAX,kBAAAA,GACC,OAAOlwB,KAAKkd,QAAQ3R,IAAI,oDACzB,GlByBAulB,aAAAA,GACC,OAAO9wB,KAAKkd,QAAQ3R,IAAI,qCACzB,EACAwlB,cAAAA,GACC,OAAO/wB,KAAKkd,QAAQ3R,IAAI,sCACzB,GmB3CDylB,EAAe,CACdC,UAAAA,CAAYxW,EAAKhY,EAAQoR,GACxB,OAAO7T,KAAKkd,QAAQ3R,IAAI,gDAAkDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACpG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,4CACzB,EACA4lB,WAAAA,CAAYxL,EAAM/Y,EAAIwkB,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK8J,EAAK,iDAAmD/Y,EAChFwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,+CAAgD,CACxEyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,mDAAoD,CAC5EyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,iDAAkD,CAC1EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAY/L,EAAM2L,EAAUF,GAC3B,OAAOpxB,KAAKkd,QAAQrB,KAAK8J,EAAK,iDAAmD2L,EAChFF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,oDAAsDtG,EAC/E,EACA0sB,YAAAA,CAAa/kB,EAAI6kB,GAChB,OAAOzxB,KAAKkd,QAAQ3R,IAAI,kDACzB,GCvCDkZ,EAAe,CACdwM,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,oDAAsDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACxG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,gDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,qDAAuDjP,EAC/EwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,mDAAoD,CAC5EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,uDAAwD,CAChFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,qDAAsD,CAC9EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,qDAAuDyV,EAC/EF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,wDAA0DtG,EACnF,GCpCD2sB,EAAe,CACdX,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,qDAAuDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACzG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,iDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,sDAAwDjP,EAChFwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,oDAAqD,CAC7EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,wDAAyD,CACjFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,sDAAuD,CAC/EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,sDAAwDyV,EAChFF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,yDAA2DtG,EACpF,GCpCD4sB,EAAe,CACdZ,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,iDAAmDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACrG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,6CACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,kDAAoDjP,EAC5EwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,gDAAiD,CACzEyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,oDAAqD,CAC7EyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,kDAAmD,CAC3EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,kDAAoDyV,EAC5EF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,qDAAuDtG,EAChF,GCzBD6sB,EAAe,QACdpN,EACAD,aACAmN,cACAG,WCfc,CACdd,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,oDAAsDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACxG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,gDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,qDAAuDjP,EAC/EwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,mDAAoD,CAC5EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,uDAAwD,CAChFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,qDAAsD,CAC9EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,qDAAuDyV,EAC/EF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,wDAA0DtG,EACnF,GDpBA+sB,WEhBc,CACdf,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,oDAAsDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACxG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,gDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,qDAAuDjP,EAC/EwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,mDAAoD,CAC5EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,uDAAwD,CAChFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,qDAAsD,CAC9EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,qDAAuDyV,EAC/EF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,wDAA0DtG,EACnF,GFnBAgtB,YGjBc,CACdhB,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,qDAAuDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACzG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,iDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,sDAAwDjP,EAChFwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,oDAAqD,CAC7EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,wDAAyD,CACjFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,sDAAuD,CAC/EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,sDAAwDyV,EAChFF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,yDAA2DtG,EACpF,GHlBA4sB,UACAK,aInBc,CACdjB,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,sDAAwDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KAC1G,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,kDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,uDAAyDjP,EACjFwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,qDAAsD,CAC9EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,yDAA0D,CAClFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,uDAAwD,CAChFyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,uDAAyDyV,EACjFF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,0DAA4DtG,EACrF,GJhBAktB,YKpBc,CACdlB,UAAAA,CAAWxW,EAAKhY,EAAQoR,GACvB,OAAO7T,KAAKkd,QAAQ3R,IAAI,qDAAuDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KACzG,EACAsyB,MAAAA,GACC,OAAOlxB,KAAKkd,QAAQ3R,IAAI,iDACzB,EACA4lB,WAAAA,CAAYvkB,EAAIwkB,GACf,OAAOpxB,KAAKkd,QAAQrB,KAAK,sDAAwDjP,EAChFwkB,EAEF,EACAC,SAAAA,CAAUC,GACT,OAAOtxB,KAAKkd,QAAQrB,KAAK,oDAAqD,CAC7EyV,YAEF,EACAC,aAAAA,CAAcD,GACb,OAAOtxB,KAAKkd,QAAQrB,KAAK,wDAAyD,CACjFyV,YAEF,EACAE,WAAAA,CAAYF,EAAUG,EAAS7kB,GAC9B,OAAO5M,KAAKkd,QAAQrB,KAAK,sDAAuD,CAC/EyV,WACAG,UACA7kB,MAEF,EACA8kB,WAAAA,CAAYJ,EAAUF,GACrB,OAAOpxB,KAAKkd,QAAQrB,KAAK,sDAAwDyV,EAChFF,EAEF,EACAvF,cAAAA,CAAe5mB,GACd,OAAOjF,KAAKkd,QAAQ3R,IAAI,yDAA2DtG,EACpF,IClCDmtB,EAAe,CACd1N,OCHc,CACd2N,oBAAAA,CAAqB5X,EAAKhY,EAAQoR,GACjC,OAAO7T,KAAKkd,QAAQ3R,IAAI,uEAAyEsI,EAAOjV,KAAO,IAAMiV,EAAOjH,GAC7H,EACA0lB,oBAAAA,CAAqB3M,EAAMhB,EAAWyM,GACrC,OAAOpxB,KAAKkd,QAAQrB,KAAK8J,EAAM,uEAC9BhB,EAAWyM,EAEb,EACAmB,kBAAAA,CAAmBC,GAClB,OAAOxyB,KAAKkd,QAAQrB,KAAK,qEAAuE2W,EACjG,EACAC,oBAAAA,CAAqB9M,EAAM6M,EAAyBpB,GACnD,OAAOpxB,KAAKkd,QAAQrB,KAAK8J,EAAM,uEAAyE6M,EACvGpB,EACF,EACAsB,oBAAAA,CAAqBF,GACpB,OAAOxyB,KAAKkd,QAAQrB,KAAK,uEAAyE2W,EACnG,EACAG,sBAAAA,GACC,OAAO3yB,KAAKkd,QAAQ3R,IAAI,yEACzB,EACAqnB,iBAAAA,CAAkBjS,GACjB,OAAO3gB,KAAKkd,QAAQ3R,IAAI,oEAAsEoV,EAC/F,ICxBDkS,EAAe,CACdC,wBAAAA,CAAyBnO,EAAWoO,GAEnC,IACC,MAAMha,EAAU,CAAC4L,YAAWqO,OAAQD,GAC9BtY,EAAM,oEACZ,OAAOza,KAAKkd,QAAQrB,KAAKpB,EAAK1B,EAAS,KACxC,CAAE,MAAOhR,GACR,MAAMA,CACP,CAED,EACAkrB,YAAAA,CAAala,EAASma,EAAO,IAE5B,IACC,MAAMzY,EAAMyY,EAAO,wDACnB,OAAOtf,MAAMiI,KAAKpB,EAAK1B,EACxB,CAAE,MAAOhR,GACR,MAAMA,CACP,CAED,GCrBDorB,EAAe,CACbC,YAAAA,CAAaC,GACb,OAAOrzB,KAAKkd,QAAQ3R,IACV+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,iCACT,CAAE8P,WAAY+P,GAEhB,EACAC,QAAAA,CAASC,EAAOC,EAAKC,EAAKC,EAAKC,EAAiB,GAC/C,OAAO3zB,KAAKkd,QAAQ3R,IACnB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,gCACA,CAAE+f,QAAOC,MAAKC,MAAKC,MAAKC,kBAE1B,EACAC,YAAAA,GACC,OAAO5zB,KAAKkd,QAAQ3R,IACnB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,gCAEF,GCvBDqgB,EAAe,CACXC,OAAAA,CAAQC,EAAYC,EAAQ,KAAMC,EAAQ,KAAMC,EAAS,MACrD,OAAOl0B,KAAKkd,QAAQ3R,IACzB,+BACA,CACCwoB,WAAYA,KACRC,EAAQ,CAACA,WAAS,MAClBC,EAAQ,CAACA,WAAS,MAClBC,EAAS,CAACA,YAAU,CAAA,GAGxB,EAEHC,OAAAA,CAAQC,EAAO,EAAGC,EAAY,GAAIJ,GACjC,OAAOj0B,KAAKkd,QAAQ3R,IACnB,+BACA,CACC6oB,OACAC,YACAJ,WAGH,EAEAK,IAAAA,CAAKC,GACJ,OAAOv0B,KAAKkd,QAAQ3R,IACnB,4BACA,CACCgpB,MAAOA,GAGV,EACAC,gBAAiB,WAChB,OAAOx0B,KAAKkd,QAAQ3R,IACnB,uCACA,CAAA,EAEF,EACAkpB,aAAc,WACb,OAAOz0B,KAAKkd,QAAQ3R,IACnB,iDACA,CAAA,EAEF,GC3CDmpB,EAAe,CACXC,gBAAAA,CAAiB9Q,GACX,OAAO7jB,KAAKkd,QAAQ3R,IAChB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,yCACA,CAAEqQ,eAAgBA,GAE1B,EACL+Q,SAAAA,CAAUtQ,EAAwBiI,GACjC,OAAOvsB,KAAKkd,QAAQ3R,IACnB,6BAA6B+Y,KAA0BiI,IACrD,GAEJ,EACAsI,oBAAAA,CAAqBtI,GACpB,OAAOvsB,KAAKkd,QAAQ3R,IACnB,qCAAqCghB,IACnC,GAEJ,GCpBDuI,EAAe,CACXC,SAAAA,CAAUC,EAAM1Q,GACZ,OAAOtkB,KAAKkd,QAAQ3R,IAChB+H,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,qCAAqCwhB,KAAQ1Q,IAC7C,CAAA,EAER,GCNJ2Q,EAAe,CACdvQ,OCHc,CACbwQ,WAAAA,CAAYza,EAAKhY,EAAQoR,GACxB,OAAO7T,KAAKkd,QAAQ3R,IAAI,iDAAmDsI,EAAOjH,GAAK,IAAMiH,EAAOjV,KAAO,IAAMiV,EAAOshB,KAAO,IAAMthB,EAAOugB,KAC7I,EACAgB,WAAAA,GACC,OAAOp1B,KAAKkd,QAAQ3R,IAAI,iDACzB,EACA8pB,sBAAAA,GACC,OAAOr1B,KAAKkd,QAAQ3R,IAAI,4DACzB,EACA+pB,oBAAAA,CAAqBzhB,GACpB,OAAO7T,KAAKkd,QAAQ3R,IAAI,0DAA4DsI,EAAOjH,GAAK,IAAMiH,EAAO4d,QAC9G,EACA8D,oBAAAA,CAAqB1hB,GACpB,OAAO7T,KAAKkd,QAAQ3R,IAAI,0DAA4DsI,EAAOjH,GAAK,IAAMiH,EAAO4d,QAC9G,EACA+D,WAAAA,CAAY3hB,GACX,OAAO7T,KAAKkd,QAAQ3R,IAAI,iDAAkDsI,EAAOjH,GAAK,IAAMiH,EAAO4d,QACpG,EACAP,MAAAA,CAAOrd,GACN,OAAO7T,KAAKkd,QAAQ3R,IAAI,4CAA6CsI,EAAOjH,GAAK,IAAMiH,EAAO4d,QAC/F,EACAgE,cAAAA,CAAeC,GACd,OAAO11B,KAAKkd,QAAQ3R,IAAI,oDAAsDmqB,EAC/E,EACAC,yBAAAA,CAA0B9hB,GACzB,OAAO7T,KAAKkd,QAAQ3R,IAAI,+DAAiEsI,EAAOjH,GAAK,IAAMiH,EAAO4d,QACnH,EACAmE,cAAAA,CAAe/hB,EAAQtV,GACtB,OAAOyB,KAAKkd,QAAQrB,KAAK,oDAAsDhI,EAAOjH,GAAK,IAAMiH,EAAO4d,QACvGlzB,EACF,EACAs3B,YAAAA,CAAaC,GACZ,OAAO91B,KAAKkd,QAAQ3R,IAAI,kDAAoDuqB,EAC7E,EACAC,2BAAAA,CAA4BpQ,EAAM/Y,EAAIrO,GACrC,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,iDAAmD/Y,EAChFrO,EACF,EACAy3B,WAAAA,CAAYppB,EAAIrO,GACf,OAAOyB,KAAKkd,QAAQrB,KAAK,iDAAmDjP,EAC3ErO,EACF,EACA03B,aAAAA,CAAcH,GACb,OAAO91B,KAAKkd,QAAQrB,KAAK,mDAAqDia,EAC/E,IC7CFI,EAAe,CACdd,WAAAA,GACC,OAAOp1B,KAAKkd,QAAQ3R,IAAI,iDACzB,EACA4qB,yBAAAA,GACC,OAAOn2B,KAAKkd,QAAQ3R,IAAI,+DACzB,GCND6qB,EAAe,CAEdlG,mBAAoB,WACnB,OAAOlwB,KAAKkd,QAAQ3R,IACnB,uCACA,CAAA,EAEF,EAEA8qB,sBAAuB,SAAU9W,OAAgBre,EAAWo1B,OAAYp1B,EAAWwpB,OAASxpB,EAAWq1B,OAAYr1B,GAClH,OAAOlB,KAAKkd,QAAQ3R,IACnB,iDACA,CAACgU,kBAAiB+W,cAAa5L,WAAU6L,eAE3C,EAEAC,mCAAoC,SAAUjX,GAC7C,OAAOvf,KAAKkd,QAAQ3R,IACnB,+DAA+DgU,IAC/D,GAEF,EACAkX,2BAA4B,SAAUH,EAAa/W,GAClD,OAAOvf,KAAKkd,QAAQ3R,IACnB,sDACA,CACC+qB,cACA/W,mBAGH,EACAmX,4BAA6B,SAAUnX,EAAiByV,GACvD,OAAOh1B,KAAKkd,QAAQ3R,IACnB,uDAAuDgU,KAAmByV,IAC1E,GAGF,EACA2B,qBAAsB,SAAUrS,EAAwB0Q,GACvD,OAAOh1B,KAAKkd,QAAQ3R,IACnB,iDAAiD+Y,KAA0B0Q,IAC3E,GAGF,GCCD4B,EAAe,CACX5Z,iBACA6Z,EACAjZ,aACAjD,UCjDW,CACd,iBAAMJ,GAEL,OAAOva,KAAKkd,QAAQ3R,IADR,0CACiB,KAAM,KACpC,UD8CG9B,EACAsV,aACAsC,SACAW,eACAoB,SACA0T,SEvDW,CAEXC,aAAc,WACZ,OAAO/2B,KAAKkd,QAAQ3R,IAClB,yCACC,CAAA,EAEL,EAEAya,OAAQ,SAAUgR,GAChB,OAAOh3B,KAAKkd,QAAQ3R,IAClB,oCAAoCyrB,IACnC,GAEL,EAEHre,OAAQ,UAAUqe,YAAEA,EAAWvc,IAAEA,EAAG1Z,MAAEA,EAAKk2B,IAAEA,EAAI,OAChD,OAAOj3B,KAAKkd,QAAQrB,KACnB,oCAAoCmb,IAClC,CACDvc,IAAKA,EACL1Z,MAAOA,GAGV,EAEG8kB,OAAQ,UAAUpL,IAACA,EAAG1Z,MAAEA,EAAKk2B,IAAEA,IAC7B,OAAOj3B,KAAKkd,QAAQrB,KAClB,mCACC,CACCpB,IAAKA,EACL1Z,MAAOA,EACPk2B,IAAKA,GAGX,GFqBA/S,MACA4N,QACAM,iBACAS,cACAqE,OG5DW,CAEXC,KAAM,WACF,OAAOn3B,KAAKkd,QAAQ3R,IACpB,+BAA+B,CAAA,EACnC,EAEA6rB,IAAK,WACD,OAAOp3B,KAAKkd,QAAQ3R,IACpB,8BAA8B,CAAA,EAClC,EAEA8rB,QAAS,SAAUC,GACf,OAAOt3B,KAAKkd,QAAQ3R,IACpB,mCAAmC+rB,IAAW,GAClD,GH8CAnE,MACAU,MACAa,QACAI,SACAG,WACAiB,WACApB,SACHwB,YIpEc,CACdiB,uBAAwB,WACvB,OAAOv3B,KAAKkd,QAAQ3R,IACnB,+CACA,CAAA,EAEF,EACAisB,mBAAoB,SAAUzS,GAC7B,OAAO/kB,KAAKkd,QAAQ3R,IACnB,iEACA,CACCwZ,eAAkBA,GAGrB,GJuDA0S,KKrEc,CACd1Z,QAAS,WACR,OAAO/d,KAAKkd,QAAQ3R,IACnB,mCACA,CAAA,EAEF,GLgEAmsB,SMrEc,CACdC,UAAAA,GACC,OAAO33B,KAAKkd,QAAQ3R,IACnB,uCACA,CAAA,EAEF,EACAqsB,WAAAA,GACC,OAAO53B,KAAKkd,QAAQ3R,IACnB,wCACA,CAAA,EAEF,GN0DAssB,UOrEc,CACdnT,OCHc,CACdoT,eAAAA,CAAgBrd,EAAKhY,EAAQoR,GAC5B,OAAO7T,KAAKkd,QAAQ3R,IAAI,uDAAyDsI,EAAO8Q,UACzF,EACAoT,0BAAAA,CAA2Btd,EAAKhY,EAAQoR,GACvC,OAAO7T,KAAKkd,QAAQ3R,IAAI,kEAAoEsI,EAAO8Q,UACpG,EACAqT,uBAAAA,CAAwBvd,EAAKhY,EAAQoR,GACpC,OAAO7T,KAAKkd,QAAQ3R,IAAI,+DAAiEsI,EAAO8Q,UAAY,IAAM9Q,EAAOokB,WAC1H,EACAC,2BAAAA,CAA4BvT,GAC3B,OAAO3kB,KAAKkd,QAAQ3R,IAAI,kEAAoEoZ,EAC7F,EACAwT,kBAAAA,CAAmB1d,EAAKhY,EAAQoR,GAC/B,OAAO7T,KAAKkd,QAAQ3R,IAAI,0DAA4DsI,EAAOokB,WAC5F,EACAG,mBAAAA,GACC,OAAOp4B,KAAKkd,QAAQ3R,IAAI,2DACzB,EACA8sB,mBAAAA,GACC,OAAOr4B,KAAKkd,QAAQ3R,IAAI,2DACzB,EACA+sB,cAAAA,CAAe3S,EAAMpnB,GACpB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,sDAAuDpnB,EACtF,EACAg6B,YAAAA,CAAaN,GACZ,OAAOj4B,KAAKkd,QAAQrB,KAAK,oDAAsDoc,EAChF,EACAO,cAAAA,CAAe7S,EAAMpnB,GACpB,OAAOyB,KAAKkd,QAAQrB,KAAK8J,EAAK,sDAAuDpnB,EACtF,EACAk6B,cAAAA,CAAeR,GACd,OAAOj4B,KAAKkd,QAAQrB,KAAK,sDAAwDoc,EAClF,EACAS,kBAAAA,CAAmB7kB,GAClB,OAAO7T,KAAKkd,QAAQrB,KAAK,0DAA4DhI,EAAOokB,WAAYpkB,EACzG,EACA8kB,oBAAAA,CAAqBhT,EAAM9R,GAC1B,OAAO7T,KAAKkd,QAAQrB,KAAK8J,EAAK,4DAA8D9R,EAAOokB,WAAYpkB,EAChH,EACA+kB,oBAAAA,CAAqBjT,EAAM9R,GAC1B,OAAO7T,KAAKkd,QAAQrB,KAAK8J,EAAK,4DAA8D9R,EAAOokB,WAAYpkB,EAChH,EACAglB,oBAAAA,CAAqBhlB,GACpB,OAAO7T,KAAKkd,QAAQrB,KAAK,4DAA8DhI,EAAOokB,WAAYpkB,EAC3G,EACAilB,iBAAAA,CAAkBjlB,GACjB,OAAO7T,KAAKkd,QAAQrB,KAAK,yDAA2DhI,EAAOokB,WAAYpkB,EACxG,EACAklB,eAAAA,CAAgBllB,GACf,OAAO7T,KAAKkd,QAAQrB,KAAK,uDAAyDhI,EAAOokB,WAAYpkB,EACtG,EACAgY,cAAAA,CAAehY,GACd,OAAO7T,KAAKkd,QAAQrB,KAAK,sDAC1B,EACAgC,SAAAA,CAAU8G,GACT,OAAO3kB,KAAKkd,QAAQrB,KAAK,iDAAmD8I,EAC7E,EACAqU,kBAAAA,CAAmBrU,GAClB,OAAO3kB,KAAKkd,QAAQrB,KAAK,0DAA4D8I,EACtF,EACAsU,aAAAA,CAAcC,GACb,OAAOl5B,KAAKkd,QAAQrB,KAAK,qDAAuDqd,EACjF,EACAC,iBAAAA,CAAkBxU,GACjB,OAAO3kB,KAAKkd,QAAQ3R,IAAI,yDAA2DoZ,EACpF,GD9DAyU,mBAAAA,GACC,OAAOp5B,KAAKkd,QAAQ3R,IAAI,iDACzB,GPkEA6qB,UACA3Y,SSxDc,CACd4b,MAAAA,GACC,OAAOr5B,KAAKkd,QAAQ3R,IAAI,gCACzB,ICbD+tB,EAAe,CACdC,QAASA,CAACC,EAAK14B,KACd,GAAI04B,EAAI/2B,OAAOg3B,iBAAiBvc,QAO/B,YALIpc,GAAS44B,UACZ5xB,QAAQ6xB,KAAK,0BACbH,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQwc,QAAQE,aAAa94B,EAAQ44B,WAMnE,SAASG,EAAYlU,EAAMmU,EAAKv7B,EAAMkE,GACrC,GAAmB,iBAARkjB,QAA+BzkB,IAAXuB,GAC7Bq3B,EAAKv7B,EAAMkE,GAAU,CAACkjB,EAAMmU,EAAKv7B,GAClConB,OAAOzkB,OACD,GAAIykB,EAAM,CAChB,GAAmB,iBAARA,EACV,MAAM,IAAIoU,UAAU,iEACT74B,IAAR44B,QAA8B54B,IAAT3C,QAAiC2C,IAAXuB,IAC9CA,EAASkjB,EACTA,OAAOzkB,EAET,CACA,GAAIykB,EAAM,CAET,IAAKA,EAAKqU,kBAAoBrU,EAAKsU,YAClC,MAAM,IAAIF,UAAU,kCAErBpU,EAAO,CACNqU,gBAAiBrU,EAAKqU,gBACtBC,YAAatU,EAAKsU,aAGfx3B,EACHA,EAAOkjB,KAAOA,EAEdljB,EAAS,CAACkjB,OACZ,CAEA,MAAO,CAACmU,EAAKv7B,EAAMkE,EACpB,CAEA,SAASy3B,EAAoBlmB,GAC5B,MAAM/R,EAAS+R,EAASzV,KAMxB,cALOyV,EAASzV,KACX0D,EAAOk4B,KAGXl4B,EAAOk4B,KAAKnmB,SAAWA,EAFvB/R,EAAOk4B,KAAO,CAACnmB,YAGT/R,CACR,CACgBqR,2BAA2BC,SAAWD,2BAA2BE,UACjF,MAAM4mB,EAAcxmB,MAAMwL,OAAO,CAChCyB,QAAS,IACTwZ,QAAS/mB,2BAA2BC,SAAWD,2BAA2BE,UAAY,MAGvF4mB,EAAYE,aAAaC,QAAQ/3B,IAAIC,IACpC,GAAqB,QAAjBA,EAAO+X,SAAqB/X,EAAOlE,KACtC,OAAOkE,EAER,GAAIA,EAAOlE,gBAAgBi8B,SAC1B,OAAO/3B,EAER,IAAKjD,OAAOi7B,OAAOh4B,EAAOlE,MAAMm8B,MAAMx2B,KACjCA,aAAgBy2B,aAEhBp7B,MAAM4I,QAAQjE,IACVA,EAAKw2B,MAAM/0B,KAAOA,aAAai1B,SAEpC,CACH,MAAMC,EAAUr7B,OAAOs7B,QAAQr4B,EAAOlE,MAAMsH,OAAO,CAACk1B,GAAK7gB,EAAKhW,MAC7D,GAAIA,aAAgBy2B,SACnB,IAAK,MAAM7jB,KAAQ5S,EAClB62B,EAAGP,SAASQ,OAAO9gB,GAAOhW,EAAKiC,OAAS,EAAI,KAAO,IAAK2Q,QAC/CvX,MAAM4I,QAAQjE,GACpBA,EAAKw2B,MAAM/0B,KAAOA,aAAai1B,OAClCG,EAAGE,SAAS/gB,GAAOhW,EAEnBA,EAAK0C,QAAQkQ,GAAQikB,EAAGP,SAASQ,OAAO9gB,GAAOhW,EAAKiC,OAAS,EAAI,KAAO,IAAK2Q,IAG9EikB,EAAGE,SAAS/gB,GAAOhW,EAEpB,OAAO62B,GACL,CACFP,SAAU,IAAIA,SACdS,SAAU,CAAA,IAEXJ,EAAQL,SAASQ,OAAO,YAAa3f,KAAK6f,UAAUL,EAAQI,WAC5Dx4B,EAAOlE,KAAOs8B,EAAQL,QACvB,CAEA,OAAO/3B,IAGR23B,EAAYE,aAAatmB,SAASxR,IAAIwR,IACC,OAAlCA,EAASvR,QAAQ+c,gBACkB,IAAnCxL,EAASvR,QAAQ+c,eACiB,QAAlCxL,EAASvR,QAAQ+c,eAIjBxL,EAASzV,KAAK48B,SACjBnnB,EAASzV,KAAK48B,OAASnnB,EAASzV,KAAK48B,OAAO1xB,OAC3C8R,IAAQvH,EAASvR,OAAO8Y,EAAI3c,KAAO,iBAAmB46B,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQke,sBAAsB7f,EAAI3c,OAAO2c,EAAKvH,EAASvR,UALnIy3B,EAAoBlmB,IAS1BjM,GACgB,gBAAdA,EAAMszB,KACFh6B,QAAQE,OAAO,CAAK+5B,SAAS,KAAUvzB,IAEZ,OAA/BA,EAAMtF,QAAQ+c,gBACkB,IAAhCzX,EAAMtF,QAAQ+c,eACiB,WAA/BzX,EAAMtF,QAAQ+c,cACVne,QAAQE,OAAOwG,GAEnBA,EAAMiM,SACoB,KAAzBjM,EAAMiM,SAASqV,QAClBmQ,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUC,aAAa,QAASzzB,EAAM0zB,QAAS1zB,EAAMwyB,QAAQmB,aAAa,GAC/Fr6B,QAAQE,OAAO,CAAK+5B,SAAS,KAAUvzB,MAI/CA,EAAMiM,SAASzV,KAAK48B,OAASpzB,EAAMiM,SAASzV,KAAK48B,OAAO1xB,OACvD8R,IAAQxT,EAAMtF,OAAO8Y,EAAI3c,KAAO,iBAAmB46B,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQke,sBAAsB7f,EAAI3c,OAAO2c,EAAKxT,EAAMtF,SAE/HsF,EAAMiM,SAASzV,KAAK48B,OAAOh1B,OAU1B9E,QAAQE,OAAOwG,GATb1G,QAAQE,OAAO,CAAK+5B,SAAS,KAAUvzB,KACrCA,EAAMwyB,SAChBf,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUC,aAAa,QAASzzB,EAAM0zB,QAAS1zB,EAAMwyB,QAAQmB,aAClFr6B,QAAQE,OAAO,CAAK+5B,SAAS,KAAUvzB,MAE9CyxB,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUI,WAAW5zB,EAAM0zB,SAChDp6B,QAAQE,OAAO,CAAK+5B,SAAS,KAAUvzB,MAMhDyxB,EAAI/2B,OAAOg3B,iBAAiBvc,QAAU,CACrCsH,OAAO/J,IACN3S,QAAQ6xB,KAAK,0DACNS,EAAY5V,OAAO,CAAC/J,SAE5BlP,IAAGA,CAACoa,EAAMmU,EAAKjmB,EAAQpR,KACtBqF,QAAQ6xB,KAAK,qDACZG,EAAKjmB,EAAQpR,GAAUo3B,EAAYlU,EAAMmU,EAAKjmB,EAAQpR,GACnDoR,IACCpR,EACHA,EAAOoR,OAASA,EAEhBpR,EAAS,CAACoR,WAELumB,EAAY7uB,IAAIuuB,EAAKr3B,IAE7BoZ,KAAIA,CAAC8J,EAAMmU,EAAKv7B,EAAMkE,KACrBqF,QAAQ6xB,KAAK,uDACZG,EAAKv7B,EAAMkE,GAAUo3B,EAAYlU,EAAMmU,EAAKv7B,EAAMkE,GAC5C23B,EAAYve,KAAKie,EAAKv7B,EAAMkE,IAEpC24B,sBAAuB,CACtBQ,UAAAA,CAAW7zB,EAAOtF,GACjB,MAAM84B,EAAY/B,EAAI/2B,OAAOg3B,iBAAiB8B,UAE9C,OAAI94B,GAAQkjB,MACXljB,EAAOkjB,KAAKqU,kBACZv3B,EAAOkjB,KAAKsU,aAAY,EAAOlyB,EAAMktB,WAC9B,GAEJ11B,MAAM4I,QAAQJ,EAAMktB,WACvBltB,EAAMktB,SAASruB,QAAQ20B,EAAUI,aAC1B,GAC4B,iBAAlB5zB,EAAMktB,WACnBxyB,GAAQod,YACXrgB,OAAOi7B,OAAO1yB,EAAMktB,UAAUruB,QAC7B3H,GAASs8B,EAAUC,aAClB,QACAj8B,MAAM4I,QAAQ1F,EAAOod,aAAe2Z,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE6jB,MAAM,KAAMp5B,EAAOod,aAAepd,EAAOod,YAC9G5gB,GACA,IAIFO,OAAOs7B,QAAQ/yB,EAAMktB,UAAUruB,QAC9B,EAAEsT,EAAKjb,KAAWs8B,EAAUC,aAAa,QAASthB,EAAKjb,GAAO,KAEzD,EAGT,EACA68B,OAAAA,CAAQ/zB,EAAOtF,GACd,MAAM84B,EAAY/B,EAAI/2B,OAAOg3B,iBAAiB8B,UAE1C94B,GAAQkjB,KACXljB,EAAOkjB,KAAKsU,aAAY,EAAOlyB,EAAM0zB,SAC7Bh5B,GAAQod,YAChB0b,EAAUC,aACT,QACAj8B,MAAM4I,QAAQ1F,EAAOod,aAAe2Z,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE6jB,MAAM,KAAMp5B,EAAOod,aAAepd,EAAOod,YAC9G9X,EAAM0zB,SACN,GAGDF,EAAUI,WAAW5zB,EAAM0zB,QAC7B,EACAM,GAAAA,CAAIh0B,GACH,MAAMwzB,EAAY/B,EAAI/2B,OAAOg3B,iBAAiB8B,UAE9C,IAAIE,EAAU,GAYd,OAXAA,GAAW,YAAc1zB,EAAM0zB,QAAU,OACzCA,GAAW,aAAe1zB,EAAMi0B,SAAW,KAC3CP,GAAW,gBAAkB1zB,EAAMk0B,KAAO,KACtCl0B,EAAMm0B,WAAan0B,EAAMm0B,UAAU/1B,SACtCs1B,GAAW,gBACX1zB,EAAMm0B,UAAUt1B,QAAQ2U,IACvBkgB,GAAW,aAAelgB,EAAIzE,KAAO,KACrC2kB,GAAW,WAAalgB,EAAI0gB,KAAO,KACnCR,GAAW,eAAiBlgB,EAAI4gB,SAAW,QAGrCp0B,EAAMq0B,UACb,IAAK,UACL,IAAK,eACL,IAAK,kBACL,IAAK,eACJb,EAAUC,aAAa,OAAQ,OAASzzB,EAAMq0B,SAAUX,GAAS,GACjE,MACD,IAAK,SACL,IAAK,cACL,IAAK,iBACJF,EAAUC,aAAa,OAAQ,OAASzzB,EAAMq0B,SAAUX,GAAS,GACjE,MACD,QACCA,EAAU,aAAe1zB,EAAMq0B,SAAW,OAASX,EACnDF,EAAUc,iBAAiBZ,GAG9B,EACAa,SAAAA,CAAUv0B,GACT,MAAMwzB,EAAY/B,EAAI/2B,OAAOg3B,iBAAiB8B,UAE9C,IAAIE,EAAU,GACdA,GAAW,SAAW1zB,EAAMlG,MAAQ,OACpC45B,GAAW,YAAc1zB,EAAM0zB,QAAU,OACzCA,GAAW,aAAe1zB,EAAMi0B,SAAW,KAC3CP,GAAW,gBAAkB1zB,EAAMk0B,KAAO,KACtCl0B,EAAMm0B,WAAan0B,EAAMm0B,UAAU/1B,SACtCs1B,GAAW,gBACX1zB,EAAMm0B,UAAUt1B,QAAQ2U,IACvBkgB,GAAW,aAAelgB,EAAIzE,KAAO,KACrC2kB,GAAW,WAAalgB,EAAI0gB,KAAO,KACnCR,GAAW,eAAiBlgB,EAAI4gB,SAAW,QAG7CZ,EAAUc,iBAAiBZ,EAC5B,EACArgB,EAAAA,CAAGrT,GACF,MAAMwzB,EAAY/B,EAAI/2B,OAAOg3B,iBAAiB8B,UAE9C,IAAIE,EAAU,QACQv6B,IAAlB6G,EAAMw0B,UACTd,GAAW1zB,EAAMw0B,QAAU,aACTr7B,IAAf6G,EAAMszB,OACTI,GAAW,SAAW1zB,EAAMszB,KAAO,aAClBn6B,IAAd6G,EAAMy0B,MACTf,GAAW,QAAU1zB,EAAMy0B,IAAM,aACZt7B,IAAlB6G,EAAM0zB,QACTA,GAAW,YAAc1zB,EAAM0zB,QAAU,YACdv6B,IAAnB6G,EAAMktB,WACdwG,GAAW,aAAe1zB,EAAMktB,SAASwH,KAAK,QAAU,aAClCv7B,IAAnB6G,EAAMi0B,WACTP,GAAW,aAAe1zB,EAAMi0B,SAAW,WACzB96B,IAAf6G,EAAMk0B,OACTR,GAAW,gBAAkB1zB,EAAMk0B,KAAO,MAE3CV,EAAUc,iBAAiBZ,EAC5B,EACAiB,IAAAA,CAAK30B,EAAOtF,GACX,MAAM84B,EAAY/B,EAAI/2B,OAAOg3B,iBAAiB8B,UAE9C,IAAIE,EAAU,GACdA,GAAW,oBAAsB1zB,EAAM40B,WAAa,KACpDlB,GAAW,gBAAkB1zB,EAAMyS,OAAS,KAC5CihB,GAAW,yBAA2B1zB,EAAM60B,qBACxCn6B,GAAQod,YACX0b,EAAUC,aACT,QACAj8B,MAAM4I,QAAQ1F,EAAOod,aAAe2Z,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE6jB,MAAM,KAAMp5B,EAAOod,aAAepd,EAAOod,YAC9G9X,EAAM0zB,SACN,GAGDF,EAAUC,aAAa,QAASzzB,EAAM0zB,QAASA,EACjD,IAKF,MAAMoB,EACLx3B,WAAAA,CAAYy3B,EAAaC,QACX77B,IAAT67B,GACH/8B,KAAKkd,QAAU,CACdsH,OAAO/J,IACN3S,QAAQ6xB,KAAK,kCACNH,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQsH,OAAO/J,IAEnDlP,IAAGA,CAACoa,EAAMmU,EAAKjmB,EAAQpR,KACtBqF,QAAQ6xB,KAAK,kCACNH,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQ3R,IAAIoa,EAAMmU,EAAKjmB,EAAQpR,IAEnEoZ,KAAIA,CAAC8J,EAAMmU,EAAKv7B,EAAMkE,KACrBqF,QAAQ6xB,KAAK,kCACNH,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQrB,KAAK8J,EAAMmU,EAAKv7B,EAAMkE,KAGnEjD,OAAOw9B,eAAeh9B,KAAKkd,QAAS,UAAW,CAC9C3R,IAAGA,KACFzD,QAAQ6xB,KAAK,kCACNH,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQwc,WAG7CF,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQwc,QAAU15B,MAE9CR,OAAOw9B,eAAeh9B,KAAM,UAAW,CACtCuL,GAAAA,GACC,OAAQwxB,GAAQ/8B,MAAMkd,OACvB,IAIFld,KAAK45B,aAAakD,GAAa,EAChC,CAEAlD,YAAAA,CAAakD,EAAaG,GACzBz9B,OAAO6M,KAAKywB,GAAal2B,QAAQsT,IAChC1a,OAAOw9B,eAAeh9B,KAAMka,EAAK,CAChC3O,GAAAA,GACC,MAA+B,mBAApBuxB,EAAY5iB,GACf4iB,EAAY5iB,GAAKrW,KAAK7D,MACvB,IAAI68B,EAAqBC,EAAY5iB,GAAMla,KAAKkd,QAAQwc,QAChE,MAGGuD,GAAQn1B,QAAQ6xB,KAAK,gDAC3B,EAGD,MAAMD,EAAU,IAAImD,EAAqBjG,GACrC91B,GAAS44B,UACZ5xB,QAAQ6xB,KAAK,0BACbD,EAAQE,aAAa94B,EAAQ44B,UAG9BF,EAAI/2B,OAAOg3B,iBAAiBvc,QAAQwc,QAAUA,EAG9CF,EAAIhiB,QAAQ,UAAWgiB,EAAI/2B,OAAOg3B,iBAAiBvc,WCtVrD,MASMggB,EAAyB,QACzBC,EAA0B,SASnBC,EAAiB,CAS7B7xB,IAAK,SAAS8xB,EAAOC,EAAcC,EAAkB,MACpD,OAAOH,EAAeI,WAAWH,EAAOC,EAhBd,MAgBiDC,EAC5E,EAOA1hB,KAAM,SAASwhB,EAAOC,EAAcC,EAAkB,MACrD,OAAOH,EAAeI,WAAWH,EAAOC,EAxBb,OAwBiDC,EAC7E,EAKAE,UAAW,SAASzpB,GAEnB,QAAwB,iBAAbA,IAAyBA,EAAS0pB,eAAeR,KACxDlpB,EAAS0pB,eAAeP,IAzCG,GAyCyBnpB,EAASjM,MAMlE,EAKA41B,QAAS,SAAS3pB,GACjB,OAAQopB,EAAeK,UAAUzpB,EAClC,EAKA4pB,QAAS,SAAS5pB,GAEjB,SAAIopB,EAAeK,UAAUzpB,MAEsB,iBAAtCA,EAASmpB,IAAyC39B,OAAO6M,KAAK2H,EAASmpB,IAA0Bh3B,OAAS,GACpE,gBAAtC6N,EAASmpB,IAAwCnpB,EAASmpB,GAAyBh3B,OAAS,GACtD,iBAAtC6N,EAASmpB,IAAqF,IAA5CnpB,EAASmpB,GAAyBU,QAC/C,iBAAtC7pB,EAASmpB,IAOtB,EAKAW,QAAS,SAAS9pB,GAEjB,OAAIopB,EAAeQ,QAAQ5pB,GAEnBA,EAASmpB,GAGV,IACR,EAKAY,SAAU,SAAS/pB,GAElB,MAAwB,iBAAbA,GACPxU,OAAO6M,KAAK2H,GAAU7N,OAAS,GAC/B6N,EAAS0pB,eAAeP,GAEpBnpB,EAASmpB,GAGV,eACR,EAKAa,aAAc,SAAShqB,GAEtB,MAAwB,iBAAbA,GAAyBA,EAAS0pB,eAAeR,GAEpDlpB,EAASkpB,GAGV,CACR,EAQAe,mBAAoB,SAASZ,GAC5B,IAAIvD,EAAM,KAQV,MAL0C,oBAA/BxmB,6BAEVwmB,EAAMxmB,2BAA2BC,SAAWD,2BAA2BE,UAAY,IAAM6pB,GAGnFvD,CACR,EAKAoE,YAAa,SAASC,EAAYnqB,EAAUoqB,GAqB5C,EASAZ,WAAY,SAASH,EAAOC,EAAc1+B,EAAM2+B,GAG/C,IAAIc,EAAe,CAClB7jB,OAAQ5b,EACR6b,IAAK2iB,EAAea,mBAAmBZ,GACvCxc,QAnL8B,KAkM/B,GArL0B,OA0KtBjiB,EAEHy/B,EAAaxqB,OAASypB,EAKtBe,EAAa9/B,KAAO++B,EAIU,iBAApBC,EAGV,IAAK,IAAInhB,KAAQmhB,EAAiBc,EAAajiB,GAAQmhB,EAAgBnhB,GAIxE,OAAOxI,MAAMyqB,EACd,GC5HKC,EAAqBh8B,SAASC,cAAc,OAE5Cg8B,EAAY98B,IAAIC,UAAU,CAC/BpD,KAAM,cACN6E,WAAY,CACXq7B,UACAC,aAED3+B,QAAS,CACR4+B,UAAUC,GAgBF,UAfMrrB,2BAA2BsrB,mBAejC,yCAbI,koBAQMtrB,2BAA2BurB,YAAc,IAAMvrB,2BAA2BwrB,cAAgB,mCACtFH,EAAUlD,QAAQsD,OAAS,mOAMjDC,eAAAA,CAAgB9oB,GACfxV,UAAUu+B,SAASC,oBAAoBhpB,EAAEzR,OAAOE,aAAa,SAAStE,QACvE,GAED6B,SAAAA,GACCo8B,EAAmBl8B,cAAcC,YAAYi8B,EAC9C,EACAh6B,SAAU,CACT66B,aAAc,WACb,MAAyD,KAAlD7rB,2BAA2BsrB,kBACnC,GAED37B,SAAoB,4+DAiDrBs7B,EAAU/7B,IAAI48B,GACdb,EAAU/7B,IAAI68B,GAGd,MAAMC,EAAoBf,EAAUx7B,MAAMu7B,GAE1Ch8B,SAASzB,KAAKmC,YAAYs7B,GAG1B,IAAAiB,EAAe,CACdhG,QAASA,CAACC,EAAK14B,KACT04B,EAAI/2B,OAAOg3B,iBAAiB1hB,IAChCyhB,EAAIh3B,IAAIg9B,IAET,MAAMjE,EAAY,CACjBkE,YAAAA,CAAahE,GACZ,GAAIl8B,MAAM4I,QAAQszB,GACjB,OAAOA,EAAQ70B,QAAQ5G,KAAKy/B,cAC7BH,EAAkB7+B,MAAMi/B,MAAMn5B,IAAI,CAAE61B,SAAU,UAAWuD,QAAS,OAAQZ,OAAQtD,EAASmE,KAAM,KAClG,EACAC,SAAAA,CAAUpE,GACT,GAAIl8B,MAAM4I,QAAQszB,GACjB,OAAOA,EAAQ70B,QAAQ5G,KAAK6/B,WAC7BP,EAAkB7+B,MAAMi/B,MAAMn5B,IAAI,CAAE61B,SAAU,OAAQuD,QAAS,OAAQZ,OAAQtD,EAASmE,KAAM,KAC/F,EACAE,YAAAA,CAAarE,GACZ,GAAIl8B,MAAM4I,QAAQszB,GACjB,OAAOA,EAAQ70B,QAAQ5G,KAAK8/B,cAC7BR,EAAkB7+B,MAAMi/B,MAAMn5B,IAAI,CAAE61B,SAAU,OAAQuD,QAAS,UAAWZ,OAAQtD,GACnF,EACAE,UAAAA,CAAWF,GACV,GAAIl8B,MAAM4I,QAAQszB,GACjB,OAAOA,EAAQ70B,QAAQ5G,KAAK27B,YAC7B2D,EAAkB7+B,MAAMi/B,MAAMn5B,IAAI,CAAE61B,SAAU,QAASuD,QAAS,UAAWZ,OAAQtD,GACpF,EACAY,gBAAAA,CAAiBZ,GAIhB,GAAIl8B,MAAM4I,QAAQszB,GACjB,OAAOA,EAAQ70B,QAAQ5G,KAAKq8B,kBAC7BiD,EAAkB7+B,MAAMwb,MAAM1V,IAAI,CACjC61B,SAAU,QACVuD,QAASl+B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,sBAC7D+mB,OAAQtD,GACV,EACAsE,cAAaA,IACL,IAAI1+B,QAAQ,CAACC,EAASC,KAC5B+9B,EAAkBU,SAASC,QAAQ,CAClC9Z,MAAO,kBACP+Z,OAAQz+B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,oBAC5DyjB,QAASh6B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,yBAC7DmoB,YAAa1+B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,gBACjEooB,YAAa,kBACbC,YAAa5+B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,iBACjEsoB,YAAa,qBACbC,MAAAA,GACCj/B,GAAQ,EACT,EACAC,MAAAA,GACCD,GAAQ,EACT,MAIH+1B,QAAQv2B,GACA,IAAIO,QAAQ,CAACC,EAASC,KAC5B+9B,EAAkBU,SAASC,QAAQ,CAClC9Z,MAAOrlB,GAASqlB,OAAS,kBACzB+Z,OAAQp/B,GAASo/B,QAAUz+B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,oBAC/EyjB,QAAS36B,GAAS26B,SAAW,GAC7B0E,YAAar/B,GAASq/B,aAAe,KACrCC,YAAat/B,GAASs/B,aAAe,kBACrCC,YAAav/B,GAASu/B,aAAe5+B,IAAI6C,SAAS,IAAMk1B,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAGC,EAAE,iBACzFsoB,YAAax/B,GAASw/B,aAAe,4BACrCC,MAAAA,GACCj/B,GAAQ,EACT,EACAC,MAAAA,GACCD,GAAQ,EACT,MAIHk6B,YAAAA,CAAaY,EAAUr7B,EAAO06B,EAAS+E,GAAS,EAAOC,GAAO,GAC7D,IAAI3/B,EAAU,CAAEs7B,SAAUA,EAAUuD,QAAS5+B,EAAOg+B,OAAQtD,EAASgF,QAEhED,IACJ1/B,EAAQ8+B,KAAO,KAEhBN,EAAkB7+B,MAAMi/B,MAAMn5B,IAAIzF,EACnC,EACA4/B,aAAAA,CAAcC,EAAcvE,EAAW,OAAQr7B,EAAQ,OAAQy/B,GAAS,EAAOC,GAAO,GAErF,QAAIE,EAAajG,MAAMe,GAA8B,iBAAZA,KACxCkF,EAAa/5B,QAAQ60B,GAAWz7B,KAAKw7B,aAAaY,EAAUr7B,EAAO06B,EAAS+E,EAAQC,KAC7E,EAGT,EACAG,iBAAAA,CAAkB74B,GAEjB,IAAGA,EAAM21B,eAAe,SAAW31B,EAAMzJ,KAAKuiC,gBAAkB,aAAaA,cAA7E,CAIA,GAAqB,iBAAV94B,EACV,OAAOwzB,EAAUc,iBAAiBt0B,GAGnC,GAAIxI,MAAM4I,QAAQJ,IAAUA,EAAM2yB,MAAMnf,GAAsB,iBAARA,GACrD,OAAOxT,EAAM2yB,MAAMa,EAAUc,kBAG9B,IAAIt0B,EAAM21B,eAAe,aAAc31B,EAAMuzB,QAA7C,CAIA,GAAqB,iBAAVvzB,GAAgC,OAAVA,EAAgB,CAChD,IAAI+4B,EAAS,GAoBb,OAjBI/4B,EAAM21B,eAAe,aAAe31B,EAAMiM,UAAUzV,MAAMuV,OAC7DgtB,GAAU,mBAAqB/4B,EAAMiM,SAASzV,KAAKuV,OAAO2nB,SAAW1zB,EAAMiM,SAASzV,KAAKuV,QAAU,OAC3F/L,EAAM21B,eAAe,aAC7BoD,GAAU,kBAAoB/4B,EAAM0zB,QAAQsF,cAAgB,QAEzDh5B,EAAM21B,eAAe,WAAa31B,EAAMtF,OAAOi7B,eAAe,SACjEoD,GAAU,oBAAsB/4B,EAAMtF,OAAOgY,IAAM,QAEhD1S,EAAM21B,eAAe,WACxBoD,GAAU,gBAAkB/4B,EAAMi5B,MAAQ,QAG7B,IAAVF,IACHA,EAAS,kBAAoBzlB,KAAK6f,UAAUnzB,GAAS,QAEtD+4B,GAAU,0BAA4BxtB,2BAA2BurB,YAAc,IAAMvrB,2BAA2BwrB,cAEzGvD,EAAUc,iBAAiByE,EACnC,CAGAvF,EAAUc,iBAAiB,mEAAqE/oB,2BAA2BurB,YAAc,IAAMvrB,2BAA2BwrB,cA5BzK,CAZA,CAyCF,EACAmC,mBAAAA,CAAoBxF,GAEnB,GAAuB,iBAAZA,EACV,OAAOF,EAAUuE,aAAarE,GAG/B,GAAIl8B,MAAM4I,QAAQszB,GAAU,CAE3B,GAAIA,EAAQf,MAAM92B,GAAsB,iBAARA,GAC/B,OAAO63B,EAAQf,MAAMa,EAAUuE,cAGhC,GAAIrE,EAAQf,MAAM92B,GAAsB,iBAARA,IAA6B,OAARA,IACpD,OAAO63B,EAAQf,MAAM92B,IAChBA,EAAI85B,eAAe,SAAW95B,EAAIrF,KAAKm/B,eAAe,UACzDnC,EAAUuE,aAAazkB,KAAK6f,UAAUt3B,EAAIrF,KAAKuV,SAE/CynB,EAAUc,iBAAiBhhB,KAAK6f,UAAUt3B,KAI9C,CAGuB,iBAAZ63B,GAAoC,OAAZA,EAWnCF,EAAUc,iBAAiB,mEAAqE/oB,2BAA2BurB,YAAc,IAAOvrB,2BAA2BwrB,eAVtKrD,EAAQiC,eAAe,SAAWjC,EAAQl9B,KAAKm/B,eAAe,UAEjEnC,EAAUuE,aAAazkB,KAAK6f,UAAUO,EAAQl9B,KAAKuV,SAEnDynB,EAAUc,iBAAiBhhB,KAAK6f,UAAUO,GAO7C,EACAyF,mBAAAA,CAAoBvb,GACnB,MAAM1gB,EAAQ,IAAIk8B,MAAM,kBACxBxb,EAAKyb,iBAAiB,CAAC,mDAAmDx6B,QAAQ0N,GAAMA,EAAG+sB,cAAcp8B,GAS1G,EACAq8B,oBAAAA,CAAqBv5B,EAAO4d,GAC3B,QAAazkB,IAATykB,GACH,GAAI5d,GAASA,EAAMw5B,WAAaC,KAAKC,aACpC,OAAOlmB,GAAOggB,EAAU+F,qBAAqB/lB,EAAKxT,QAEnD,GAA+B,KAA3BA,GAAOiM,UAAUqV,OAAe,CACnC,IAAI8R,EAASiC,EAAeW,SAASh2B,EAAMiM,SAASzV,MAC9B,iBAAX48B,IACVA,EAASpzB,EAAMiM,SAASzV,MAGzBg9B,EAAU2F,oBAAoBvb,GAG9B,MAAM+b,EAAWliC,OAAOs7B,QAAQK,GAAQ1xB,OAAO,EAAEyQ,EAAK6kB,MACrD,MAAM7uB,EAAQyV,EAAKrU,cAAc,4BAA8B4I,EAAM,MACrE,OAAKhK,IAGLA,EAAMmxB,cAAc,IAAIM,YAAY,sBAAuB,CAAC5C,aAUrD,KACLz2B,IAAIs5B,GAAOA,EAAI,IAIZ3lB,EAAQ0J,EAAKrU,cAAc,yBAgBjC,YAfI2K,GAASylB,EAASv7B,OACrB8V,EAAMolB,cAAc,IAAIM,YAAY,iBAAkB,CAAC5C,OAAQ2C,KAY/DA,EAAS96B,QAAQ20B,EAAUI,YAG7B,CAGD,GAA+B,KAA3B5zB,GAAOiM,UAAUqV,OAAe,CACnC,IAAI8R,EAASiC,EAAeW,SAASh2B,EAAMiM,SAASzV,MACpDg9B,EAAUI,WAA8B,iBAAXR,EAAuB37B,OAAOi7B,OAAOU,GAAUA,EAC7E,MACCI,EAAUqF,kBAAkB74B,EAE9B,GAEDyxB,EAAI/2B,OAAOg3B,iBAAiB8B,UAAYA,EACxC/B,EAAIhiB,QAAQ,YAAagiB,EAAI/2B,OAAOg3B,iBAAiB8B,aC5bvDsG,GAAe,CACdtI,QAASA,CAACC,EAAK14B,KACd,GAAI04B,EAAI/2B,OAAOg3B,iBAAiB1c,KAC/B,OAMD,SAAS+kB,EAAsB3G,EAAQ4G,GAClCxiC,MAAM4I,QAAQgzB,GACjBA,EAAOv0B,QAAQm7B,GAEfviC,OAAOs7B,QAAQK,GAAQv0B,QACtB,EAAE7F,EAAOihC,KAAUA,EAAKp7B,QACvBmB,GAASg6B,EAAKh6B,EAAOhH,IAGzB,CAZKy4B,EAAI/2B,OAAOg3B,iBAAiB8B,WAChC/B,EAAIh3B,IAAI+8B,GAYT,IAAI0C,EAAuB,CAC1BC,SAAS,EACTC,MAAM,EACNC,QAAS,CACRzc,KAAM,CAAC,aAAc,WACrB+Z,MAAO,CAAC,aAAc,UAAW,YAAa,gBAE/CxxB,QAAS,CACRyX,IAAAA,CAAKA,EAAMwV,GACVxV,EAAKqU,kBACLmB,EAAOv0B,QAAQ2U,GAAOoK,EAAKsU,aAC1B,EACA1e,EAAI0Z,UAAY1Z,EAAIkgB,SAEtB,EACA,WAAMiE,CAAMvE,GACX,MAAMpjB,EAAKyhB,EAAI/2B,OAAOg3B,iBAAiB1hB,GACvC,IAAKA,EACJ,OAAO1W,QAAQE,OAAO,8BAEvB8gC,eAAeC,EAAcnH,GAC5BA,EAASA,EAAOt1B,OAAO,CAAC5D,EAAQsZ,KAC/B,OAAQA,EAAI3c,MACZ,IAAK,YACL,IAAK,cACA2c,EAAIkgB,QACPx5B,EAAOsZ,EAAIkgB,SAAW,CAAClgB,EAAId,KAE3BxY,EAAOsgC,SAAW,CAAChnB,EAAId,KACxB,MACD,IAAK,UACCxY,EAAOsgC,WACXtgC,EAAOsgC,SAAW,IACnBtgC,EAAOsgC,SAASj8B,KAAKiV,EAAIkgB,SACzB,MACD,IAAK,aACJj8B,OAAOs7B,QAAQvf,EAAI0Z,UACjBruB,QAAQ,EAAE47B,EAAO5+B,MACZ3B,EAAOugC,KACXvgC,EAAOugC,GAAS,IACbjjC,MAAM4I,QAAQvE,GACjB3B,EAAOugC,GAAOl8B,QAAQ1C,GAEtB3B,EAAOugC,GAAOl8B,KAAK1C,KAIvB,OAAO3B,GACL,CAAA,GACH,IAAI6jB,EAAU,EACd,MAAM2c,QAAaphC,QAAQ+1B,IAAI53B,OAAOs7B,QAAQK,GAC5C/zB,KAAK,CAACC,EAAGC,IAAM,CAAC,YAAYwC,QAAQxC,EAAE,IAAM,CAAC,YAAYwC,QAAQzC,EAAE,KACnEiB,IAAI+5B,OAAQG,EAAOC,MACnB,GAAa,YAATD,EAAqB,OAClBzqB,EAAG4E,aAAa,aAEtB6lB,EAAQ,sBADQzqB,EAAGC,EAAE,qBACqB,OAC3C,MACCwqB,EAAQ,OAASA,EAAQ,QAG1B,OADA1c,GAAW2c,EAAKt8B,OACTq8B,EACJ,OACAC,EAAKhG,KAAK,aACV,WAEL,MAAO,CACN3W,UACA2c,OAEF,CAEA,IAAI3c,EAAS2c,EACTljC,MAAM4I,QAAQgzB,KACdrV,UAAS2c,cAAeH,EAAcnH,MAEtCrV,UAAS2c,cAAejjC,OAAOs7B,QAAQK,GACxCt1B,OAAOw8B,MAAO94B,GAAMxI,EAAOihC,MAC3B,MAAM//B,QAAesH,GACfuc,QAAEA,EAAO2c,KAAEA,SAAeH,EAAcN,GAO9C,OANA//B,EAAO6jB,SAAWA,EAClB7jB,EAAOwgC,KAAKn8B,KAAK,OACdvF,EACA,gBACA0hC,EAAKhG,KAAK,IACV,cACIx6B,GACLZ,QAAQC,QAAQ,CAAEwkB,QAAS,EAAG2c,KAAM,aAGnC1qB,EAAG4E,aAAa,MACtB,MAAM+lB,EAAW3qB,EAAGC,EAAE,cAAe,CAAE2qB,EAAG7c,IAE1C0T,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUC,aACrC,QACAkH,EACA,OAASD,EAAKhG,KAAK,IAAM,SACzB,GACA,EAEF,EACAV,GAAAA,CAAIZ,GACH2G,EAAsB3G,EAAQ,CAACpzB,EAAOhH,KACrC,IAAI06B,EAAU,GAYd,OAXAA,GAAW,YAAc1zB,EAAM0zB,QAAU,OACzCA,GAAW,aAAe1zB,EAAMi0B,SAAW,KAC3CP,GAAW,gBAAkB1zB,EAAMk0B,KAAO,KACtCl0B,EAAMm0B,WAAan0B,EAAMm0B,UAAU/1B,SACtCs1B,GAAW,gBACX1zB,EAAMm0B,UAAUt1B,QAAQ2U,IACvBkgB,GAAW,aAAelgB,EAAIzE,KAAO,KACrC2kB,GAAW,WAAalgB,EAAI0gB,KAAO,KACnCR,GAAW,eAAiBlgB,EAAI4gB,SAAW,QAGrCp0B,EAAMq0B,UACb,IAAK,UACL,IAAK,eACL,IAAK,kBACL,IAAK,eACAr7B,EACHA,GAAS,SAAWgH,EAAMq0B,SAE1Br7B,EAAQ,OAASgH,EAAMq0B,SACxB5C,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUC,aAAa,OAAQz6B,EAAO06B,GAAS,GAC3E,MACD,IAAK,SACL,IAAK,cACL,IAAK,iBACA16B,EACHA,GAAS,SAAWgH,EAAMq0B,SAE1Br7B,EAAQ,OAASgH,EAAMq0B,SACxB5C,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUC,aAAa,OAAQz6B,EAAO06B,GAAS,GAC3E,MACD,QACCA,EAAU,aAAe1zB,EAAMq0B,SAAW,OAASX,EAC/C16B,IACH06B,EAAU16B,EAAQ,OAAS06B,GAC5BjC,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUc,iBAAiBZ,KAI3D,EACAa,SAAAA,CAAUnB,GACT2G,EAAsB3G,EAAQ,CAACpzB,EAAOhH,KACrC,IAAI06B,EAAU,GACV16B,IACH06B,GAAW16B,EAAQ,QACpB06B,GAAW,SAAW1zB,EAAMlG,MAAQ,OACpC45B,GAAW,YAAc1zB,EAAM0zB,QAAU,OACzCA,GAAW,aAAe1zB,EAAMi0B,SAAW,KAC3CP,GAAW,gBAAkB1zB,EAAMk0B,KAAO,KACtCl0B,EAAMm0B,WAAan0B,EAAMm0B,UAAU/1B,SACtCs1B,GAAW,gBACX1zB,EAAMm0B,UAAUt1B,QAAQ2U,IACvBkgB,GAAW,aAAelgB,EAAIzE,KAAO,KACrC2kB,GAAW,WAAalgB,EAAI0gB,KAAO,KACnCR,GAAW,eAAiBlgB,EAAI4gB,SAAW,QAG7C3C,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUc,iBAAiBZ,IAEzD,EACArgB,EAAAA,CAAG+f,GACF2G,EAAsB3G,EAAQ,CAACpzB,EAAOhH,KACrC,IAAI06B,EAAU,GACV16B,IACH06B,GAAW16B,EAAQ,aACEG,IAAlB6G,EAAMw0B,UACTd,GAAW1zB,EAAMw0B,QAAU,aACTr7B,IAAf6G,EAAMszB,OACTI,GAAW,SAAW1zB,EAAMszB,KAAO,aAClBn6B,IAAd6G,EAAMy0B,MACTf,GAAW,QAAU1zB,EAAMy0B,IAAM,aACZt7B,IAAlB6G,EAAM0zB,QACTA,GAAW,YAAc1zB,EAAM0zB,QAAU,YACdv6B,IAAnB6G,EAAMktB,WACdwG,GAAW,aAAe1zB,EAAMktB,SAASwH,KAAK,QAAU,aAClCv7B,IAAnB6G,EAAMi0B,WACTP,GAAW,aAAe1zB,EAAMi0B,SAAW,WACzB96B,IAAf6G,EAAMk0B,OACTR,GAAW,gBAAkB1zB,EAAMk0B,KAAO,MAE3CzC,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUc,iBAAiBZ,IAEzD,EACAiB,IAAAA,CAAKvB,GACJ2G,EAAsB3G,EAAQ,CAACpzB,EAAOhH,KACjCA,EACHA,GAAS,KAAOgH,EAAM0zB,QAEtB16B,EAAQgH,EAAM0zB,QAEf,IAAIA,EAAU,GACdA,GAAW,oBAAsB1zB,EAAM40B,WAAa,KACpDlB,GAAW,gBAAkB1zB,EAAMyS,OAAS,KAC5CihB,GAAW,yBAA2B1zB,EAAM60B,qBAE5CpD,EAAI/2B,OAAOg3B,iBAAiB8B,UAAUC,aACrC,QACAz6B,EACA06B,GACA,IAGH,IAOF,SAASmH,EAAWjd,EAAMmU,EAAKv7B,EAAMkE,GACpC,GAAmB,iBAARkjB,QAA+BzkB,IAAXuB,GAC7Bq3B,EAAKv7B,EAAMkE,GAAU,CAACkjB,EAAMmU,EAAKv7B,GAClConB,OAAOzkB,OACD,GAAIykB,EAAM,CAChB,GAAmB,iBAARA,EACV,MAAM,IAAIoU,UAAU,iEACT74B,IAAR44B,QAA8B54B,IAAT3C,QAAiC2C,IAAXuB,IAC9CA,EAASkjB,EACTA,OAAOzkB,EAET,CACA,GAAIykB,EAAM,CAET,IAAKA,EAAKqU,kBAAoBrU,EAAKsU,YAClC,MAAM,IAAIF,UAAU,kCAErBpU,EAAO,CACNqU,gBAAiBrU,EAAKqU,gBACtBC,YAAatU,EAAKsU,aAGfx3B,EACHA,EAAOkjB,KAAOA,EAEdljB,EAAS,CAACkjB,OACZ,CAEA,MAAO,CAACmU,EAAKv7B,EAAMkE,EACpB,CACA,SAASogC,EAAmB7uB,GAC3B,GAA6B,iBAAlBA,EAASzV,MAAqByV,EAASzV,gBAAgBO,OACjE,OAAO+jC,EAAmB,CAAEtkC,KAAMyV,IAEnC,MAAM/R,EAAS+R,EAASzV,KAExB,cADOyV,EAASzV,KACX0D,GAEAA,EAAOk4B,KAGXl4B,EAAOk4B,KAAKnmB,SAAWA,EAFvB/R,EAAOk4B,KAAO,CAAEnmB,YAGV/R,GALC,CAACk4B,KAAM,CAACnmB,YAAWzV,KAAM,KAMlC,CACA,SAASukC,EAAoBrgC,GAC5B,IAAe,IAAXA,GAA+B,QAAXA,EACvB,MAAO,IAAKw/B,EAAsBC,SAAS,EAAOC,MAAM,GAEzD,IAAK1/B,IAAqB,IAAXA,EACd,MAAO,IAAKw/B,GAEb,GAAe,YAAXx/B,EACH,MAAO,IAAKw/B,EAAsBE,MAAM,GAEzC,GAAe,SAAX1/B,EACH,MAAO,IAAKw/B,EAAsBC,SAAS,GAE5C,MAAMA,QAAEA,EAAOC,KAAEA,EAAIj0B,QAAEA,EAAOk0B,QAAEA,GAAY3/B,EAa5C,OAXAA,EAAS,IAAKw/B,GAEdziC,OAAOs7B,QAAQ,CAAEqH,OAAMD,YAAWt7B,QAAQ,EAAEsT,EAAKjb,WAClCiC,IAAVjC,IACHwD,EAAOyX,GAAOjb,KAEhBO,OAAOs7B,QAAQ,CAAE5sB,UAASk0B,YAAWx7B,QAAQ,EAAEsT,EAAKjb,WACrCiC,IAAVjC,IACHwD,EAAOyX,GAAO,IAAKzX,EAAOyX,MAASjb,MAG9BwD,CACR,CACA,SAASsgC,EAAkBtgC,GAC1B,MAAMR,EAAS6gC,EAAoBrgC,GAAQ+c,eAE3C,GAAK/c,GAAQkjB,KAEN,CACN,MAAMqd,EAAc/gC,EAAOiM,QAAQyX,KACnC1jB,EAAOiM,QAAU,IAAKjM,EAAOiM,QAASyX,KAAMwV,GAAU6H,EAAYvgC,EAAOkjB,KAAMwV,GAChF,MAJCl5B,EAAOmgC,QAAU,IAAKngC,EAAOmgC,QAASzc,KAAM,IAM7C,OAAO1jB,CACR,CACA,SAASghC,EAAel7B,GACvB,OAAIA,EAAMiM,SACoB,KAAzBjM,EAAMiM,SAASqV,OACX,CAAC,CACPzqB,KAAM,YACN68B,QAAS1zB,EAAM0zB,QACfhhB,IAAK1S,EAAMwyB,QAAQmB,cAGcx6B,MAA9B6G,EAAMiM,SAASzV,KAAK48B,OAA4B,GAC7CpzB,EAAMiM,SAASzV,KAAK48B,OAElBpzB,EAAMwyB,QACT,CAAC,CACP37B,KAAM,cACN68B,QAAS1zB,EAAM0zB,QACfhhB,IAAK1S,EAAMwyB,QAAQmB,cAGb,CAAC,CACP98B,KAAM,SACN68B,QAAS1zB,EAAM0zB,SAGlB,CACA,SAASyH,EAAoB1jB,EAAe2b,GAC3C,MAAMl5B,EAAS,CAAA,EACTkhC,EAAO,GAEb,GAAcjiC,MAAVi6B,EAAqB,MAAO,CAAA,EAEhC,KAAOA,EAAOh1B,QACbg9B,EAAK78B,KAAK60B,EAAOrvB,OAClB,IAAK,IAAI/D,KAASo7B,EAAM,CACvB,IAAIvkC,EAAOmJ,EAAMnJ,KACbwkC,EAAU,KACd,IAAK,IAAIprB,KAAKwH,EAAc4iB,QAAS,CACpC,IAAIiB,EAAsB7jB,EACxB4iB,QAAQpqB,GACR9Y,SAASN,GACP0kC,EAAoB9jB,EAActR,QAAQ8J,GAC9C,GAAIqrB,GAAuBC,IAC1BF,EAAUprB,EACK,QAAXorB,GACH,KAEH,CACIA,IACHxkC,EAAOwkC,GACQ5jB,EAActR,QAAQtP,IAEhCqD,EAAOrD,KACXqD,EAAOrD,GAAQ,IACZW,MAAM4I,QAAQJ,GACjB9F,EAAOrD,GAAM0H,QAAQyB,GAErB9F,EAAOrD,GAAM0H,KAAKyB,IAGpBozB,EAAO70B,KAAKyB,EACb,CACA,OAAO9F,CACR,MArJ+Bf,IAA3BJ,GAAS0e,gBACZyiB,EAAuBa,EAAoBhiC,EAAQ0e,gBAuJpD,MAAM4a,EAAcxmB,MAAMwL,OAAO,CAChCyB,QAAS,IACTwZ,QAAS/mB,2BAA2BC,SACjCD,2BAA2BE,UAC3B,MAGJ4mB,EAAYE,aAAaC,QAAQ/3B,IAAIC,IACpC,GAAqB,QAAjBA,EAAO+X,SAAqB/X,EAAOlE,KACtC,OAAOkE,EAER,GAAIA,EAAOlE,gBAAgBi8B,SAC1B,OAAO/3B,EAER,IAAKjD,OAAOi7B,OAAOh4B,EAAOlE,MAAMm8B,MAAMx2B,KACjCA,aAAgBy2B,aAEhBp7B,MAAM4I,QAAQjE,IACVA,EAAKw2B,MAAM/0B,KAAOA,aAAai1B,SAEpC,CACH,MAAMC,EAAUr7B,OAAOs7B,QAAQr4B,EAAOlE,MAAMsH,OAAO,CAACk1B,GAAK7gB,EAAKhW,MAC7D,GAAIA,aAAgBy2B,SACnB,IAAK,MAAM7jB,KAAQ5S,EAClB62B,EAAGP,SAASQ,OAAO9gB,GAAOhW,EAAKiC,OAAS,EAAI,KAAO,IAAK2Q,QAC/CvX,MAAM4I,QAAQjE,GACpBA,EAAKw2B,MAAM/0B,KAAOA,aAAai1B,OAClCG,EAAGE,SAAS/gB,GAAOhW,EAEnBA,EAAK0C,QAAQkQ,GAAQikB,EAAGP,SAASQ,OAAO9gB,GAAOhW,EAAKiC,OAAS,EAAI,KAAO,IAAK2Q,IAG9EikB,EAAGE,SAAS/gB,GAAOhW,EAEpB,OAAO62B,GACL,CACFP,SAAU,IAAIA,SACdS,SAAU,CAAA,IAEXJ,EAAQL,SAASQ,OAAO,YAAa3f,KAAK6f,UAAUL,EAAQI,WAC5Dx4B,EAAOlE,KAAOs8B,EAAQL,QACvB,CAEA,OAAO/3B,IAGR23B,EAAYE,aAAatmB,SAASxR,IACjCwR,IACuC,OAAlCA,EAASvR,QAAQ+c,gBACkB,IAAnCxL,EAASvR,QAAQ+c,eACiB,QAAlCxL,EAASvR,QAAQ+c,eAIjBxL,EAASzV,KAAK48B,SACjBnnB,EAASzV,KAAK48B,OAASnnB,EAASzV,KAAK48B,OAAO1xB,OAC3C8R,IAAQvH,EAASvR,OAAO8Y,EAAI3c,KAAO,iBAAmB46B,EAAI/2B,OAAOg3B,iBAAiB1c,KAAKqe,sBAAsB7f,EAAI3c,OAAO2c,EAAKvH,EAASvR,UALhIogC,EAAmB7uB,IAU5BjM,IACC,GAAkB,gBAAdA,EAAMszB,KACT,OAAOh6B,QAAQE,OAAO,CAAE+5B,SAAS,KAASvzB,IAE3C,MAAMw7B,EAAcR,EAAkBh7B,EAAMtF,QAE5C,IAAK8gC,EAAYpB,KAChB,OAAO9gC,QAAQE,OAAOwG,GAEvB,MAAMy7B,EAAYP,EAAel7B,GAE3BozB,EAAS+H,EAAoBK,EAAaC,GAEhD,IAAK,IAAI5kC,KAAQu8B,EAChBoI,EAAYr1B,QAAQtP,GAAMu8B,EAAOv8B,IAGlC,OAAI4kC,EAAUr9B,OACN9E,QAAQE,OAAOwG,GAEhB1G,QAAQE,OAAO,CAAE+5B,SAAS,KAASvzB,MAI5CyxB,EAAI/2B,OAAOg3B,iBAAiB1c,KAAO,CAClCyH,OAAO/J,GACC2f,EAAY5V,OAAO,CAAC/J,QAE5BlP,IAAGA,CAACoa,EAAMmU,EAAKjmB,EAAQpR,MACrBq3B,EAAKjmB,EAAQpR,GAAUmgC,EAAWjd,EAAMmU,EAAKjmB,EAAQpR,GAClDoR,IACCpR,EACHA,EAAOoR,OAASA,EAEhBpR,EAAS,CAACoR,WAELumB,EAAY7uB,IAAIuuB,EAAKr3B,IAE7BoZ,KAAIA,CAAC8J,EAAMmU,EAAKv7B,EAAMkE,MACpBq3B,EAAKv7B,EAAMkE,GAAUmgC,EAAWjd,EAAMmU,EAAKv7B,EAAMkE,GAC3C23B,EAAYve,KAAKie,EAAKv7B,EAAMkE,IAEpC2S,IAAAA,CAAKskB,EAAS+J,EAAiB9d,GAC9B,GAAIpmB,MAAM4I,QAAQuxB,GAAU,CAC3B,MAAM3c,EAAOyc,EAAI/2B,OAAOg3B,iBAAiB1c,KAEzC,OAAO1b,QACLqe,WAAWga,EAAQpxB,IAAI,CAAC7F,EAAQqE,KAC3BvH,MAAM4I,QAAQ1F,KAClBA,EAAS,CAAC,IAAMqE,EAAOrE,IACjBsa,EAAK3H,KAAK3S,EAAO,GAAI,CAC3Bod,YAAapd,EAAO,GACpB+c,eAAe,OAGhB5c,KAAKX,IACL,MAAM,CAAA,CAAMQ,GAAWmgC,EAAWjd,OAAMzkB,OAAWA,EAAWuiC,GAAmB,IAC3EF,EAAcR,EAAkBtgC,GAEtC,IAAK8gC,EAAYrB,UAAYqB,EAAYpB,KACxC,OAAOlgC,EAGR,MAAMyhC,EAAc,CAAA,EACpB,IAAK,IAAIn6B,KAAOtH,EAAQ,CACvB,MAAQ0hC,EAASz/B,GAAwB,cAAfqF,EAAI8f,OAC3B,CAAEka,EAAYrB,QAAS34B,EAAItK,OAC3B,CAAEskC,EAAYpB,KAAM54B,EAAIq6B,QAC3B,IAAKD,EACJ,OAED,MAAMxI,EAAS+H,EAAoBK,EAAaN,EAAe/+B,IAE/D,IAAK,IAAItF,KAAQu8B,EACXuI,EAAY9kC,GAKhB8kC,EAAY9kC,GAAMsF,EAAKzB,OAAOod,aAAesb,EAAOv8B,GAJpD8kC,EAAY9kC,GAAQ,CACnB,CAACsF,EAAKzB,OAAOod,aAAcsb,EAAOv8B,GAKtC,CAEA,IAAK,IAAIilC,KAAWH,EACnBH,EAAYr1B,QAAQ21B,GAASH,EAAYG,IAG1C,OAAO5hC,GAEV,CACA,IAAIuY,OAAEA,EAAMC,IAAEA,EAAG5G,OAAEA,EAAMpR,OAAEA,GAAWi3B,EAStC,YARwBx4B,IAApBuiC,IACHhhC,EAASghC,GAELjpB,IACJA,EAAS,OAENA,EAAOqmB,cACVrmB,EAASA,EAAOqmB,eACH,OAAVrmB,EACIxa,KAAKuL,IAAIoa,EAAMlL,EAAK5G,EAAQpR,GACf,QAAV+X,EACHxa,KAAK6b,KAAK8J,EAAMlL,EAAK5G,EAAQpR,QAEpCqF,QAAQC,MAAM,8BAA+ByS,EAE/C,EACAspB,gBAAgBrhC,GACRsgC,EAAkBtgC,IAI3B+2B,EAAIhiB,QAAQ,OAAQgiB,EAAI/2B,OAAOg3B,iBAAiB1c,QC5hBlDgnB,GAAe,CACdpnB,aAAaW,IACL,CACN9C,OAAQ,MACRC,IAAK,uCAAyC6C,IAGhDC,YAAWA,CAACC,EAAWC,KAEf,CACNjD,OAAQ,OACRC,IAAK,uCACL5G,OAJc,CAAC2J,aAAYC,cAO7BC,YAAWA,KACH,CACNlD,OAAQ,MACRC,IAAK,yCAGPkD,qBAAoBA,KACZ,CACNnD,OAAQ,MACRC,IAAK,8CCrCR,MAAM+C,GAAa/b,IAAIuiC,SAAS,IAC1BC,GAAiB,CAAA,EACvB,IAAIC,GAAgBziC,IAAIK,IAAIwR,2BAA2B4wB,eAC5CC,GAAc1iC,IAAI6C,SAAS,IACjC4/B,GAAcjlC,MACXqU,2BAA2B8wB,iBAAiBC,KAAK5mB,GAAYA,EAASwW,SAAWiQ,GAAcjlC,OAAOqlC,QAD7E,MAoBjC,MAAMzN,GAAU,CACfqN,iBACAC,eACA5mB,WAAAA,CAAYE,GACX,MAAM8mB,EAAW/kC,OAAO6M,KAAKmR,IAC7B,OAAOxd,KAAKyC,OAAOg3B,iBAAiB1c,KAClC3H,KAAK2uB,GAAWxmB,YAAYgnB,EAAU9mB,IACtC7a,KAAK2G,IACLA,EAAIhL,KAAKqI,QAAQ49B,IAChBhnB,GAAWgnB,EAAIlnB,UAAUknB,EAAIC,QAAUD,EAAIE,OAI5CR,GAAcjlC,MAAQwe,EAEflU,GAEV,EACAoT,YAAAA,CAAaW,GACZ,OAAI/d,MAAM4I,QAAQmV,GACVjc,QAAQ+1B,IAAI9Z,EAAShV,IAAItI,KAAKyC,OAAOg3B,iBAC1C1hB,GAAG4E,gBAEDsnB,GAAe3mB,KACnB2mB,GAAe3mB,GAAYtd,KAAKyC,OAAOg3B,iBAAiB1c,KACtD3H,KAAK2uB,GAAWpnB,aAAaW,IAC7B1a,KAAK2G,GAAOA,GAAKhL,KA1CtB,SAAyByb,EAAKsD,GAC7B,OAAOtD,EAAIvQ,OAAOyM,GAAKA,EAAEoH,UAAYA,GAAUzX,OAAO,CAAC0D,EAAKo7B,KACtDp7B,EAAIo7B,EAAKF,UACbl7B,EAAIo7B,EAAKF,QAAUE,EAAKD,MAClBn7B,GACL,CAAA,EACJ,CAoC6Bq7B,CAAgBr7B,EAAIhL,KAAM+e,GAAY,CAAA,GAC9D1a,KAAK2G,IACLiU,GAAWF,GAAY/T,KAEnB06B,GAAe3mB,GACvB,EACAunB,KAAAA,CAAMvnB,EAAUmnB,EAAQ5wB,GAEvB,OADA/L,QAAQ6xB,KAAK,cACNl4B,IAAI6C,SAAS,IAAMtE,KAAKgY,EAAEsF,EAAUmnB,EAAQ5wB,GACpD,EACAmE,CAAAA,CAAEsF,EAAUmnB,EAAQ5wB,GAQnB,QAPe3S,IAAX2S,IACFtU,MAAM4I,QAAQmV,IAAgC,GAAnBA,EAASnX,QACpCmX,EAASwnB,OAAuC,GAA9BxnB,EAASwnB,MAAM,KAAK3+B,UAEvC0N,EAAS4wB,GACRnnB,EAAUmnB,GAAUnnB,EAASwnB,MAAQxnB,EAASwnB,MAAM,KAAOxnB,QAE9Cpc,IAAXujC,EAEH,OADA38B,QAAQC,MAAM,gBAAiBuV,EAAUmnB,EAAQ5wB,GAC1C,GAER,IAAIkxB,EAAMtjC,IAAI6C,SAAS,IACjBkZ,GAAWF,GA1DnB,SAAiCA,EAAUmnB,EAAQ5wB,GAClD,IAAI5R,EAASub,GAAWF,GAAUmnB,GAClC,OAAKxiC,GAED4R,IACH5R,EAASA,EAAO0gB,QAAQ,eAAgB,CAACqiB,EAAOC,SAAsB/jC,IAAf2S,EAAOoxB,GAAoBD,EAAQnxB,EAAOoxB,KAC3FhjC,GAHC,aAAewiC,EAAS,IAIjC,CAqDUS,CAAwB5nB,EAAUmnB,EAAQ5wB,GADzC,IAKT,OAFK2J,GAAWF,IACftd,KAAK2c,aAAaW,GACZynB,EAAI9lC,KACZ,GAGD,IAAAkmC,GAAe,CACd5L,OAAAA,CAAQC,EAAK14B,GACP04B,EAAI/2B,OAAOg3B,iBAAiBvc,SAChCsc,EAAIh3B,IAAI82B,GACJE,EAAI/2B,OAAOg3B,iBAAiB1c,MAChCyc,EAAIh3B,IAAIq/B,IACTrI,EAAI/2B,OAAOg3B,iBAAiB1hB,GAAK,CAChCC,EAAG6e,GAAQ7e,EACX2E,aAAcyoB,GAAOvO,GAAQla,aAAavH,KAAKokB,EAAK4L,GACpD7nB,YAAa8nB,GAAQxO,GAAQtZ,YAAYnI,KAAKokB,EAAK6L,GACnDnB,cAAeA,GACfC,eACAU,MAAOhO,GAAQgO,OAEhBrL,EAAIhiB,QAAQ,KAAMgiB,EAAI/2B,OAAOg3B,iBAAiB1hB,GAC/C,gECtGD,IAAIutB,GAAa7jC,IAAIK,IAAIwR,2BAA2BiyB,MAAMjnC,MAC1D,MAAMknC,GAAclyB,2BAA2BiyB,MAAME,MAE/CC,GAAeH,IACpB,IAAKA,EAAO,OAEZ,IAAK,MAAMA,KAASC,GACnBljC,SAASqjC,gBAAgBj3B,UAAU7G,OAAO09B,GAE3CD,GAAWrmC,MAAQsmC,EACnBjjC,SAASqjC,gBAAgBj3B,UAAUnI,IAAIg/B,GAEvCjjC,SAASzB,KAAK+kC,aAAa,gBAAiBL,GAE5C,IAAIM,EAAavjC,SAASgP,cAAc,2CAC3B,QAATi0B,EACHM,EAAWC,WAAWC,KAAK9mC,MAAQ4mC,EAAWC,WAAWC,KAAK9mC,MAAM0jB,QAAQ,wBAAyB,yBAClF,SAAT4iB,GAINM,EAAWC,WAAWC,KAAK9mC,MAAMC,SAAS,2BAH9C2mC,EAAWC,WAAWC,KAAK9mC,MAAQ4mC,EAAWC,WAAWC,KAAK9mC,MAAM0jB,QAAQ,uBAAwB,0BAOrGqjB,aAAaC,QAAQ,QAASV,IAe/B,IAAAW,GAAe,CACd3M,QAASA,CAACC,EAAI14B,KAEbwB,SAASqjC,gBAAgBj3B,UAAUnI,IAAI++B,GAAWrmC,OAf5BknC,MAEvB,IAAIZ,EAAQS,aAAaI,QAAQ,SAC5Bb,GAAUC,GAAYtmC,SAASqmC,KAEnCA,EAAQC,GAAY,GACpBQ,aAAaC,QAAQ,QAAQV,IAE9BG,GAAYH,IASXY,GAEA3M,EAAI/2B,OAAOg3B,iBAAiB4M,OAAS,CACpCf,cACAE,eACAc,YAAcf,IACbG,GAAYH,OCnDhB,MAAMgB,GAAYtnC,IACjB,MAAMunC,EAAMvnC,EAAMkW,SAAS,IAC3B,OAAsB,IAAfqxB,EAAIrgC,OAAe,IAAMqgC,EAAMA,GAGvC,SAASC,GAAeC,GAMvB,OADgB,IAHRvtB,SAASutB,EAASC,UAAU,EAAG,GAAI,IAGf,IAFpBxtB,SAASutB,EAASC,UAAU,EAAG,GAAI,IAEH,IADhCxtB,SAASutB,EAASC,UAAU,EAAG,GAAI,KACK,KACjC,IAAO,QAAU,OACjC,CAEA,IAAAC,GAAe,CACdpmC,OAAAA,CAAQqmC,EAASC,GAChB,MAAMC,EAAU3tB,OAAOC,iBAAiBwtB,GAASG,gBACjD,IAAIC,EAAW,IAAIC,OAAO,mFACtBC,EAAQJ,EAAQ/B,MAAMiC,GAC1B,GAAIE,EAAO,CACNA,EAAMhhC,OAAS,GAClB2B,QAAQC,MAAM,4BAEf,IAAIq/B,EAAIjuB,SAASguB,EAAM,GAAI,IACvBE,EAAIluB,SAASguB,EAAM,GAAI,IACvB7/B,EAAI6R,SAASguB,EAAM,GAAI,IACvBG,EAAW,IAAIf,GAASa,KAAKb,GAASc,KAAKd,GAASj/B,KACxDu/B,EAAQn3B,MAAM63B,MAAQd,GAAea,EACtC,MAGCT,EAAQn3B,MAAM63B,MAAQd,GAAeM,EAEvC,GC7BD,MAAMS,GAAkB,CACvBvV,YAAa,CACZrlB,GAAI,iBACJ66B,SAAU,8BACVC,OAAQ,CACP,oBAGFC,OAAQ,CACP/6B,GAAI,MACJ66B,SAAU,uBACVC,OAAQ,CACP,UACA,QACA,YAGFhjB,OAAQ,CACP9X,GAAI,YACJ66B,SAAU,oBAEXG,QAAS,CACRh7B,GAAI,cACJ66B,SAAU,6BAEXhjB,WAAY,CACX7X,GAAI,gBACJ66B,SAAU,yCAKNI,GAAcroC,OAAO6M,KAAKm7B,IAOhC,SAASM,GAAkB7oC,GAC1B,IAAKA,EACJ,OAAO,EACR,GAAIM,MAAM4I,QAAQlJ,GACjB,OAAOA,EAAMy7B,MAAMoN,IACpB,IAAK7oC,EAAML,KACV,OAAO,EAER,GAA8B,eAA1BK,EAAML,KAAKmpC,QAAO,IAAuB,CAC5C,IAAKvoC,OAAO0V,UAAUwoB,eAAetoB,KAAKnW,EAAO,UAChD,OAAO,EAER,IAAK4oC,GAAY3oC,SAASD,EAAML,KAAKmpC,OAAO,EAAG9oC,EAAML,KAAKuH,OAAO,KAChE,OAAO,CACT,KAAO,CACN,IAAK3G,OAAO0V,UAAUwoB,eAAetoB,KAAKnW,EAAO,MAChD,OAAO,EAER,IAAK4oC,GAAY3oC,SAASD,EAAML,MAC/B,OAAO,EAER,GAAI4oC,GAAgBvoC,EAAML,MAAM8oC,SAC1BF,GAAgBvoC,EAAML,MAAM8oC,OAAOhN,MAAMsN,GAASxoC,OAAO0V,UAAUwoB,eAAetoB,KAAKnW,EAAO+oC,IAClG,OAAO,CAEV,CAEA,OAAO,CACR,CAEA,SAASC,GAAqBhjC,EAAOijC,EAAcC,GAClD,IAAInuB,EAAM,KAEV,IAEC,GADAA,EAAMouB,GAAgBnjC,EAAOkjC,IACxBnuB,EACJ,OAAO,KAER,IAAKmuB,GAAU5oC,MAAM4I,QAAQ6R,IAE5B,GADAA,EAAMA,EAAIvQ,OAAOq+B,KACZ9tB,EAAI7T,OACR,OAAO,UACF,IAAK2hC,GAAkB9tB,GAC7B,OAAO,KAER,GAAIkuB,GAAgBA,EAAa/hC,OAChC,GAAI5G,MAAM4I,QAAQ6R,GAAM,CACvB,GAAImuB,IAAWnuB,EAAI0gB,MAAMjzB,GAAKygC,EAAahpC,SAASuI,EAAE7I,OACrD,OAAO,KACD,IAAKupC,IACXnuB,EAAMA,EAAIvQ,OAAOhC,GAAKygC,EAAahpC,SAASuI,EAAE7I,QACzCob,EAAI7T,QACR,OAAO,IAEV,MAAO,IAAK+hC,EAAahpC,SAAS8a,EAAIpb,MACrC,OAAO,IAGV,CAAE,MAAMypC,GACP,OAAO,IACR,CAEA,OAAI9oC,MAAM4I,QAAQ6R,IAAsB,GAAdA,EAAI7T,OACtB6T,EAAIqqB,KAAKxlC,SAEVmb,CACR,CAMA,SAASouB,GAAgBnjC,EAAOkjC,GAC/B,MAAMlmC,EAAS,GAEf,IAAK,MAAMrD,KAAQqG,EAAM6L,aAAaw3B,MAAO,CAC5C,GAA0B,oBAAtB1pC,EAAKmpC,OAAO,EAAG,IAA2B,CAC7C,GAAII,EACH,OAAO,KACR,QACD,CACA,IAAII,EAAY3pC,EAAKmpC,OAAO,IACxBS,GAAa,EAKjB,GAJ6B,eAAzBD,EAAUR,QAAO,MACpBQ,EAAYA,EAAUR,OAAO,EAAGQ,EAAUpiC,OAAO,IACjDqiC,GAAa,IAETX,GAAY3oC,SAASqpC,GAAY,CACrC,GAAIJ,EACH,OAAO,KACR,QACD,CACA,IAAI5pC,EAAO8c,KAAKC,MAAMrW,EAAM6L,aAAagtB,QAAQl/B,IAC7C4pC,EACHvmC,EAAOqE,QAAQ/H,EAAKk8B,QAEpBx4B,EAAOqE,KAAK/H,EACd,CAEA,OAAK0D,EAAOkE,OAGS,GAAjBlE,EAAOkE,OACHlE,EAAO,GAERA,EALC,IAMT,CAgNA,IAAAwmC,GAAe,IA/TQjpC,OAAO6M,KAAKm7B,IAAiB3hC,OAAO,CAAC0D,EAAK3K,KAChE2K,EAAI,QAAU3K,EAAKmiC,eAAiBniC,EAC7B2K,GACL,IA8TFu+B,qBACAG,wBACAS,oBA1PD,SAA6BzjC,EAAOijC,EAAcC,GACjD,QAAOF,GAAqBhjC,EAAOijC,EAAcC,EAClD,EAyPCC,mBACAO,yBApND,SAASA,EAAyBpqC,EAAM4pC,GACvC,GAAI5oC,MAAM4I,QAAQ5J,GAAO,CACxB,MAAMqqC,EAAYrqC,EAAK+J,IAAIqgC,GAA0Bl/B,OAAO5K,SAC5D,IAAK+pC,EAAUziC,OACd,OACD,GAAIgiC,GAAUS,EAAUziC,QAAU5H,EAAK4H,OACtC,OAED,MAAM0iC,EAASD,EAAU/iC,OAAO,CAAC0D,EAAKrF,KAChCqF,EAAIrF,EAAKtF,QACb2K,EAAIrF,EAAKtF,MAAQ,IAClB2K,EAAIrF,EAAKtF,MAAM0H,KAAKpC,GACbqF,GACL,CAAA,GAEH,OAAO/J,OAAOs7B,QAAQ+N,GAAQvgC,IAAI,EAAE1J,EAAM67B,KACrCA,EAAOt0B,OAAS,EACZ,CACNvH,KAAMA,EAAO,cACb67B,UAGKA,EAAO,GAEhB,CAEA,GAAIj7B,OAAO0V,UAAUwoB,eAAetoB,KAAK7W,EAAM,SAAWupC,GAAkBvpC,GAC3E,OAAOA,EAGR,MAAMuqC,EAAQtpC,OAAOs7B,QAAQ0M,IAAiBnD,KAAK,EAAC,CAAI0E,OAClDvpC,OAAO0V,UAAUwoB,eAAetoB,KAAK7W,EAAMwqC,EAAQn8B,OAEpDm8B,EAAQrB,SACNqB,EAAQrB,OAAOhN,MAAMsN,GAASxoC,OAAO0V,UAAUwoB,eAAetoB,KAAK7W,EAAMypC,MAMhF,IAAKc,EACJ,OAGD,MAAQlqC,EAAMmqC,GAAYD,EAEpBjO,EAAU,CAAA,EAMhB,OALAA,EAAQj8B,KAAOA,EACfi8B,EAAQjuB,GAAKrO,EAAKwqC,EAAQn8B,IACtBm8B,EAAQrB,QACXqB,EAAQrB,OAAO9gC,QAAQohC,GAASnN,EAAQmN,GAASzpC,EAAKypC,IAEhDnN,CACR,EAgKCmO,gBA9JD,SAASA,EAAgB/jC,EAAOgkC,EAAiBl4B,GAAe,GAC/D,GAAIA,EAAc,CACjB,MACMm4B,GADY3pC,MAAM4I,QAAQ8gC,GAAmBA,EAAkB,CAAEA,IACxC3gC,IAAIpE,IAClC,MAAMilC,EAAO7mC,SAASC,cAAc,KAC9B6mC,EAAQ9mC,SAASC,cAAc,QAC/B8mC,EAAgB/mC,SAASC,cAAc,QAE7C8mC,EAAcC,UAAY,gCAC1BF,EAAME,UAAY,QAEd9B,GAAgBtjC,EAAKtF,OACxBuqC,EAAKG,UAAY9B,GAAgBtjC,EAAKtF,MAAM6oC,UAAY,uBACxD2B,EAAMG,YAAcrlC,EAAK0I,IACU,eAAzB1I,EAAKtF,KAAKmpC,QAAO,KAAyBP,GAAgBtjC,EAAKtF,KAAKmpC,OAAO,EAAG7jC,EAAKtF,KAAKuH,OAAO,MACzGkjC,EAAc35B,MAAM85B,UAAY,qCAChCL,EAAKG,UAAY9B,GAAgBtjC,EAAKtF,KAAKmpC,OAAO,EAAG7jC,EAAKtF,KAAKuH,OAAO,KAAKshC,UAAY,uBACvF2B,EAAMG,YAAc,IAAMrlC,EAAKu2B,OAAOt0B,SAEtCgjC,EAAKG,UAAY,uBACjBF,EAAMG,YAAcrlC,EAAK0I,IAAM,IAGhCy8B,EAAcrO,OAAOmO,GAErB,MAAMM,EAAgBnnC,SAASC,cAAc,OAG7C,OAFAknC,EAAcH,UAAY,oDAC1BG,EAAczO,OAAOqO,EAAeD,GAC7BK,IAGF76B,EAAYtM,SAASC,cAAc,OACzCqM,EAAU06B,UAAY,8BACtB16B,EAAUosB,UAAUkO,GAEpB5mC,SAASzB,KAAKm6B,OAAOpsB,GACrB3J,EAAM6L,aAAaC,aAAanC,GAAW,GAAK,GAChD86B,sBAAsB,KACrBpnC,SAASzB,KAAKwB,YAAYuM,IAE5B,CACA,GAAIrP,MAAM4I,QAAQ8gC,GACjB,OAAOA,EAAgBriC,QAAQrI,GAAQyqC,EAAgB/jC,EAAO1G,IAG/D0G,EAAM6L,aAAa64B,QAAQ,mBAAqBV,EAAgBrqC,KAAMyc,KAAK6f,UAAU+N,GACtF,EAiHCW,cAtGD,SAAuB3kC,EAAOijC,EAAcC,GAU3C,OATKD,GAAiBA,EAAa/hC,SAClC+hC,EAAeL,IAChBK,EAAeA,EAAa5/B,IAAI1J,GAAQ,mBAAqBA,KAE3C,IAAIqG,EAAM6L,aAAaw3B,OAK1BniC,SAGVgiC,EAGE,IAAIljC,EAAM6L,aAAaw3B,OAAO5N,MAAM97B,GAAQspC,EAAahpC,SAASN,IAFjEspC,EAAa9/B,KAAKxJ,GAAQ,IAAIqG,EAAM6L,aAAaw3B,OAAOppC,SAASN,IAG1E,EAsFCirC,mBApFD,SAA4Bv1B,EAAID,EAASI,GAIxC,IAAIq1B,GAAY,EACZC,GAAkB,EAEtB,SAASC,EAAKxlC,GACbslC,GAAY,EACZC,GAAkB,EAElB3wB,OAAOG,iBAAiB,YAAa0wB,GAAiB,GACtD7wB,OAAOG,iBAAiB,YAAa2wB,GAAiB,GACtD9wB,OAAOG,iBAAiB,OAAQ4wB,GAAY,GAE5C91B,EAAQ7P,GAER8P,EAAG81B,oBAAoB,YAAaJ,EACrC,CAEA,SAASK,EAAQ7lC,EAAK8lC,GAErBlxB,OAAOgxB,oBAAoB,YAAaH,GAAiB,GACzD7wB,OAAOgxB,oBAAoB,YAAaF,GAAiB,GACzD9wB,OAAOgxB,oBAAoB,OAAQD,GAAY,GAE/C11B,EAAQjQ,EAAK8lC,GAEbh2B,EAAGiF,iBAAiB,YAAaywB,EAClC,CAEA,SAASC,EAAgBzlC,GACxBulC,GAAkB,EACdz1B,GAAM9P,EAAIC,QAAW6P,EAAG/B,SAAS/N,EAAIC,QAGxCqlC,GAAY,EAFZO,EAAQ7lC,EAIV,CACA,SAAS0lC,EAAgB1lC,GACxB,GAAI8P,GAAM9P,EAAIC,QAAW6P,EAAG/B,SAAS/N,EAAIC,SAMxC,GAAIqlC,EAEH,YADAA,GAAY,QANb,GAAIC,EAEH,YADAA,GAAkB,GASpBM,EAAQ7lC,EACT,CACA,SAAS2lC,EAAW3lC,GACnB6lC,EAAQ7lC,GAAK,EACd,CAIA,OAFA8P,EAAGiF,iBAAiB,YAAaywB,GAE1B,KAEN11B,EAAG81B,oBAAoB,YAAaJ,GAEtC,GCtVAO,GAAe,CACd/pC,OAAAA,CAAQ8T,EAAIwyB,EAAS0D,GACpB,GAAmB,aAAf1D,EAAQ2D,IACXn2B,EAAGiF,iBAAiB,kBAAmB/U,IACtCA,EAAIW,iBACJ2hC,EAAQ7nC,MAAQuF,EAAIu6B,OAAO76B,OAE5BoQ,EAAGiF,iBAAiB,YAAa/U,IAChC8P,EAAG+sB,cAAc,IAAIM,YAAY,qBAAsB,CACtD+I,YAAY,EACZC,SAAS,EACT5L,OAAQ,CACP76B,KAAM4iC,EAAQ7nC,MACdwG,EAAGjB,EAAIomC,QAAUt2B,EAAGu2B,YACpBnlC,EAAGlB,EAAIsmC,QAAUx2B,EAAGy2B,aACpBC,cAAexmC,QAIlB8P,EAAGiF,iBAAiB,UAAW/U,IAC9B8P,EAAG+sB,cAAc,IAAIM,YAAY,mBAAoB,CACpD+I,YAAY,EACZC,SAAS,EACT5L,OAAQ,CACP76B,KAAM4iC,EAAQ7nC,MACd+rC,cAAexmC,aAIZ,GAAmB,YAAfsiC,EAAQ2D,IAAmB,CACrC,IAAIQ,EAAS,KACb32B,EAAGiF,iBAAiB,WAAY/U,IAC/B,IAAIymC,EAGJ,OADAA,EAAS32B,EAAGzF,wBACLyF,EAAG+sB,cAAc,IAAIM,YAAY,qBAAsB,CAC7D5C,OAAQ,CAAEiM,cAAexmC,QAG3B4U,OAAOG,iBAAiB,YAAa/U,IACpC,IAAKymC,EACJ,OACD,IAAIC,EAWJ,OATCA,OAD0B,IAAhB1mC,EAAIiG,QACR,CACLhF,EAAGjB,EAAI2mC,MAAQ7oC,SAASqjC,gBAAgByF,WACxC1lC,EAAGlB,EAAI6mC,MAAQ/oC,SAASqjC,gBAAgB2F,WAGnC,CACL7lC,EAAGjB,EAAIiG,QAAUnI,SAASzB,KAAKuqC,WAAa9oC,SAASqjC,gBAAgByF,WACrE1lC,EAAGlB,EAAIkG,QAAUpI,SAASzB,KAAKyqC,UAAYhpC,SAASqjC,gBAAgB2F,WAElEJ,EAAIzlC,EAAIwlC,EAAOr7B,KAAOq7B,EAAO37B,MAAQ,GAAK47B,EAAIzlC,EAAIwlC,EAAOr7B,MAAQs7B,EAAIxlC,EAAIulC,EAAOt7B,IAAMs7B,EAAO97B,OAAS,GAAK+7B,EAAIxlC,EAAIulC,EAAOt7B,KAC7Hs7B,EAAS,KACF32B,EAAG+sB,cAAc,IAAIM,YAAY,qBAAsB,CAC7D5C,OAAQ,CAAEiM,cAAexmC,YAH3B,IAOD4U,OAAOG,iBAAiB,OAAQ/U,IAC/B,GAAKymC,EAIL,OADAA,EAAS,KACF32B,EAAG+sB,cAAc,IAAIM,YAAY,qBAAsB,CAC7D5C,OAAQ,CAAEiM,cAAexmC,OAG5B,KAA0B,YAAfsiC,EAAQ2D,KAClBn2B,EAAGiF,iBACFutB,EAAQyE,UAAUC,KAAO,YAAc,WACvChnC,IACC,MAAMinC,EAAY3E,EAAQ7nC,iBAAiBqE,SACxCwjC,EAAQ7nC,MAAMuF,GACdsiC,EAAQ7nC,MACL8/B,EAAS0M,EAAUA,UAAYA,EAAY,CAAEA,aACnDn3B,EAAG+sB,cAAc,IAAIM,YAAY,sBAAuB,CACvD+I,YAAY,EACZC,SAAS,EACT5L,aAKL,EACA3wB,OAAAA,CAAQkG,EAAIwyB,EAAS0D,EAAOkB,GACR,aAAf5E,EAAQ2D,KACXn2B,EAAG+sB,cAAc,IAAIM,YAAY,kBAAmB,CACnD+I,YAAY,EACZ3L,OAAQ,CACP76B,KAAM4iC,EAAQ7nC,SAIlB,GC1FD0sC,GAAe,CACdrtC,KAAM,sBACNstC,WAAY,CACXrB,WAED/yB,OAAAA,GACC,MAAO,CACNq0B,OAAQpqC,IAAI6C,SAAS,IAAMtE,KAAK8rC,iBAChCC,YAAatqC,IAAI6C,SAAS,IAAMtE,KAAK+rC,aACrCC,YAAavqC,IAAI6C,SAAS,IAAMtE,KAAKqE,UAAYrE,KAAKgsC,aAExD,EACA/nC,OAAQ,CACP0G,KAAM,OACNshC,eAAgB,kBAEjBvtC,MAAO,CACNmtC,OAAQtsC,MACRwsC,YAAaxsC,OAEdM,MAAO,CACN,QAEDtB,KAAIA,KACI,CACN8F,UAAU,EACVs/B,SAAS,EACTuI,qBAAsB,KACtBC,qBAAsB,KACtBC,gBAAiB,EACjBC,eAAgB,KAChBL,aAAa,EAEbM,eAAe,IAGjBhoC,SAAU,CACTwnC,eAAAA,GACC,GAAI9rC,KAAKqE,SAAU,CAClB,GAAIrE,KAAKksC,qBAAsB,CAC9B,MAAMplC,EAAQ9G,KAAK6rC,OAAOU,UAAUr2B,GAAKA,EAAEtJ,IAAM5M,KAAKksC,qBAAqBt/B,IAC3E,OAAI5M,KAAKwsC,eAAiBxsC,KAAKssC,cACvBtsC,KAAK6rC,OAAOY,UAAU3lC,EAAO,EAAG9G,KAAKwsC,cAErCxsC,KAAK6rC,OAAOY,UAAU3lC,EAAO,EACtC,CACA,GAAI9G,KAAKwsC,eAAiBxsC,KAAKssC,cAC9B,MAAO,IAAItsC,KAAK6rC,OAAQ7rC,KAAKwsC,aAC/B,CAEA,OAAOxsC,KAAK6rC,MACb,EACAa,oBAAAA,GACC,OAAI1sC,KAAKqE,UACJrE,KAAKssC,cAED,IAAItsC,KAAK+rC,YAAa,CAC5BY,MAAO,IAAIlxB,KAAKzb,KAAKosC,iBACrBvqC,MAAO,mBAKH7B,KAAK+rC,WACb,EACAS,YAAAA,GACC,IAAKxsC,KAAKqE,WAAarE,KAAKgsC,YAC3B,OAAO,KACR,IAAKhsC,KAAKosC,gBACT,OAAO,KAER,MAAMnnC,EAAQjF,KAAKksC,sBAAwBlsC,KAAKmsC,qBAEhD,IAAKlnC,EACJ,OAAO,KAGR,IAAIkB,EAASlB,EAAM2nC,IAAM3nC,EAAM0nC,MAI/B,OAHI3sC,KAAKqsC,iBACRlmC,EAASnG,KAAKqsC,eAAehI,KAAKuI,GAAOA,GAAO5sC,KAAKosC,gBAAkBjmC,GAAUnG,KAAKosC,iBAEhF,CACNS,KAAM5nC,EAAM4nC,KACZF,MAAO3sC,KAAKosC,gBACZQ,IAAK5sC,KAAKosC,gBAAkBjmC,EAE9B,GAEDrG,QAAS,CACRgtC,WAAAA,CAAYtoC,GACX,MAAMjG,EAAOkqC,GAAYsE,sBAAsBvoC,EAAIu6B,OAAO76B,KAAK2oC,MAC3DpE,GAAYX,kBAAkBvpC,KACjCkqC,GAAYO,gBAAgBxkC,EAAIu6B,OAAOiM,cAAezsC,GACtDyB,KAAKksC,qBAAuB1nC,EAAIu6B,OAAO76B,KAEzC,EACA8oC,SAAAA,GACChtC,KAAKksC,qBAAuB,KAC5BlsC,KAAKqE,UAAW,CACjB,EACA4oC,WAAAA,CAAYzoC,GAGX,GAFAxE,KAAKqE,UAAW,EAEXrE,KAAKksC,qBAmBTlsC,KAAKgsC,YAAchsC,KAAKisC,eAAejsC,KAAKksC,qBAAsBlsC,KAAK2K,UAnBxC,CAC/B,MAAM1F,EAAQwjC,GAAYR,qBAAqBzjC,EAAIu6B,OAAOiM,eAEzDhrC,KAAKmsC,qBADFlnC,EACyB,CAC3B2H,GAAI3H,EAAM2H,GACVhO,KAAMqG,EAAMrG,KACZ+tC,MAAO1nC,EAAMioC,SACVC,MAAMC,SAASC,QAAQpoC,EAAMioC,UAAUI,QAAQttC,KAAK8a,UACpDqyB,MAAMC,SAASG,QAAQD,QAAQttC,KAAK8a,UACvC8xB,IAAK3nC,EAAMuoC,OACRL,MAAMC,SAASC,QAAQpoC,EAAMuoC,QAAQF,QAAQttC,KAAK8a,UAClDqyB,MAAMC,SAASG,QAAQD,QAAQttC,KAAK8a,UACvC+xB,KAAM5nC,GAGqB,KAE7BjF,KAAKgsC,YAAchsC,KAAKisC,eAAehnC,EAAOjF,KAAK2K,KACpD,CAGD,EACA8iC,WAAAA,GACCztC,KAAKqE,UAAW,CACjB,EACAqpC,YAAAA,CAAalpC,GACZxE,KAAKosC,gBAAkB5nC,EAAIu6B,OAAO0M,UAElCzrC,KAAKqsC,eAAiB7nC,EAAIu6B,OAAO4O,MAAQ,IAC1C,EACAC,MAAAA,CAAOppC,GACDxE,KAAKqE,UAAarE,KAAKgsC,cAG5BhsC,KAAKO,MAAM,OAAQiE,EAAKxE,KAAKwsC,aAAaG,MAAO3sC,KAAKwsC,aAAaI,KACnE5sC,KAAKgsC,aAAc,EACnBhsC,KAAKqE,UAAW,EACjB,GAEDpB,SAAU,qUCjJX4qC,GAAe,CACdvvC,KAAM,iBACN6E,WAAY,CACX2qC,WCNa,CACdxvC,KAAM,2BACN6E,WAAY,CACX4qC,6BAED9pC,OAAQ,CACP,SACA,YAEDvF,MAAO,CACNqlB,KAAM,CACLnlB,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEXtM,KAAM,CACL/L,KAAME,OACNmY,UAAU,GAEX+2B,WAAY,CACXpvC,KAAMuL,OACNpL,QAAS,IAGXc,MAAO,CACN,eAEDyE,SAAU,CACT2pC,aAAAA,GAGC,OAAOjuC,KAAK+jB,KAAKupB,QAAQttC,KAAK8a,UAAUwyB,QAAQ,QAAS,CAAEY,eAAe,GAC3E,EACAC,OAAAA,GACC,OAAQnuC,KAAK2K,MACb,IAAK,QACJ,MAAO,CAACyjC,MAAOpuC,KAAKiuC,cAAcG,MAAM,EAAGC,KAAMruC,KAAKiuC,cAAcI,MACrE,IAAK,OACJ,MAAO,CAACruC,KAAKiuC,cAAcK,QAAQ,OAAOC,GAAIvuC,KAAKiuC,cAAcK,QAAQ,OAAOE,KAAK,CAAEC,KAAMzuC,KAAKguC,aAAcO,GAAK,GACtH,IAAK,OACJ,MAAO,CAACvuC,KAAKiuC,cAAcK,QAAQ,OAAQ,CAAEI,gBAAgB,IAAQH,GAAIvuC,KAAKiuC,cAAcU,MAAM,OAAQ,CAAED,gBAAgB,IAAQH,IACrI,IAAK,MACJ,OAAOvuC,KAAKiuC,cACb,QACC,OAAO,KAET,EACAltC,KAAAA,GACC,OAAQf,KAAK2K,MACb,IAAK,QACJ,OAAO3K,KAAK+jB,KAAK6qB,eAAe,CAAER,MAAO,OAAQC,KAAM,YACxD,IAAK,OACJ,IAAIA,EAAOruC,KAAK+jB,KAAK8qB,cACjBC,EAAO9uC,KAAK+jB,KAAKgrB,SAAS,MAC9B,OAAO/uC,KAAK+X,GAAGC,EAAE,mBAAoB,CAAEq2B,OAAMS,SAC9C,IAAK,OACJ,OAAO9uC,KAAK+jB,KAAK6qB,eAAezB,MAAMC,SAAS4B,WAAa,IAAMhvC,KAAK+jB,KAAKyqB,KAAK,CAAEC,KAAMzuC,KAAKguC,WAAa,IAAKY,eAAezB,MAAMC,SAAS4B,WAC/I,IAAK,MACJ,OAAOhvC,KAAK+jB,KAAK6qB,eAAezB,MAAMC,SAAS4B,WAChD,QACC,MAAO,qBAET,EACAC,SAAAA,GACC,OAAO9B,MAAM+B,KAAKC,eAAenvC,KAAK+jB,MAAM,CAC7C,GAEDjkB,QAAS,CACR6Y,MAAAA,CAAO1Z,GACN,IAAI8kB,EACJ,OAAQ/jB,KAAK2K,MACb,IAAK,QACJ1L,EAAMmvC,QACNrqB,EAAOopB,MAAMC,SAASgC,WAAWnwC,GAAOquC,QAAQttC,KAAK8a,SAAU,CAAEozB,eAAe,IAAQmB,UAAUrvC,KAAKsvC,QACvG,MACD,IAAK,OACL,IAAK,OACJvrB,EAAOopB,MAAMC,SAASmC,WAAWtwC,EAAM,IAAIquC,QAAQttC,KAAK8a,SAAU,CAAEozB,eAAe,IAAQmB,UAAUrvC,KAAKsvC,QAC1G,MACD,IAAK,MACJvrB,EAAOopB,MAAMC,SAASmC,WAAWtwC,GAAOquC,QAAQttC,KAAK8a,SAAU,CAAEozB,eAAe,IAAQmB,UAAUrvC,KAAKsvC,QACvG,MACD,QACC,OAEDtvC,KAAKO,MAAM,cAAewjB,EAC3B,EACAyrB,WAAAA,CAAYzrB,GACX,OAAOopB,MAAMC,SAASmC,WAAWxrB,EAAM,CAAEurB,OAAQtvC,KAAKsvC,SAAUG,eACjE,GAEDxsC,SAAoB,ovBDlFpBvE,MAAO,CACNqlB,KAAM,CACLnlB,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEXtM,KAAM,CACL/L,KAAME,OACNmY,UAAU,GAEXy4B,YAAa,CACZ9wC,KAAMY,OACNT,QAAS,CAAA,GAEV4wC,SAAU9wC,QACV+wC,QAAS/wC,QACTgxC,OAAQhxC,QACRixC,QAASjxC,SAEVgB,MAAO,CACN,OACA,OACA,aACA,cACA,eAEDtB,KAAIA,KACI,CACN44B,MAAM,IAGRr3B,QAAS,CACRiwC,SAAAA,CAAUvrC,EAAKmG,GACd3K,KAAKO,MAAM,aAAciE,GACpBA,EAAIwrC,kBACRhwC,KAAKO,MAAM,cAAeoK,EAC5B,GAED1H,SAAoB,0vEE/CrBgtC,GAAe,CACd3xC,KAAM,iBACN2F,OAAQ,CACPisC,KAAM,CACLn+B,KAAM,aACNhT,QAAS,QAGXc,MAAO,CACN,QAEDtB,KAAIA,KACI,CACNkG,OAAQ,EACR0rC,YAAa,EACbC,aAAc,EACdC,SAAS,EACTC,eAAgB,OAGlBhsC,SAAU,CACTisC,UAAAA,GACC,MAAO,IAAIhxC,MAAMS,KAAKmwC,cAAc7nC,IAAI,CAAC3C,EAAGgR,IAAM,EAAEA,EACrD,EACA65B,WAAAA,GACC,MAAO,IAAIjxC,MAAMS,KAAKowC,eAAe9nC,IAAI,CAAC3C,EAAGgR,IAAMA,EAAE3W,KAAKowC,aAC3D,EACAK,WAAAA,GACC,MAAM/gC,EAAQ,CACbghC,SAAU,WACV/gC,IAAK,EACLC,KAAM,EACNN,MAAO,OACPH,OAAQ,QAMT,OAJInP,KAAKqwC,UACR3gC,EAAME,KAAuB,KAAd5P,KAAKyE,OAAgB,IACpCiL,EAAMihC,WAAa,QAAU3wC,KAAKkwC,KAAO,gBAEnCxgC,CACR,EACAkhC,WAAAA,GACC,MAAO,CACNF,SAAU,WACV/gC,IAAK,EACLR,OAAQ,OACR0hC,QAAS,OACTC,MAAO,OACPxhC,MAA4B,IAApBtP,KAAKowC,aAAsB,IAErC,EACAW,UAAAA,GACC,MAAO,CACNL,SAAU,WACV/gC,IAAK,EACLR,OAAQ,OACR0hC,QAAS,OACTjhC,KAAM,OACNN,MAA2B,IAAnBtP,KAAKmwC,YAAqB,IAEpC,GAEDrwC,QAAS,CACRkxC,QAAAA,GACC,OAAOhxC,KAAKixC,cACb,EACAC,QAAAA,GACC,OAAOlxC,KAAKixC,WAAW,EACxB,EACAA,UAAAA,CAAW3nC,GACV,OAAO,IAAIjI,QAAQC,IAClBtB,KAAKswC,eAAiBhvC,EACtBtB,KAAKqwC,SAAU,EACf,MAAMc,EAAYnxC,KAAKyE,OAAS6E,EAC5B6nC,EAAY,EACXnxC,KAAKmwC,YAAcgB,IACtBnxC,KAAKmwC,YAAcgB,GACVA,EAAY,IACjBnxC,KAAKowC,aAAee,IACxBnxC,KAAKowC,cAAgBe,GAEvBnxC,KAAKyE,OAAS0sC,GAEhB,EACAC,QAAAA,GACKpxC,KAAKswC,iBACRtwC,KAAKswC,eAAetwC,KAAKyE,QACzBzE,KAAKswC,eAAiB,MAEvBtwC,KAAKO,MAAM,OAAQP,KAAKyE,QACxBzE,KAAKqwC,SAAU,EACfrwC,KAAKyE,OAAS,EACdzE,KAAKmwC,YAAcnwC,KAAKowC,aAAe,CACxC,GAEDntC,SAAoB,guBC/FrB,MAAMouC,GAAiB,GAEvB,SAASC,GAAqBh9B,EAAIi9B,EAAQtyC,GACzC,MAAM6H,EAAQuqC,GAAe9E,UAAUhuC,GAAQA,EAAK+V,IAAMA,GACtDxN,GAAS,IACZwN,EAAG81B,oBAAoB,QAASiH,GAAevqC,GAAO0qC,UACtDH,GAAer1B,OAAOlV,EAAO,IAE9B,MAAM0qC,EAAWhtC,IAChBA,EAAIW,iBACJX,EAAIitC,kBACJ,MAAMC,EAAc,IAAI/P,YAAY,YAAa,CAChD+I,YAAY,EACZC,SAAS,EACT5L,OAAQ,CAAEwS,SAAQtyC,WAEnBuF,EAAIC,OAAO48B,cAAcqQ,IAE1BL,GAAe/qC,KAAK,CAACgO,KAAIk9B,aACzBl9B,EAAGiF,iBAAiB,QAASi4B,EAC9B,CAEA,IAAAG,GAAe,CACdnxC,OAAAA,CAAQ8T,EAAIwyB,EAAS0D,GACD,aAAf1D,EAAQ2D,IACXn2B,EAAGiF,iBAAiB,YAAa/U,IAChC,MAAMktC,EAAc,IAAIvQ,MAAM,SAAW38B,EAAIu6B,OAAOwS,OAAQ,CAC3D7G,YAAY,IAGb,GADA5D,EAAQtlC,SAASjB,MAAM,SAAWiE,EAAIu6B,OAAOwS,OAAQG,EAAaltC,EAAIu6B,OAAO9/B,QACxEyyC,EAAY1B,iBAAkB,CAClC,MAAM4B,EAAa,IAAIjQ,YAAY,oBAAqB,CACvD+I,YAAY,EACZC,SAAS,EACT5L,OAAQv6B,EAAIu6B,SAEbv6B,EAAIC,OAAO48B,cAAcuQ,EAC1B,IAGDN,GAAqBh9B,EAAIwyB,EAAQ2D,IAAK3D,EAAQ7nC,MAEhD,EACAmP,OAAAA,CAAQkG,EAAIwyB,EAAS0D,EAAOkB,GACR,aAAf5E,EAAQ2D,KACX6G,GAAqBh9B,EAAIwyB,EAAQ2D,IAAK3D,EAAQ7nC,MAEhD,GCxCD4yC,GAAe,CACdvzC,KAAM,eACN6E,WAAY,CACXwoC,mBACAkC,cACAoC,cACA5xC,WAEDutC,WAAY,CACX+F,aAEDn6B,OAAAA,GACC,MAAO,CACN83B,OAAQ7tC,IAAI6C,SAAS,IAAMtE,KAAKsvC,QAChCx0B,SAAUrZ,IAAI6C,SAAS,IAAMtE,KAAK8a,UAClCg3B,SAAUrwC,IAAI6C,SAAS,IAAMtE,KAAK8xC,UAClCC,gBAAiBtwC,IAAI6C,SAAS,IACxBtE,KAAK+xC,gBAGNxyC,MAAM4I,QAAQnI,KAAK+xC,iBACf9sC,GAASjF,KAAK+xC,gBAAgB7yC,SAAS+F,EAAMrG,MACjDoB,KAAK+xC,2BAA2BzuC,SAC5BtD,KAAK+xC,gBAEN,KAAM,EAPL,KAAM,GASf9F,eAAgBxqC,IAAI6C,SAAS,IACvBtE,KAAK4tC,OAGNruC,MAAM4I,QAAQnI,KAAKisC,gBACf/nC,GAAQlE,KAAKisC,eAAe/sC,SAASgF,EAAKtF,MAC9CoB,KAAKisC,0BAA0B3oC,SAC3BtD,KAAKisC,eAEN,KAAM,EAPL,KAAM,GASf+F,gBAAiBvwC,IAAI6C,SAAS,IAAMtE,KAAKiyC,YACzCtnC,KAAMlJ,IAAI6C,SAAS,IAAMtE,KAAK2K,MAEhC,EACAjM,MAAO,CACN4wC,OAAQ,CACP1wC,KAAME,OACNC,QAAS,MAEV+b,SAAU,CACTlc,KAAME,OACNmY,UAAU,GAEX8M,KAAM,CACLnlB,KAAM,CAAC6c,KAAM3c,OAAQqL,OAAQgjC,MAAMC,UACnCruC,QAASL,GAASyuC,MAAMC,SAAS8E,MAAM5E,QAAQ5uC,EAAMoc,UAAUwzB,QAAQ,QAExE7I,MAAO,CACN7mC,KAAMY,OACNyX,UAAU,EACVlY,QAAS,CAAA,GAGV4L,KAAM7L,OACN4wC,YAAalwC,OACbqsC,OAAQ,CACPjtC,KAAMW,MACNR,QAAS,IAEVgtC,YAAa,CACZntC,KAAMW,MACNR,QAAS,IAEVozC,SAAUtzC,QACV8wC,SAAU,CACT/wC,KAAMC,QACNE,aAASmC,GAEV0uC,QAAS,CACRhxC,KAAMC,QACNE,aAASmC,GAEV2uC,OAAQ,CACPjxC,KAAMC,QACNE,aAASmC,GAEV4uC,QAAS,CACRlxC,KAAMC,QACNE,aAASmC,GAEV4wC,SAAUvyC,MACVwyC,gBAAiB,CAAClzC,QAASU,MAAO+D,UAClC2oC,eAAgB,CAACptC,QAASU,MAAO+D,UACjC2uC,WAAY3uC,SACZsqC,OAAQtqC,UAETzD,MAAO,CACN,aACA,aACA,aACA,cACA,YACA,aACA,cACA,cACA,eACA,QAEDtB,KAAIA,KACI,CACN6zC,aAAc,KACdC,aAAc,KACdC,WAAY,OAGdhuC,SAAU,CACTiuC,eAAAA,GACC,OAAOvyC,KAAK6rC,OAAOvjC,IAAIukC,IAAI,CAC1BjgC,GAAIigC,EAAKjuC,KAAOiuC,EAAKA,EAAKjuC,KAAO,OACjCA,KAAMiuC,EAAKjuC,KACX+tC,MAAOQ,MAAMC,SAASC,QAAQR,EAAKK,UAAUI,QAAQttC,KAAK8a,UAC1D8xB,IAAKO,MAAMC,SAASC,QAAQR,EAAKW,QAAQF,QAAQttC,KAAK8a,UACtD+xB,SAEF,EACA2F,oBAAAA,GACC,OAAOxyC,KAAK+rC,YAAYzjC,IAAImqC,IAC3B,MAAMlpC,EAAM,IAAKkpC,GAmBjB,OAlBIlpC,EAAIojC,QACHxiC,OAAOuoC,UAAUnpC,EAAIojC,OACxBpjC,EAAIojC,MAAQQ,MAAMC,SAASuF,WAAWppC,EAAIojC,MAAO,CAAEiG,KAAM5yC,KAAK8a,SAAUw0B,OAAQtvC,KAAKsvC,SAC7E/lC,EAAIojC,iBAAiBlxB,KAC7BlS,EAAIojC,MAAQQ,MAAMC,SAASmC,WAAWhmC,EAAIojC,MAAO,CAAEiG,KAAM5yC,KAAK8a,SAAUw0B,OAAQtvC,KAAKsvC,UAErF,iBADe/lC,EAAIojC,OACPpjC,EAAIojC,iBAAiB7tC,UACjCyK,EAAIojC,MAAQQ,MAAMC,SAASC,QAAQ9jC,EAAIojC,MAAO,CAAEiG,KAAM5yC,KAAK8a,SAAUw0B,OAAQtvC,KAAKsvC,WAEhF/lC,EAAIqjC,MACHziC,OAAOuoC,UAAUnpC,EAAIqjC,KACxBrjC,EAAIqjC,IAAMO,MAAMC,SAASuF,WAAWppC,EAAIqjC,IAAK,CAAEgG,KAAM5yC,KAAK8a,SAAUw0B,OAAQtvC,KAAKsvC,SACzE/lC,EAAIqjC,eAAenxB,KAC3BlS,EAAIqjC,IAAMO,MAAMC,SAASmC,WAAWhmC,EAAIqjC,IAAK,CAAEgG,KAAM5yC,KAAK8a,SAAUw0B,OAAQtvC,KAAKsvC,UAEjF,iBADe/lC,EAAIqjC,KACPrjC,EAAIqjC,eAAe9tC,UAC/ByK,EAAIqjC,IAAMO,MAAMC,SAASC,QAAQ9jC,EAAIqjC,IAAK,CAAEgG,KAAM5yC,KAAK8a,SAAUw0B,OAAQtvC,KAAKsvC,WAEzE/lC,GAET,EACAspC,KAAAA,GACC,OAAI7yC,KAAK+jB,gBAAgBopB,MAAMC,SACvBptC,KAAK+jB,KACNopB,MAAMC,SAASmC,WAAW,IAAI9zB,KAAKzb,KAAK+jB,OAAOupB,QAAQttC,KAAK8a,SACpE,EACAg4B,MAAO,CACNvnC,GAAAA,GAEC,OADavL,KAAKqyC,aAAeryC,KAAKqyC,aAAeryC,KAAK6yC,OAC9CxD,UAAUrvC,KAAKsvC,OAC5B,EACA9jC,GAAAA,CAAIvM,GACHe,KAAKqyC,aAAepzC,EACpBe,KAAKO,MAAM,cAAetB,EAAOe,KAAK+yC,MACvC,GAEDC,KAAAA,GAEC,IAAIroC,EAAO3K,KAAK2K,KAKhB,OAJIA,IACHA,EAAOA,EAAKk2B,eACRl2B,GAAS3K,KAAKylC,MAAM96B,KACxBA,EAAOnL,OAAO6M,KAAKrM,KAAKylC,OAAOpB,KAAKxlC,UAC9B8L,GAAQ,EAChB,EACAooC,MAAO,CACNxnC,GAAAA,GACC,OAAOvL,KAAKoyC,aAAepyC,KAAKoyC,aAAepyC,KAAKgzC,KACrD,EACAxnC,GAAAA,CAAIvM,GACHe,KAAKoyC,aAAenzC,EACpBe,KAAKO,MAAM,cAAetB,EAAOe,KAAK8yC,MACvC,IAGF9kC,MAAO,CACN6kC,KAAAA,CAAMlQ,EAAGsQ,GACJjzC,KAAK6yC,MAAMK,UAAYlzC,KAAK6yC,MAAMM,QAAQnzC,KAAKqyC,aAAc,SAChEryC,KAAKqyC,aAAeryC,KAAK6yC,MAC3B,EACAG,KAAAA,GACKhzC,KAAKgzC,QACRhzC,KAAKoyC,aAAepyC,KAAKgzC,MAC3B,GAEDlzC,QAAS,CACRszC,SAAAA,GACC,MAAM5uC,EAAM,IAAI28B,MAAM,aAAc,CAACuJ,YAAY,IACjD1qC,KAAKO,MAAM,aAAciE,GACrBA,EAAIwrC,kBAIRhwC,KAAKS,MAAMkK,KAAKqmC,UACjB,EACAqC,SAAAA,GACC,MAAM7uC,EAAM,IAAI28B,MAAM,aAAc,CAACuJ,YAAY,IACjD1qC,KAAKO,MAAM,aAAciE,GACrBA,EAAIwrC,kBAIRhwC,KAAKS,MAAMkK,KAAKumC,UACjB,EACAoC,mBAAAA,CAAoB9uC,GAEnB,OAAQA,EAAIu6B,OAAOwS,QACnB,IAAK,MACc,OAAdvxC,KAAK+yC,OAAkB/yC,KAAKylC,MAAW,MAC1CjhC,EAAIitC,kBACJzxC,KAAK8yC,MAAQtuC,EAAIu6B,OAAO9/B,MACxBe,KAAK+yC,MAAQ,OAEd,MACD,IAAK,OACc,QAAd/yC,KAAK+yC,OAAmB/yC,KAAKylC,MAAY,OAC5CjhC,EAAIitC,kBACJzxC,KAAK8yC,MAAQ3F,MAAMC,SAASgC,WAAW,CACtCK,gBAAiBjrC,EAAIu6B,OAAO9/B,MAAMs0C,OAClC1E,cAAerqC,EAAIu6B,OAAO9/B,MAAMovC,MAC9B,CACFuE,KAAM5yC,KAAK8yC,MAAMU,SACjBlE,OAAQtvC,KAAK8yC,MAAMxD,SAEpBtvC,KAAK+yC,MAAQ,QAIhB,EACAU,UAAAA,CAAWjvC,EAAKmoC,EAAOC,GACtB5sC,KAAKO,MAAM,OAAQiE,EAAKmoC,EAAOC,EAChC,EACA8G,cAAAA,CAAeC,GACd3zC,KAAKsyC,WAAaqB,EAClB3zC,KAAKS,MAAMjC,MAAM2B,MAClB,EACAyzC,cAAAA,GACK5zC,KAAKsyC,aACRtyC,KAAKsyC,WAAWuB,aAAU3yC,GAC3BlB,KAAKS,MAAMjC,MAAM0B,OACjBF,KAAKsyC,WAAa,IACnB,EACAwB,aAAAA,GACK9zC,KAAKsyC,WAAWuB,SACnB7zC,KAAKsyC,WAAWuB,SAClB,GAED7xC,aAAAA,GACChC,KAAK4zC,gBACN,EACA3wC,SAAoB,6zDCtPrB8wC,GAAe,CACd1wB,YAAWA,CAACC,EAAYC,EAAYC,KAC5B,CACNhJ,OAAQ,OACRC,IAAK,sCACL5G,OAAQ,CAAEyP,aAAYC,aAAYC,cAGpCwwB,UAASA,CAACzwB,EAAYC,EAAUS,KACxB,CACNzJ,OAAQ,MACRC,IAAK,oCACL5G,OAAQ,CAAE0P,aAAYC,WAAUS,WAGlCgwB,eAAcA,CAAC1wB,EAAYC,KACnB,CACNhJ,OAAQ,OACRC,IAAK,yCACL5G,OAAQ,CAAE0P,aAAYC,cAGxB0wB,SAAQA,CAACjwB,EAAOV,EAAYC,KACpB,CACNhJ,OAAQ,OACRC,IAAK,mCACL5G,OAAQ,CAAEoQ,QAAOV,aAAYC,cAG/BC,WAAUA,KACF,CACNjJ,OAAQ,MACRC,IAAK,oCAGPiJ,qBAAoBA,CAACJ,EAAYC,EAAYC,KACrC,CACNhJ,OAAQ,OACRC,IAAK,6CAA6C6I,IAClDzP,OAAQ,CAAE0P,aAAYC,cAGxBG,wBAAuBA,CAACJ,EAAYC,KAC5B,CACNhJ,OAAQ,OACRC,IAAK,4CACL5G,OAAQ,CAAE0P,aAAYC,cAGxBI,8BAA8BC,IACtB,CACNrJ,OAAQ,MACRC,IAAK,yDAAyDoJ,MAGhEC,4BAA4BC,IACpB,CACNvJ,OAAQ,MACRC,IAAK,uDAAuDsJ,MAG9DC,aAAYA,CAACT,EAAYC,EAAUS,KAC3B,CACNzJ,OAAQ,OACRC,IAAK,uCACL5G,OAAQ,CACP0P,WAAYA,EACZC,SAAUA,EACVS,MAAOA,KAIVkwB,MAAM5nB,IACE,CACN/R,OAAQ,MACRC,IAAK,iCAAmC8R,KCzF3C,IAAA6nB,GAAe,CACd91C,KAAM,gBACNstC,WAAY,CACXrB,UACAoH,aAED1tC,OAAQ,CACP8tC,gBAAiB,kBACjBpnC,KAAM,QAEPjM,MAAO,CACNuG,MAAO,CACNrG,KAAMY,OACNyX,UAAU,EACVjY,UAAUC,GACDA,EAAM0tC,OAAS1tC,EAAM2tC,KAAO3tC,EAAM4tC,OAI7CvoC,SAAU,CACT+vC,gBAAAA,GACC,MAAO,CAAC,SAAU,UAAUn1C,SAASc,KAAKiF,MAAM4nC,KACjD,EACAyH,SAAAA,GACC,OAAQt0C,KAAKq0C,kBAAoBr0C,KAAK+xC,gBAAgB/xC,KAAKiF,MAAM4nC,KAAM7sC,KAAK2K,KAC7E,EACA4pC,OAAAA,GACC,MAAMA,EAAU,GAShB,OARIv0C,KAAKq0C,iBACRE,EAAQjuC,KAAK,SAAWtG,KAAKiF,MAAM4nC,OAE/B7sC,KAAKiF,MAAMuvC,YACdD,EAAQjuC,KAAK,eACVtG,KAAKiF,MAAMwvC,UACdF,EAAQjuC,KAAK,cAERiuC,CACR,GAEDtxC,SAAoB,8VCrCrByxC,GAAe,CACdp2C,KAAM,eACN6E,WAAY,CACXwxC,SCAa,CACdr2C,KAAM,WACN6E,WAAY,WACXyxC,GACAC,eCZa,CACdv2C,KAAM,qBACN2F,OAAQ,CACP6wC,SAAU,YAEXp2C,MAAO,CACNiuC,MAAO,CACN/tC,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEX21B,IAAK,CACJhuC,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEX89B,WAAY,CACXn2C,KAAMY,OACNyX,UAAU,EACVjY,UAAUC,MACJA,EAAM0tC,QAAU1tC,EAAM2tC,SAEvB3tC,EAAM0tC,OAAW1tC,EAAM0tC,iBAAiBQ,MAAMC,aAE9CnuC,EAAM2tC,KAAS3tC,EAAM2tC,eAAeO,MAAMC,aAMjD9oC,SAAU,CACT0wC,MAAAA,GACC,IAAKh1C,KAAK+0C,WAAWN,WAAaz0C,KAAK+0C,WAAWP,WACjD,OAAOx0C,KAAK+0C,WAAWrlC,MAExB,MAAMulC,GAAQj1C,KAAK4sC,IAAI2B,GAAKvuC,KAAK2sC,MAAM4B,IAAM,IAE7C,IAAI2G,EAAS,CAAA,EAMb,OALIl1C,KAAK+0C,WAAWP,aACnBU,EAAOl1C,KAAK80C,SAAW,OAAS,OAAU90C,KAAK+0C,WAAWpI,MAAMwI,KAAKn1C,KAAK2sC,OAAUsI,EAAO,KACxFj1C,KAAK+0C,WAAWN,WACnBS,EAAOl1C,KAAK80C,SAAW,QAAU,UAAa90C,KAAK4sC,IAAIuI,KAAKn1C,KAAK+0C,WAAWnI,KAAQqI,EAAO,KAEvFj1C,KAAK+0C,WAAWrlC,MAGd,CAAC1P,KAAK+0C,WAAWrlC,MAAOwlC,GAFvBA,CAGT,EACAX,OAAAA,GACC,IAAKv0C,KAAK+0C,WAAWN,WAAaz0C,KAAK+0C,WAAWP,WACjD,OAAOx0C,KAAK+0C,WAAWlzC,MAExB,MAAMI,EAAS,GAOf,OANIjC,KAAK+0C,WAAWlzC,OACnBI,EAAOqE,KAAKtG,KAAK+0C,WAAWlzC,OACzB7B,KAAK+0C,WAAWP,YACnBvyC,EAAOqE,KAAK,YACTtG,KAAK+0C,WAAWN,UACnBxyC,EAAOqE,KAAK,UACNrE,CACR,GAEDgB,SAAoB,gRD9CpBgB,OAAQ,CACPmxC,QAAS,WAEV12C,MAAO,CACNqlB,KAAM,CACLnlB,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEX01B,MAAO,CACN/tC,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEX21B,IAAK,CACJhuC,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEX40B,OAAQ,CACPjtC,KAAMW,MACNR,QAAS,IAEVgtC,YAAa,CACZntC,KAAMW,MACNR,QAAS,KAGXuF,SAAU,CACT+wC,iBAAAA,GACC,MAAMxJ,EAAS,GAef,OAdA7rC,KAAK6rC,OAAOjlC,QAAQ3B,IACnB,MAAMkH,EAAO,CAAC,MACVlH,EAAMuvC,aACTroC,EAAK,GAAK,KAAOlH,EAAM0nC,MAAMwI,KAAKn1C,KAAK+jB,MAAMuxB,YAE1CrwC,EAAMwvC,WACTtoC,EAAK,GAAK,KAAOlH,EAAM2nC,IAAIuI,KAAKn1C,KAAK+jB,MAAMuxB,YAG5CzJ,EAAOvlC,KAAK,IACRrB,EACHkH,WAGK0/B,CACR,GAED5oC,SAAoB,wpBDlDnBmxC,kBAEDxI,WAAY,CACXrB,WAEDtmC,OAAQ,CACPsxC,eAAgB,SAChBC,oBAAqB,cACrBxJ,YAAa,eAEdx0B,OAAAA,GACC,MAAO,CACNs9B,SAAUrzC,IAAI6C,SAAS,IAAMtE,KAAK80C,UAClCM,QAAS3zC,IAAI6C,SAAS,IAAMtE,KAAKo1C,SAEnC,EACA12C,MAAO,CACN+2C,SAAU,CACT72C,KAAMW,MACN0X,UAAU,EACVjY,UAAUC,GACFA,EAAMy7B,MAAMx2B,GAAQA,aAAgBipC,MAAMC,WAGnDsI,UAAW,CACV92C,KAAMW,MACN0X,UAAU,EACVjY,UAAUC,GACFA,EAAMy7B,MAAMx2B,GAClBA,aAAgBipC,MAAMwI,UACnBxrC,OAAOuoC,UAAUxuC,KAGlBA,EAAKyoC,iBAAiBQ,MAAMwI,UACzBxrC,OAAOuoC,UAAUxuC,EAAKyoC,UAEzBzoC,EAAK0oC,eAAeO,MAAMwI,UACvBxrC,OAAOuoC,UAAUxuC,EAAK0oC,QAM9BkI,SAAUj2C,QACV+2C,aAAc/2C,QACdg3C,oBAAqBh3C,QACrBi3C,WAAYj3C,SAEbN,KAAIA,KACI,CACN8F,UAAU,EACV0xC,eAAgB,KAChBC,iBAAkB,KAClBC,YAAY,IAGd3xC,SAAU,CACT8wC,OAAAA,GACC,OAAOp1C,KAAK80C,SAAW,SAAW,KACnC,EACAoB,OAAAA,GACC,OAAOl2C,KAAK80C,SAAW,MAAQ,QAChC,EACAqB,mBAAAA,GACC,OAAOn2C,KAAK01C,UAAU7vC,OAAO,CAAC0D,EAAK6sC,EAAItvC,KACtC,MAAM6lC,EAAQyJ,EAAGzJ,OAASyJ,EACpBxJ,EAAMwJ,EAAGxJ,IAEf,GAAIrjC,EAAIpD,OAAQ,CACf,MAAMkwC,EAAY9sC,EAAIuC,MAClBvM,MAAM4I,QAAQkuC,GACjB9sC,EAAIjD,KAAK,CACRqmC,MAAO0J,EAAU,GACjBzJ,IAAKD,EACL7lC,MAAOuvC,EAAU,KAERA,GAAa1J,GAEvBpjC,EAAIjD,KAAK,CACRqmC,MAAO0J,EACPzJ,IAAKD,GAGR,CAYA,OAVKC,GAGJrjC,EAAIjD,KAAK,CACRqmC,QACAC,MACA9lC,UAEDyC,EAAIjD,KAAKsmC,IAPTrjC,EAAIjD,KAAK,CAACqmC,EAAO7lC,IASXyC,GACL,IAAI+sC,MAAM,GAAG,EACjB,EACAC,aAAAA,GACC,OAAKv2C,KAAK01C,UAAU11C,KAAK01C,UAAUvvC,OAAS,GAAGymC,IAExC5sC,KAAK01C,UADJ11C,KAAK01C,UAAUY,MAAM,GAAG,EAEjC,EACA3J,KAAAA,GACC,OAAO3sC,KAAKm2C,oBAAoB,GAAGxJ,KACpC,EACAC,GAAAA,GACC,OAAO5sC,KAAKm2C,oBAAoBn2C,KAAKm2C,oBAAoBhwC,OAAS,GAAGymC,GACtE,EACAe,IAAAA,GACC,MAAMA,EAAO,GACP6I,EAAYx2C,KAAKm2C,oBACrB1sC,OAAON,QAAiBjI,IAAZiI,EAAErC,OACdwB,IAAIa,GAAKA,EAAEyjC,KACb,IAAK,IAAI7oB,KAAQ/jB,KAAKy1C,SACrB,IAAK,IAAIgB,KAAQD,EAChB7I,EAAKrnC,KAAKyd,EAAKyqB,KAAKiI,IAEtB,OAAO9I,CACR,EACA+I,eAAAA,GACC,OAAO12C,KAAKy1C,SAAS5vC,OACpB,CAAC0D,EAAKotC,IAASptC,EAAI8Q,OAAO,CAACs8B,EAAKnI,KAAKxuC,KAAK2sC,OAAQgK,EAAKnI,KAAKxuC,KAAK4sC,OACjE,GAEF,EACAgK,YAAAA,GACC,OAAK52C,KAAK41C,aAEH51C,KAAK62C,gBAAgB72C,KAAKu1C,eAAe9rC,OAAOxE,GAASA,EAAM4nC,KAAKiK,cADnE,EAET,EACAC,YAAAA,GACC,OAAK/2C,KAAK41C,aAEH51C,KAAK62C,gBAAgB72C,KAAKu1C,eAAe9rC,OAAOxE,IAAUA,EAAM4nC,KAAKiK,cADpE92C,KAAK6rC,MAEd,EACAA,MAAAA,GACC,OAAO7rC,KAAK62C,gBAAgB72C,KAAKu1C,eAClC,EACAxJ,WAAAA,GACC,OAAO/rC,KAAK62C,gBAAgB72C,KAAKw1C,oBAClC,EACAwB,cAAAA,GACC,OAAOh3C,KAAK6rC,OAAOxH,KAAKnuB,GAAKA,EAAE/P,OAChC,EACA8wC,aAAAA,GACC,IAAI/sC,EAAO,UAAYlK,KAAKy1C,SAAStvC,OAAS,SAS9C,OARInG,KAAK61C,qBACJ71C,KAAKg3C,iBACR9sC,EAAOlK,KAAK6rC,OACVvjC,IAAI4N,GAAKA,EAAE/P,OACT,MACA,8CACFs2B,KAAK,MAEFvyB,CACR,EACAgtC,aAAAA,GACC,MAAMC,EAAY,CAAA,EAkClB,OAhCAn3C,KAAKm2C,oBAAoBvvC,QAAQ6vC,IAChC,IAAIlI,EAAKkI,EAAK9J,MAAM2I,WACf6B,EAAU5I,KACd4I,EAAU5I,GAAM,CAAC,KAAOA,SACNrtC,IAAfu1C,EAAK3vC,OACRqwC,EAAU5I,GAAIjoC,KAAK,MAAQmwC,EAAK3vC,OACjCynC,EAAKkI,EAAK7J,IAAI0I,WACT6B,EAAU5I,KACd4I,EAAU5I,GAAM,CAAC,KAAOA,SACNrtC,IAAfu1C,EAAK3vC,OACRqwC,EAAU5I,GAAIjoC,KAAK,MAAQmwC,EAAK3vC,SAGlC9G,KAAK+2C,aAAanwC,QAAQ,CAACilC,EAAQuL,KAClC,IAAIC,EAAMr3C,KAAKy1C,SAAS2B,GACxBvL,EAAOjlC,QAAQ3B,IACd,GAAKA,EAAMuvC,YAAevvC,EAAMwvC,SAAhC,CAGA,GAAIxvC,EAAMuvC,WAAY,CACrB,IAAIjG,EAAKtpC,EAAM0nC,MAAMwI,KAAKkC,GAAK/B,WAC1B6B,EAAU5I,KACd4I,EAAU5I,GAAM,CAAC,KAAOA,EAAI,KAAOA,GACrC,CACA,GAAItpC,EAAMwvC,SAAU,CACnB,IAAIlG,EAAKtpC,EAAM2nC,IAAIuI,KAAKkC,GAAK/B,WACxB6B,EAAU5I,KACd4I,EAAU5I,GAAM,CAAC,KAAOA,EAAI,KAAOA,GACrC,CAXC,MAeI/uC,OAAO6M,KAAK8qC,GAAW/vC,KAAK,CAACC,EAAEC,IAAM6R,SAAS9R,GAAG8R,SAAS7R,IAAIgB,IAAI,CAACqkC,EAAOhnC,EAAG0G,KACnF,IAAIugC,EAAMvgC,EAAK1G,EAAI,GACnB,OAAKinC,EAIE,IAAMuK,EAAUxK,GAAOlQ,KAAK,KAAO,MAAQmQ,EAAMD,GAAS,MAHhEwK,EAAUxK,GAAOrmC,KAAK,OACf,IAAM6wC,EAAUxK,GAAOlQ,KAAK,KAAO,OAGzCA,KAAK,IACT,GAED38B,QAAS,CACR+2C,eAAAA,CAAgBpyC,GACf,MAAMxC,EAAS1C,MAAMwS,KAAK,CAAC5L,OAAQnG,KAAKy1C,SAAStvC,QAAS,IAAM5G,SAyBhE,OAvBAkF,EAAOmC,QAAQ3B,IACd,MAAM0nC,EAAQ1nC,EAAM0nC,OAAS3sC,KAAK02C,gBAAgB,GAAGlI,SAC/C5B,EAAM3nC,EAAM2nC,KAAO5sC,KAAK02C,gBAAgB12C,KAAK02C,gBAAgBvwC,OAAS,GAAGqoC,KAAK,GAEpF,IAAK,IAAI7oC,EAAI,EAAGA,EAAI3F,KAAKy1C,SAAStvC,OAAQR,IAAK,CAC9C,IAAI2xC,EAAYt3C,KAAK02C,gBAAoB,EAAJ/wC,GACjC4xC,EAAUv3C,KAAK02C,gBAAoB,EAAJ/wC,EAAQ,GAK3C,GAJIV,EAAM4nC,MAAMiK,cACfQ,EAAYA,EAAUhJ,QAAQ,OAC9BiJ,EAAUA,EAAQ5I,MAAM,QAErBhC,EAAQ4K,GAAW3K,EAAM0K,EAAW,CACvC,MAAM9C,EAAa7H,GAAS2K,EACtB7C,EAAW7H,GAAO2K,EACxBt1C,EAAO0D,GAAGW,KAAK,IACXrB,EACHuvC,aACAC,YAEF,CACD,IAGMxyC,CACR,EAGAu1C,UAAAA,CAAWljC,GACV,IAAImjC,EAAUnjC,EAAGojC,UAGjB,OAFIpjC,EAAGqjC,eACNF,GAAWz3C,KAAKw3C,WAAWljC,EAAGqjC,eACxBF,CACR,EACAG,WAAAA,CAAYtjC,GACX,IAAIujC,EAAWvjC,EAAGwjC,WAGlB,OAFIxjC,EAAGqjC,eACNE,GAAY73C,KAAK43C,YAAYtjC,EAAGqjC,eAC1BE,CACR,EACAE,qBAAAA,CAAsBvzC,EAAKwzC,GAC1B,IAAIC,EAAOC,EASX,OARIl4C,KAAK80C,UACRmD,EAAQzzC,EAAI2mC,MAAQnrC,KAAK43C,YAAY53C,KAAKS,MAAMI,MAAQb,KAAKS,MAAM03C,KAAK/M,WACxE8M,EAAYD,EAAQj4C,KAAKS,MAAMI,KAAKgqC,cAEpCoN,EAAQzzC,EAAI6mC,MAAQrrC,KAAKw3C,WAAWx3C,KAAKS,MAAMI,MAAQb,KAAKS,MAAM03C,KAAK7M,UACvE4M,EAAYD,EAAQj4C,KAAKS,MAAMI,KAAKkqC,cAG9BiN,EAAeh4C,KAAK2sC,MAAQvmC,KAAKC,OAAOrG,KAAK4sC,IAAM5sC,KAAK2sC,OAASuL,EACzE,EAGAE,gBAAAA,GACMp4C,KAAK+1C,iBACT/1C,KAAK+1C,eAAiB,IAAIsC,eAAer4C,KAAKs4C,wBAC/Ct4C,KAAK+1C,eAAewC,QAAQv4C,KAAKS,MAAMI,MAElCb,KAAKg2C,mBACTh2C,KAAKg2C,iBAAmB,IAAIwC,iBAAiBC,IACxCA,EAAUrwC,KAAKswC,GAAKA,EAAEC,WAAWxyC,QAAU,GAAGiC,KAAKgN,KAAKsjC,EAAEC,WAAYrkC,GAAMA,EAAGskC,SAAWtkC,EAAGskC,QAAQ,yCACxG54C,KAAKs4C,2BAERt4C,KAAKg2C,iBAAiBuC,QAAQv4C,KAAKS,MAAMI,KAAM,CAC9Cg4C,SAAS,EACTC,WAAW,IAGZ94C,KAAKs4C,uBACN,EACAS,iBAAAA,GACK/4C,KAAK+1C,gBACR/1C,KAAK+1C,eAAeiD,aACrBh5C,KAAK+1C,eAAiB,KAElB/1C,KAAKg2C,kBACRh2C,KAAKg2C,iBAAiBgD,aACvBh5C,KAAKg2C,iBAAmB,IACzB,EACAsC,qBAAAA,GACC,MAAMW,EAAgBj5C,KAAKS,MAAMy4C,SAAS9X,iBAAiB,sCAE3D,IAAI+X,EAAsB,CAAC,EAAG,MAC9B,IAAK,IAAI7kC,KAAM2kC,EAAcxe,SAAU,CACtC,MAAM9qB,EAAM2E,EAAGojC,YACVyB,EAAoB,IAAMxpC,EAAMwpC,EAAoB,MACxDA,EAAsB,CAACxpC,EAAK2E,GAC9B,CAEAtU,KAAKi2C,YAAa,EACdkD,EAAoB,GACvBA,EAAoB,GAAGC,eAAe,CAAEC,SAAU,WAElDr5C,KAAKS,MAAMy4C,SAASI,SAAS,EAAG,EAElC,GAEDt3C,aAAAA,GACChC,KAAK+4C,mBACN,EACA91C,SAAoB,0yIGzTrBs2C,GAAe,CACdj7C,KAAM,WACNstC,WAAY,CACX+F,aAEDjzC,MAAO,CACNqlB,KAAM,CACLnlB,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZ3S,SAAU,CACTk1C,SAAAA,GACC,OAAOx5C,KAAK+jB,KAAK6qB,eAAe,CAACyI,IAAK,UAAWjJ,MAAO,OAAQC,KAAM,WACvE,EACAoL,SAAAA,GACC,OAAOz5C,KAAK+jB,KAAK6qB,eAAe,CAACyI,IAAK,UAAWjJ,MAAO,UAAWC,KAAM,WAC1E,EACAqL,UAAAA,GACC,OAAO15C,KAAK+jB,KAAK6qB,eAAe,CAACyI,IAAK,UAAWjJ,MAAO,WACzD,EACAuL,WAAAA,GACC,OAAO35C,KAAK+jB,KAAK6qB,eAAe,CAACyI,IAAK,WACvC,GAEDp0C,SAAoB,sSCzBrB22C,GAAe,CACdt7C,KAAM,WACNstC,WAAY,CACX+F,aAEDjzC,MAAO,CACNqlB,KAAM,CACLnlB,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZ3S,SAAU,CACTm1C,SAAAA,GACC,OAAOz5C,KAAK+jB,KAAK6qB,eAAe,CAACiL,QAAS,QAC3C,EACAH,UAAAA,GACC,OAAO15C,KAAK+jB,KAAK6qB,eAAe,CAACiL,QAAS,SAC3C,EACAF,WAAAA,GACC,OAAO35C,KAAK+jB,KAAK6qB,eAAe,CAACiL,QAAS,UAC3C,GAED52C,SAAoB,qOCxBrB62C,GAAe,CACdx7C,KAAM,YACNI,MAAO,CACN+3C,KAAM,CACL73C,KAAM,CAACuuC,MAAMwI,SAAUxrC,OAAQ3K,QAC/ByX,UAAU,EACVjY,SAAAA,CAAUC,GACT,GAAIA,aAAiBO,OAAQ,CAC5B,GAAIP,aAAiBkuC,MAAMwI,SAC1B,OAAO,EACR,IAAIoE,GAAW,EACXC,GAAS,EAab,OAZI/6C,EAAM0tC,QACToN,EACC96C,EAAM0tC,iBAAiBQ,MAAMwI,UAC1BxrC,OAAOuoC,UAAUzzC,EAAM0tC,QAGxB1tC,EAAM2tC,MACToN,EACC/6C,EAAM2tC,eAAeO,MAAMwI,UACxBxrC,OAAOuoC,UAAUzzC,EAAM2tC,MAGrBmN,GAAYC,CACpB,CACA,OAAO,CACR,IAGF11C,SAAU,CACT21C,mBAAAA,GACC,OAAOj6C,KAAKy2C,KAAK9J,OAAS3sC,KAAKy2C,KAAK7J,IAAM5sC,KAAKy2C,KAAO,CAAE9J,MAAO3sC,KAAKy2C,KACrE,EACA9J,KAAAA,GACC,OAAK3sC,KAAKi6C,oBAAoBtN,MAEvB3sC,KAAKk6C,WAAWl6C,KAAKi6C,oBAAoBtN,OADxC,IAET,EACAC,GAAAA,GACC,OAAK5sC,KAAKi6C,oBAAoBrN,IAEvB5sC,KAAKk6C,WAAWl6C,KAAKi6C,oBAAoBrN,KADxC,IAET,GAED9sC,QAAS,CACRo6C,WAAWn2B,GACHA,EAAKo2B,UAAU,CAAEC,iBAAiB,KAG3Cn3C,SAAU,iLC3CX,ICJAo3C,GAAe,CACd/7C,KAAM,UACN6E,WAAY,CACX8sC,cACAqK,QDAa,CACdh8C,KAAM,UACN6E,WAAY,CACXuxC,gBACA6E,YACAK,YACAE,cAED71C,OAAQ,CACP6tC,SAAU,WACVyD,eAAgB,SAChBz6B,SAAU,YAEXpc,MAAO,CACN24C,IAAK,CACJz4C,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEXsjC,aAAcz7C,OACd07C,oBAAqB17C,QAEtBe,MAAO,CACN,mBACA,qBAEDtB,KAAIA,KACI,CACNk8C,YAAa,KACbC,YAAa,OAGfp2C,SAAU,CACTmxC,QAAAA,GACC,MAAO,CAACz1C,KAAKq3C,IAAI/I,QAAQ,OAC1B,EACAoH,SAAAA,GACC,OAAI11C,KAAK8xC,SAED9xC,KAAK8xC,SAASxpC,IAAI8tC,IACjB,CACNzJ,MAAOQ,MAAMwI,SAASgF,YAAYvE,EAAGzJ,OACrCC,IAAKO,MAAMwI,SAASgF,YAAYvE,EAAGxJ,QAK9BrtC,MAAMwS,KAAK,CAAE5L,OAAQ,IAAM,CAAC+P,EAAGvQ,IAAMwnC,MAAMwI,SAASvG,WAAW,CAAEwL,MAAOj1C,EAAI,IAErF,EACAkmC,MAAAA,GACC,OAAO7rC,KAAKu1C,eACV9rC,OAAOxE,GAASA,EAAM0nC,MAAQ3sC,KAAKq3C,IAAI7I,KAAK,CAAEC,KAAM,KAAQxpC,EAAM2nC,IAAM5sC,KAAKq3C,KAC7EjwC,KAAK,CAACC,EAAGC,IAAMD,EAAEslC,MAAM4B,GAAKjnC,EAAEqlC,MAAM4B,IACpCjmC,IAAI9D,GAAOA,EAAIqoC,KAClB,EACAgO,YAAAA,GACC,GAAI76C,KAAKy6C,aACJz6C,KAAK6rC,OAAOxH,KAAKnuB,GAAKA,GAAKlW,KAAKy6C,aACnC,OAAOz6C,KAAKy6C,YAEd,IAAIK,EAAQ,KAIZ,OAHI96C,KAAK6rC,SACRiP,EAAQ96C,KAAK6rC,OAAOxH,KAAKxlC,UAEtBi8C,GAAuB,WAAdA,EAAMl8C,KACX,KAEDk8C,CACR,EACAC,OAAAA,GACC,OAAO/6C,KAAKq3C,IAAIlE,QAAQhG,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK8a,UAAW,MACtE,GAED9M,MAAO,CACNgtC,OAAAA,GACKh7C,KAAKg7C,QACJh7C,KAAKy6C,aACRz6C,KAAKO,MAAM,mBAAoB,CAC9B0E,MAAOjF,KAAKy6C,YACZ5G,QAASA,KAAQ7zC,KAAKy6C,YAAc,QAItCz6C,KAAKO,MAAM,oBAEb,GAEDT,QAAS,CACRwzC,mBAAAA,CAAoB9uC,GACM,SAArBA,EAAIu6B,OAAOwS,SACdvxC,KAAKy6C,YAAcj2C,EAAIu6B,OAAO9/B,MAC1Be,KAAKg7C,SACRh7C,KAAKO,MAAM,mBAAoB,CAC9B0E,MAAOjF,KAAKy6C,YACZ5G,QAASA,KAAQ7zC,KAAKy6C,YAAc,QAIxC,GAED94C,KAAAA,GACC,MAAMiN,EAAYnN,IAAIK,IAAI,OACpBk5C,QAAEA,GElGH,SAA2BnU,EAASoU,GAE1C,MAAMD,EAAUv5C,IAAIK,KAAI,GAClBqzB,EAAO1zB,IAAIK,KAAI,GAGftB,EAAUiB,IAAIK,KAAI,GAClBo5C,EAAaz5C,IAAI6C,SAAS,IAC1B7C,IAAI05C,MAAMtU,GAGVA,EAAQ5nC,OAGT4nC,EAAQ5nC,MAAMm8C,IACVvU,EAAQ5nC,MAAMm8C,IAHdvU,EAAQ5nC,MAHR4nC,GAUHwU,EAAe55C,IAAI6C,SAAS,KACjC,MAAM4L,EAAQzO,IAAI05C,MAAMF,GAAaA,EAAUh8C,MAAQg8C,EACvD,OAAI9wC,OAAOuoC,UAAUxiC,GACb,CAAC,CAAC,UAAWA,IACjB3Q,MAAM4I,QAAQ+H,GACVA,EAAM5H,IAAI,CAACrJ,EAAOib,IAAQ,CAACA,EAAKjb,IAAQmI,KAAK,CAACC,EAAGC,IAAMD,EAAE,GAAGC,EAAE,IAC/D9H,OAAOs7B,QAAQ5qB,GAAO9I,KAAK,CAACC,EAAGC,IAAMD,EAAE,GAAGC,EAAE,MAIpD,SAASg0C,IAER,QAAqCp6C,IAAjCg6C,EAAWj8C,MAAM4rC,YACpB,OAED,MAAM/B,EAAQuS,EAAap8C,MAAMolC,KAAKkX,GAAWA,EAAQ,GAAKL,EAAWj8C,MAAM4rC,aAE/E1V,EAAKl2B,MAAQ6pC,EAAQA,EAAM,GAAK,OAChCkS,EAAQ/7C,MAASk2B,EAAKl2B,OAASo8C,EAAap8C,MAAM,GAAG,EACtD,CAGA,MAAMu8C,EAAW,IAAInD,eAAe,KAC/B6C,EAAWj8C,OACdq8C,MAIF,SAASG,IACHP,EAAWj8C,QAGhBq8C,IACAE,EAASjD,QAAQ2C,EAAWj8C,OAC5BuB,EAAQvB,OAAQ,EACjB,CACA,SAASy8C,IACJl7C,EAAQvB,OACXu8C,EAASxC,YAEX,CAaA,OAVAv3C,IAAIk6C,UAAUF,GACdh6C,IAAIm6C,YAAYF,GAEhBj6C,IAAIo6C,YAAY,KACXX,EAAWj8C,QACdy8C,IACAD,OAIK,CAAET,UAAS7lB,OACnB,CFyBsB2mB,CAAkBltC,EAAW,KAEjD,MAAO,CACNA,YACAosC,UAEF,EACAx6C,OAAAA,GACCR,KAAK06C,YAAc16C,KAAKS,MAAM8E,KAAK9E,MAAM03C,IAC1C,EACAl1C,SAAoB,0rDC9GpBvE,MAAO,CACNq9C,YAAa,CACZn9C,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZpX,MAAO,CACN,qBACA,eACA,QACA,mBACA,qBAEDtB,IAAAA,GACC,MAAO,CACNy9C,UAAWh8C,KAAK+7C,YAChBE,YAAa,EAEf,EACA33C,SAAU,CACT43C,KAAAA,GACC,IAAIpB,EAAQ96C,KAAKg8C,UAAU1N,QAAQ,OAC/B6N,EAAOn8C,KAAKg8C,UAAUrN,MAAM,OAUhC,OARwB,GAApB3uC,KAAKi8C,cACJj8C,KAAKi8C,YAAc,EACtBnB,EAAQA,EAAMtM,KAAK,CAAEC,KAAMzuC,KAAKi8C,cAEhCE,EAAOA,EAAK3N,KAAK,CAAEC,KAAMzuC,KAAKi8C,eAIzB9O,MAAMiP,SAASC,cAAcvB,EAAOqB,EAC5C,GAEDnuC,MAAO,CACN+tC,WAAAA,GACK/7C,KAAK+7C,YAAYzM,QAAUtvC,KAAKg8C,UAAU1M,QAC7CtvC,KAAKg8C,UAAYh8C,KAAK+7C,YACtB/7C,KAAKO,MAAM,eAAgBP,KAAKk8C,SAEhCl8C,KAAKi8C,YAAcj8C,KAAK+7C,YAAYzN,QAAQ,OAAO6G,KAAKn1C,KAAKg8C,UAAU1N,QAAQ,OAAQ,QAAQG,KAC3FzuC,KAAKi8C,cACRj8C,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAKwzC,oBAC3B/4C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOtL,WAAWjxC,KAAKi8C,aAAar5C,KAAK5C,KAAKw8C,aAG5D,GAED18C,QAAS,CACRkxC,QAAAA,GACChxC,KAAKi8C,YAAcj8C,KAAKS,MAAM87C,OAAO93C,OAAS,EAC9CzE,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAKwzC,oBAC3B/4C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOvL,WAAWpuC,KAAK5C,KAAKw8C,WACxC,EACAtL,QAAAA,GACClxC,KAAKi8C,YAAcj8C,KAAKS,MAAM87C,OAAO93C,OAAS,EAC9CzE,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAKwzC,oBAC3B/4C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOrL,WAAWtuC,KAAK5C,KAAKw8C,WACxC,EACAA,UAAAA,CAAW/N,GACV,MAAMgO,EAAez8C,KAAKg8C,UAAUxN,KAAK,CAAEC,SAC3CzuC,KAAKg8C,UAAYS,EACjBz8C,KAAKi8C,YAAc,EACnBj8C,KAAKO,MAAM,qBAAsBP,KAAKg8C,WACtCh8C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAK6yC,kBAC5B,EACAsE,SAAAA,CAAUjO,GACT,MAAM4I,EAAMr3C,KAAKg8C,UAAUxN,KAAK,CAAEC,SAClC,MAAO,IAAKzuC,KAAK28C,OAAQtF,MAC1B,GAED72C,OAAAA,GACCR,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAK6yC,kBAC5B,EACAn1C,SAAU,udEtFX25C,GAAe,CACdt+C,KAAM,WACN6E,WAAY,CACX8sC,cACA4M,SCFa,CACdv+C,KAAM,WACN6E,WAAY,CACXuxC,gBACA6E,YACAK,YACAE,cAED71C,OAAQ,CACP6tC,SAAU,WACVh3B,SAAU,YAEXpc,MAAO,CACN24C,IAAK,CACJz4C,KAAMuuC,MAAMC,SACZn2B,UAAU,GAEX6lC,kBAAmBj+C,SAEpByF,SAAU,CACTqoC,KAAAA,GACC,OAAO3sC,KAAKq3C,IAAI/I,QAAQ,OAAQ,CAAEI,gBAAgB,GACnD,EACA+G,QAAAA,GACC,OAAOl2C,MAAMwS,KAAK,CAAE5L,OAAQ,GAAK,CAAC+P,EAAGvQ,IAAM3F,KAAK2sC,MAAM6B,KAAK,CAAEC,KAAM9oC,IACpE,EACA+vC,SAAAA,GACC,OAAI11C,KAAK8xC,SAED9xC,KAAK8xC,SAASxpC,IAAI8tC,IACjB,CACNzJ,MAAOQ,MAAMwI,SAASgF,YAAYvE,EAAGzJ,OACrCC,IAAKO,MAAMwI,SAASgF,YAAYvE,EAAGxJ,QAK9BrtC,MAAMwS,KAAK,CAAE5L,OAAQ,IAAM,CAAC+P,EAAGvQ,IAAMwnC,MAAMwI,SAASvG,WAAW,CAAEwL,MAAOj1C,EAAI,IAErF,GAED7F,QAAS,CACRi7C,OAAAA,CAAQh3B,GACP,OAAOA,EAAKovB,QAAQhG,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK8a,UAAW,MAClE,GAED7X,SAAoB,o9BD1CpBvE,MAAO,CACNq9C,YAAa,CACZn9C,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZpX,MAAO,CACN,qBACA,eACA,QACA,oBAEDtB,IAAAA,GACC,MAAO,CACNy9C,UAAWh8C,KAAK+7C,YAChBE,YAAa,EAEf,EACA33C,SAAU,CACT43C,KAAAA,GACC,IAAIpB,EAAQ96C,KAAKg8C,UAAU1N,QAAQ,OAAQ,CAAEI,gBAAgB,IACzDyN,EAAOn8C,KAAKg8C,UAAUrN,MAAM,OAAQ,CAAED,gBAAgB,IAU1D,OARwB,GAApB1uC,KAAKi8C,cACJj8C,KAAKi8C,YAAc,EACtBnB,EAAQA,EAAMtM,KAAK,CAAEuO,MAAO/8C,KAAKi8C,cAEjCE,EAAOA,EAAK3N,KAAK,CAAEuO,MAAO/8C,KAAKi8C,eAI1B9O,MAAMiP,SAASC,cAAcvB,EAAOqB,EAC5C,GAEDnuC,MAAO,CACN+tC,WAAAA,GACK/7C,KAAK+7C,YAAYzM,QAAUtvC,KAAKg8C,UAAU1M,QAC7CtvC,KAAKg8C,UAAYh8C,KAAK+7C,YACtB/7C,KAAKO,MAAM,eAAgBP,KAAKk8C,SAEhCl8C,KAAKi8C,YAAcj8C,KAAK+7C,YAAYzN,QAAQ,OAAQ,CAAEI,gBAAgB,IAAQyG,KAAKn1C,KAAKg8C,UAAU1N,QAAQ,OAAQ,CAAEI,gBAAgB,IAAS,SAASqO,MAClJ/8C,KAAKi8C,cACRj8C,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAKwzC,oBAC3B/4C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOtL,WAAWjxC,KAAKi8C,aAAar5C,KAAK5C,KAAKw8C,aAG5D,GAED18C,QAAS,CACRkxC,QAAAA,GACChxC,KAAKi8C,YAAcj8C,KAAKS,MAAM87C,OAAO93C,OAAS,EAC9CzE,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAKwzC,oBAC3B/4C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOvL,WAAWpuC,KAAK5C,KAAKw8C,WACxC,EACAtL,QAAAA,GACClxC,KAAKi8C,YAAcj8C,KAAKS,MAAM87C,OAAO93C,OAAS,EAC9CzE,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAKwzC,oBAC3B/4C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOrL,WAAWtuC,KAAK5C,KAAKw8C,WACxC,EACAA,UAAAA,CAAWO,GACV,MAAMN,EAAez8C,KAAKg8C,UAAUxN,KAAK,CAAEuO,UAC3C/8C,KAAKg8C,UAAYS,EACjBz8C,KAAKi8C,YAAc,EACnBj8C,KAAKO,MAAM,qBAAsBP,KAAKg8C,WACtCh8C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAK6yC,kBAC5B,EACAsE,SAAAA,CAAUK,GACT,MAAM1F,EAAMr3C,KAAKg8C,UAAUxN,KAAK,CAAEuO,UAClC,MAAO,IAAK/8C,KAAK28C,OAAQtF,MAC1B,EACA/D,mBAAAA,CAAoB9uC,GACnB,OAAQA,EAAIu6B,OAAOwS,QACnB,IAAK,MAEJvxC,KAAKO,MAAM,qBAAsBiE,EAAIu6B,OAAO9/B,OAC5C,MACD,IAAK,QAEJe,KAAKO,MAAM,mBAAoB,CAAE0E,MAAOT,EAAIu6B,OAAO9/B,QAGrD,GAEDuB,OAAAA,GACCR,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM67C,KAAK77C,MAAM8E,KAAK6yC,kBAC5B,EACAn1C,SAAU,0XEjGX+5C,GAAe,CACd1+C,KAAM,YACN6E,WAAY,CACX8sC,cACAgN,UCFa,CACd3+C,KAAM,YACN6E,WAAY,CACXuxC,gBACAwI,UCPa,CACd5+C,KAAM,YACNstC,WAAY,CACX+F,aAEDjzC,MAAO,CACNqlB,KAAM,CACLnlB,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZ3S,SAAU,CACTy4C,KAAAA,GACC,MAAMI,EAAWn9C,KAAK+jB,KAAKuqB,QAAQ,OAAQ,CAAEI,gBAAgB,IACvD0O,EAAUp9C,KAAK+jB,KAAK4qB,MAAM,OAAQ,CAAED,gBAAgB,IAEpDqO,EAAQ,CACb,CAAExJ,OAAQ4J,EAAS1N,gBAAiBpB,KAAM8O,EAAStO,eACnD,CAAE0E,OAAQ6J,EAAQ3N,gBAAiBpB,KAAM+O,EAAQvO,gBAIlD,OAFIkO,EAAM,GAAGxJ,QAAUwJ,EAAM,GAAGxJ,QAC/BwJ,EAAMjxC,MACAixC,CACR,GAED95C,SAAU,oLDjBT22C,YACAL,aAED/hC,OAAAA,GACC,MAAO,CAENq0B,OAAQpqC,IAAI6C,SAAS,KAEpB,MAAMunC,EAAS7rC,KAAK6rC,OAAOvjC,IAAIrD,IAC9B,MAAM0nC,EAAQ1nC,EAAM0nC,MAAM2B,QAAQ,OAC5B1B,EAAM3nC,EAAM2nC,IAAI4B,KAAK,CAAEC,KAAM,IAAKH,QAAQ,OAChD,MAAO,IACHrpC,EACH0nC,QACAC,SAGF,IAAK,IAAItnC,EAAI,EAAGA,GAAI,EAAIA,IACvB,IAAK,IAAI+3C,EAAI,EAAGA,GAAI,EAAIA,IAAK,CAC5B,MAAMC,EAAYt9C,KAAKy1C,SAASnwC,GAAGkpC,KAAKxuC,KAAK01C,UAAU2H,IACvDxR,EAAOjiC,QAAQ,CACd+iC,MAAO2Q,EACP1Q,IAAK0Q,EAAU9O,KAAK,CAAEC,KAAM,IAC5B5B,KAAM,UAER,CAED,OAAOhB,IAGV,EACA5nC,OAAQ,CACP4nC,OAAQ,SACR/wB,SAAU,YAEXpc,MAAO,CACN24C,IAAK,CACJz4C,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZ3S,SAAU,CACTmxC,QAAAA,GACC,MAAM9I,EAAQ3sC,KAAKq3C,IAAI/I,QAAQ,SAASA,QAAQ,OAAQ,CAAEI,gBAAgB,IAC1E,OAAOnvC,MAAMwS,KAAK,CAAE5L,OAAQ,GAAK,CAAC+P,EAAGvQ,IAAMgnC,EAAM6B,KAAK,CAAEuO,MAAOp3C,IAChE,EACA+vC,UAASA,IACDn2C,MAAMwS,KAAK,CAAE5L,OAAQ,GAAK,CAAC+P,EAAGvQ,IAAMwnC,MAAMwI,SAASvG,WAAW,CAAEX,KAAM9oC,MAG/E7F,QAAS,CACRi7C,OAAAA,CAAQh3B,GACP,OAAOA,EAAKovB,QAAQhG,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK8a,UAAW,MAClE,GAED7X,SAAoB,s6BDxDpBvE,MAAO,CACNq9C,YAAa,CACZn9C,KAAMuuC,MAAMC,SACZn2B,UAAU,IAGZpX,MAAO,CACN,qBACA,eACA,QACA,oBAEDtB,IAAAA,GACC,MAAO,CACNy9C,UAAWh8C,KAAK+7C,YAChBE,YAAa,EAEf,EACA33C,SAAU,CACT43C,KAAAA,GACC,IAAIpB,EAAQ96C,KAAKg8C,UAAU1N,QAAQ,SAASA,QAAQ,OAAQ,CAAEI,gBAAgB,IAC1EyN,EAAOrB,EAAMtM,KAAK,CAAEC,KAAM,KAAME,MAAM,OAE1C,GAAwB,GAApB3uC,KAAKi8C,YAAkB,CAC1B,MACMsB,EADgBv9C,KAAKg8C,UAAUxN,KAAK,CAAEgP,OAAQx9C,KAAKi8C,cACpB3N,QAAQ,SAASA,QAAQ,OAAQ,CAAEI,gBAAgB,IACpF1uC,KAAKi8C,YAAc,EACtBnB,EAAQyC,EAERpB,EAAOoB,EAAe/O,KAAK,CAAEC,KAAM,KAAME,MAAM,MAEjD,CAEA,OAAOxB,MAAMiP,SAASC,cAAcvB,EAAOqB,EAC5C,GAEDnuC,MAAO,CACN+tC,WAAAA,GACK/7C,KAAK+7C,YAAYzM,QAAUtvC,KAAKg8C,UAAU1M,QAC7CtvC,KAAKg8C,UAAYh8C,KAAK+7C,YACtB/7C,KAAKO,MAAM,eAAgBP,KAAKk8C,SAEhCl8C,KAAKi8C,YAAcj8C,KAAK+7C,YAAYzN,QAAQ,SAAS6G,KAAKn1C,KAAKg8C,UAAU1N,QAAQ,SAAU,UAAUkP,OACjGx9C,KAAKi8C,cACRj8C,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOtL,WAAWjxC,KAAKi8C,aAAar5C,KAAK5C,KAAKw8C,aAG5D,GAED18C,QAAS,CACRkxC,QAAAA,GACChxC,KAAKi8C,YAAcj8C,KAAKS,MAAM87C,OAAO93C,OAAS,EAC9CzE,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOvL,WAAWpuC,KAAK5C,KAAKw8C,WACxC,EACAtL,QAAAA,GACClxC,KAAKi8C,YAAcj8C,KAAKS,MAAM87C,OAAO93C,OAAS,EAC9CzE,KAAKO,MAAM,eAAgBP,KAAKk8C,OAChCl8C,KAAKS,MAAM87C,OAAOrL,WAAWtuC,KAAK5C,KAAKw8C,WACxC,EACAA,UAAAA,CAAWgB,GACV,MAAMf,EAAez8C,KAAKg8C,UAAUxN,KAAK,CAAEgP,WAC3Cx9C,KAAKg8C,UAAYS,EACjBz8C,KAAKi8C,YAAc,EACnBj8C,KAAKO,MAAM,qBAAsBP,KAAKg8C,WACtCh8C,KAAKO,MAAM,eAAgBP,KAAKk8C,MACjC,EACAQ,SAAAA,CAAUc,GAET,MAAO,CAAEnG,IADGr3C,KAAKg8C,UAAUxN,KAAK,CAAEgP,WAEnC,EACAlK,mBAAAA,CAAoB9uC,GACnB,OAAQA,EAAIu6B,OAAOwS,QACnB,IAAK,OAEJ,IAAIkM,EAAYtQ,MAAMC,SAASgC,WAAW,CACzCK,gBAAiBjrC,EAAIu6B,OAAO9/B,MAAMs0C,OAClC1E,cAAerqC,EAAIu6B,OAAO9/B,MAAMovC,MAC9B,CACFuE,KAAM5yC,KAAK+7C,YAAYvI,SACvBlE,OAAQtvC,KAAK+7C,YAAYzM,SAGrBtvC,KAAKg8C,UAAU7I,QAAQsK,EAAUnP,QAAQ,OAAQ,CAAEI,gBAAgB,IAAS,SAErE1uC,KAAKg8C,UAAU7I,QAAQsK,EAAU9O,MAAM,OAAQ,CAAED,gBAAgB,IAAS,UACrF1uC,KAAKO,MAAM,qBAAsBk9C,EAAU9O,MAAM,OAAQ,CAAED,gBAAgB,KAF3E1uC,KAAKO,MAAM,qBAAsBk9C,EAAUnP,QAAQ,OAAQ,CAAEI,gBAAgB,KAI9E,MACD,IAAK,MAEJ1uC,KAAKO,MAAM,qBAAsBiE,EAAIu6B,OAAO9/B,OAC5C,MACD,IAAK,QAEJe,KAAKO,MAAM,mBAAoB,CAAE0E,MAAOT,EAAIu6B,OAAO9/B,QAGrD,GAEDuB,OAAAA,GACCR,KAAKO,MAAM,eAAgBP,KAAKk8C,MACjC,EACAj5C,SAAU,mXGvGXy6C,GAAe,CACdp/C,KAAM,iBACN6E,WAAY,CACXu6C,YAAAA,IAEDz5C,OAAQ,CACP,aAEDvF,MAAO,CACNoc,SAAU,CACTlc,KAAME,OACNmY,UAAU,GAEX8M,KAAM,CACLnlB,KAAM,CAAC6c,KAAM3c,OAAQqL,OAAQgjC,MAAMC,UACnCruC,QAASouC,MAAMC,SAASG,SAEzB5iC,KAAM,CACL/L,KAAME,OACNC,QAAS,QAEV4+C,eAAgB,CACf/+C,KAAM0E,SACN2T,UAAU,IAGZpX,MAAO,CACN,cACA,cACA,gBAEDtB,IAAAA,GACC,MAAO,CACNknC,MAAO,CACN4R,IAAK51C,IAAIm8C,QAAQvD,IACjBvL,KAAMrtC,IAAIm8C,QAAQhB,IAClBxO,MAAO3sC,IAAIm8C,QAAQZ,KAEpBtN,YAAa,CACZ2H,IAAK,CACJkD,aAAc94C,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,oBAC3CwiC,oBAAqB/4C,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,qBAEnD82B,KAAM,CACLgO,mBAAmB,IAGrBe,cAAe,KAEjB,EACAv5C,SAAU,CACTynC,WAAAA,GACC,IAAImG,EAAM/E,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK8a,UAE5C,MAAiB,SAAb9a,KAAK2K,KACD,CACN,CACC9I,MAAO,kBACP+qC,IAAKsF,EAAI5D,QAAQ,SAIb,CACN,CACCzsC,MAAO,kBACP+qC,IAAKsF,EACL9I,MAAO8I,EAAI5D,QAAQ,UAAU6L,UAAU,CAAEC,iBAAiB,EAAM0D,eAAe,KAGlF,GAEDh+C,QAAS,CACRi+C,UAAAA,CAAW94C,GACV,GAAKA,EAAM+4C,MAEX,MAAO,eAAiB/4C,EAAM+4C,KAC/B,EACAC,WAAAA,CAAYC,GACXl+C,KAAKk+C,cAAgBA,EACrBl+C,KAAKO,MAAM,eAAgB29C,EAC5B,GAEDv8C,KAAAA,CAAMjD,EAAOy/C,GACZ,MAAMD,EAAgBz8C,IAAIK,IAAI,OAExB+pC,OAAEA,EAAMuS,GAAEA,GC7FX,SAAwBF,EAAeP,GAC7C,IAAIU,EAAa,EACjB,MAAMxS,EAASpqC,IAAIK,IAAI,IACjBw8C,EAAgB78C,IAAIK,IAAI,IACxBy8C,EAAY98C,IAAI6C,SAAS,IAAMunC,EAAO5sC,MAAMob,OAAOikC,EAAcr/C,QACjEm/C,EAAK38C,IAAIK,IAAI,MACb08C,EAAe,GAEfC,EAAkBA,CAAC9b,EAAGsQ,IACvB1zC,MAAM4I,QAAQw6B,GACVsQ,EAAE54B,OAAOsoB,IACVsQ,EAAE3sC,KAAKq8B,GAAIsQ,GAGbyL,EAAmBA,CAAC/R,EAAOC,KAChC,IAAI3qC,EAAS,GACb,GAAKu8C,EAAar4C,OAIjB,GAAIq4C,EAAaA,EAAar4C,OAAO,GAAK,GAAKwmC,EAAM4B,GAEpDiQ,EAAaA,EAAar4C,OAAO,GAAKymC,EAAI2B,QACpC,GAAIiQ,EAAaA,EAAar4C,OAAO,GAAKwmC,EAAM4B,GAEtDiQ,EAAal4C,KAAKqmC,EAAM4B,GAAI3B,EAAI2B,SAC1B,GAAIiQ,EAAa,IAAM5R,EAAI2B,GAAK,EAEtCiQ,EAAa,GAAK7R,EAAM4B,QAClB,GAAIiQ,EAAa,GAAK5R,EAAI2B,GAChCiQ,EAAa50C,QAAQ+iC,EAAM4B,GAAI3B,EAAI2B,QAC7B,CACN,IAAIznC,EAAQ03C,EAAajS,UAAUr2B,GAAKA,GAAKy2B,EAAM4B,IAEnD,GAAIznC,EAAQ,EAAG,CAEd,GAAI03C,EAAa13C,IAAU8lC,EAAI2B,GAC9B,MAAO,GAER,IAAIoQ,EAAe73C,GAAS03C,EAAar4C,OAAS,EAElD,GAAIw4C,GAAeH,EAAa13C,EAAQ,GAAK8lC,EAAI2B,GAAI,CAGpD,IAAIqQ,EAASJ,EAAa13C,GAAS,EACnC6lC,EAAQA,EAAM6B,KAAKoQ,EAASjS,EAAM4B,IAC7BoQ,GAAeH,EAAa13C,EAAQ,IAAM8lC,EAAI2B,GAAK,EAGvDiQ,EAAa13C,GAAS8lC,EAAI2B,GAF1BiQ,EAAaxiC,OAAOlV,EAAO,EAG7B,KAAO,CAGN,GAAI03C,EAAa13C,EAAQ,GAAK8lC,EAAI2B,GAAI,CACrC,IAAIsQ,EAASL,EAAa13C,EAAQ,GAAK,EACvC7E,EAASw8C,EAAgBC,EAAiB/R,EAAM6B,KAAKqQ,EAASlS,EAAM4B,IAAK3B,GAAM3qC,EAChF,CAEA,IAAI28C,EAASJ,EAAa13C,GAAS,EACnC6lC,EAAQA,EAAM6B,KAAKoQ,EAASjS,EAAM4B,IAClC,IAAIuQ,EAAON,EAAa13C,EAAQ,GAAK,EACrC8lC,EAAMA,EAAI4B,KAAKsQ,EAAOlS,EAAI2B,IAC1BiQ,EAAaxiC,OAAOlV,EAAO,EAC5B,CACD,MAEC,GAAKA,EAUE,GAAI03C,EAAa13C,IAAU6lC,EAAM4B,GAAI,CAE3C,GAAIiQ,EAAa13C,EAAQ,IAAM8lC,EAAI2B,GAClC,MAAO,GAER,IAAIsQ,EAASL,EAAa13C,EAAQ,GAAK,EACvC7E,EAASw8C,EAAgBC,EAAiB/R,EAAM6B,KAAKqQ,EAASlS,EAAM4B,IAAK3B,GAAM3qC,EAChF,KAAO,CAGN,GAAIu8C,EAAa13C,EAAQ,GAAK8lC,EAAI2B,GAAI,CACrC,IAAIsQ,EAASL,EAAa13C,EAAQ,GAAK,EACvC7E,EAASw8C,EAAgBC,EAAiB/R,EAAM6B,KAAKqQ,EAASlS,EAAM4B,IAAK3B,GAAM3qC,EAChF,CACA,IAAI68C,EAAON,EAAa13C,GAAS,EACjC8lC,EAAMA,EAAI4B,KAAKsQ,EAAOlS,EAAI2B,IAC1BiQ,EAAa13C,GAAS6lC,EAAM4B,EAC7B,KA3BY,CAGX,GAAIiQ,EAAa,GAAK5R,EAAI2B,GAAI,CAC7B,IAAIsQ,EAASL,EAAa,GAAK,EAC/Bv8C,EAASw8C,EAAgBC,EAAiB/R,EAAM6B,KAAKqQ,EAASlS,EAAM4B,IAAK3B,GAAM3qC,EAChF,CACA,IAAI68C,EAAON,EAAa,GAAK,EAC7B5R,EAAMA,EAAI4B,KAAKsQ,EAAOlS,EAAI2B,IAC1BiQ,EAAa,GAAK7R,EAAM4B,EACzB,CAmBF,MA7EAiQ,EAAal4C,KAAKqmC,EAAM4B,GAAI3B,EAAI2B,IAgFjC,OAAI5B,EAAM4B,IAAM3B,EAAI2B,GACZtsC,GAERq8C,EAAcr/C,MAAMqH,KAAK,CACxB+3C,WAAYA,IACZz/C,KAAM,UACNsuC,SAAUP,EAAMoS,YAAc,IAAMpS,EAAMwN,YAC1C3M,OAAQZ,EAAImS,YAAc,IAAMnS,EAAIuN,cAG9BsE,EAAgBd,EAAehR,EAAOC,GAAM3qC,KA0BpD,OAvBAR,IAAIo6C,YAAY,KACf,MAAMK,EAAQz6C,IAAIu9C,QAAQd,GAC1B,KAAMhC,aAAiB/O,MAAMiP,UAC5B,OACD,MAAM6C,EAAWP,EAAiBxC,EAAMvP,MAAOuP,EAAMtP,KACrDvrC,QACEqe,WAAWu/B,GACXr8C,KAAKs8C,IACLA,EAAQt4C,QAAQ2C,IAEC,cAAfA,EAAI8f,QACyB,YAA1B9f,EAAItK,MAAMk7B,KAAK9Q,SAEd9f,EAAItK,MAAMk7B,KAAKikB,KAClBA,EAAGn/C,MAAQsK,EAAItK,MAAMk7B,KAAKikB,IAE3BvS,EAAO5sC,MAAQ4sC,EAAO5sC,MAAMob,OAAO9Q,EAAItK,MAAMV,MAC7C+/C,EAAcr/C,MAAQ,UAMpB,CAAE4sC,OAAQ0S,EAAWH,KAC7B,CD1CyBe,CAAejB,EAAex/C,EAAMi/C,gBAM3D,OAJAl8C,IAAIuM,MAAMowC,EAAIgB,IACbjB,EAAQkB,KAAK,YAAaD,KAGpB,CACNlB,gBACArS,SACAuS,KAEF,EACAxnC,OAAAA,GACC5W,KAAK+c,KACH3H,KAAK2+B,GAAUtwB,cACf7gB,KAAK2G,GACEvJ,KAAK69C,cAAgBt0C,EAAIhL,KAAK+J,IAAIgM,IAAE,CAC1C1H,GAAI0H,EAAGgrC,OACP3S,MAAOr4B,EAAGirC,OACV3S,IAAKt4B,EAAGkrC,QAGZ,EACAv8C,SAAoB,q0CErGrBw8C,GAAe,CACd9nB,WAAUA,KACF,CACNnd,OAAQ,MACRC,IAAK,yCAGPmd,YAAWA,KACH,CACNpd,OAAQ,MACRC,IAAK,2CCpBR,IAAAilC,GAAe,CACdphD,KAAM,0BACN6E,WAAY,CACXu6C,gBAEDh/C,MAAO,CACNkc,SAAUpb,OACVmgD,cAAengD,QAEhBjB,KAAIA,KACI,CACN6/C,GAAI,OAGN95C,SAAS,CACRs7C,UAAAA,GACC,OAAK5/C,KAAK2/C,eAAeE,YAAcC,MAAM,IAAIrkC,KAAKzb,KAAK2/C,eAAeE,aAClE1S,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK4a,SAASE,UAAUikC,YACtD/+C,KAAK2/C,eAAeE,UAC5B,EACAE,WAAAA,GACC,OAAK//C,KAAK2/C,eAAeh1C,MAAS,CAAC,MAAO,OAAQ,SAASzL,SAASc,KAAK2/C,eAAeh1C,KAAKk2B,eAEtF7gC,KAAK2/C,eAAeh1C,KAzBK,MA0BjC,EACAq1C,SAAAA,GACC,OAAIF,MAAM3mC,SAASnZ,KAAK2/C,eAAe17B,QAC/B,KACDjkB,KAAK2/C,cAAc17B,KAC3B,EACAg8B,OAAAA,GACC,OAAuB,OAAnBjgD,KAAKggD,UACD,GACHhgD,KAAKo+C,GAG0B,YAAhCp+C,KAAK+X,GAAGmsB,cAAcjlC,MAClBe,KAAKo+C,GAAG8B,oBAETlgD,KAAKo+C,GAAG+B,YALP,EAMT,GAEDrgD,QAAS,CACRsgD,gBAAAA,CAAiB/I,EAAKgJ,GACrB,OAAOrgD,KAAKsgD,iBAAiBD,EAAShJ,EACvC,EACAiJ,gBAAAA,CAAiBD,EAAShJ,GACzB,MAAM1sC,EAAO01C,EAAQ,GAAGtf,cAAgBsf,EAAQ/J,MAAM,GAChDuJ,EAAaxI,EAAI0H,YAEvB/+C,KAAKugD,QAAQj6C,KAAK,CACjBhI,KAAM,SACNuV,OAAQ,CACPlJ,OACAk1C,aACA57B,MAAOjkB,KAAKggD,YAGf,EACArC,cAAAA,CAAehR,EAAOC,GACrB,MAAO,CACN5sC,KAAK+c,KAAK3H,KAAK2+B,GAAUG,SAASl0C,KAAK2/C,cAAc17B,MAAO0oB,EAAMoS,YAAanS,EAAImS,cACnF/+C,KAAK+c,KAAK3H,KAAK2+B,GAAUpwB,wBAAwBgpB,EAAMoS,YAAanS,EAAImS,cAE1E,GAEDnoC,OAAAA,GACwB,OAAnB5W,KAAKggD,WAEThgD,KAAK+c,KACH3H,KAAK2+B,GAAUI,MAAMn0C,KAAK2/C,eAAe17B,QACzCrhB,KAAK2G,IACLvJ,KAAKo+C,GAAK70C,EAAIhL,MAEjB,EACA0E,SAAkB,woBC3EnB,IAAAu9C,GAAe,CACdliD,KAAM,iBACN6E,WAAY,CACXu6C,gBAEDh/C,MAAO,CACNkc,SAAUpb,OACVmgD,cAAengD,QAEhBjB,KAAIA,KACI,CACN+lB,uBAAwB,KACxBm8B,sBAAuB,KACvBC,qBAAsB,KACtB7lC,IAAK,KACL4G,eAAe,EACfD,WAAW,IAGbld,SAAS,CACRs7C,UAAAA,GACC,OAAK5/C,KAAK2/C,eAAeE,YAAcC,MAAM,IAAIrkC,KAAKzb,KAAK2/C,eAAeE,aAClE1S,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK4a,SAASE,UAAUikC,YACtD/+C,KAAK2/C,eAAeE,UAC5B,EACAE,WAAAA,GACC,OAAK//C,KAAK2/C,eAAeh1C,MAAS,CAAC,MAAO,OAAQ,SAASzL,SAASc,KAAK2/C,eAAeh1C,KAAKk2B,eAEtF7gC,KAAK2/C,eAAeh1C,KA9BK,MA+BjC,EACAg2C,aAAAA,GACC,IAAK3gD,KAAKygD,wBAA0BzgD,KAAK0gD,uBAAyB1gD,KAAK6a,IACtE,OAAO,EAER,IAAIjc,GAAO,EAGX,GAFAA,EAAOoB,KAAKwhB,UAAY,UAAY5iB,EACpCA,EAAOoB,KAAKyhB,cAAgB,SAAW7iB,GACnC,IAAUA,EAEb,OAGD,MAAMgiD,EAAO,CAAEhO,KAAM5yC,KAAK4a,SAASE,UAC7B6xB,EAAQQ,MAAMC,SAClBC,QAAQrtC,KAAKygD,sBAAuBG,GACpCC,gBACIrB,EAAOrS,MAAMC,SACjBC,QAAQrtC,KAAK0gD,qBAAsBE,GACnCC,gBAEIC,EAAgBxtC,2BAA2BC,SAA3BD,6CAER1U,EACX,aAAeoB,KAAK6a,IACpB,UAAY8xB,EACZ,SAAW6S,EAEd,MAAO,CACN,CAAEz+C,MAAO,QAASooC,KAAM,yBAA0B4X,KAAMD,EAAgB,iBACxE,CAAE//C,MAAO,MAAOooC,KAAM,uBAAwB4X,KAAMD,EAAgB,eACpE,CAAE//C,MAAO,QAASooC,KAAM,yBAA0B4X,KAAMD,EAAgB,sCACxE,CAAE//C,MAAO,QAASooC,KAAM,yBAA0B4X,KAAMD,EAAgB,sCAE1E,GAEDhhD,QAAS,CACRsgD,gBAAAA,CAAiB/I,EAAKgJ,GACrB,OAAOrgD,KAAKsgD,iBAAiBD,EAAShJ,EACvC,EACAiJ,gBAAAA,CAAiBD,EAAShJ,GACzB,MAAM1sC,EAAO01C,EAAQ,GAAGtf,cAAgBsf,EAAQ/J,MAAM,GAChDuJ,EAAaxI,EAAI0H,YAEvB/+C,KAAKugD,QAAQj6C,KAAK,CACjBhI,KAAM,WACNuV,OAAQ,CACPlJ,OACAk1C,eAGH,EACA5B,WAAAA,CAAYC,GACXl+C,KAAK+c,KACH3H,KAAK2+B,GAAUjwB,4BACfo6B,EAActR,IAAI0B,QAAQ,QAAQyQ,cAElCn8C,KAAK2G,IACLvJ,KAAKskB,uBAAyB/a,EAAIhL,KAAK+lB,uBACvCtkB,KAAKygD,sBAAwBl3C,EAAIhL,KAAKouC,MACtC3sC,KAAK0gD,qBAAuBn3C,EAAIhL,KAAKihD,MAExC,EACA7B,cAAAA,CAAehR,EAAOC,GACrB,MAAO,CACN5sC,KAAK+c,KAAK3H,KAAK2+B,GAAUE,eAAetH,EAAMoS,YAAanS,EAAImS,cAC/D/+C,KAAK+c,KAAK3H,KAAK2+B,GAAUpwB,wBAAwBgpB,EAAMoS,YAAanS,EAAImS,cAE1E,GAEDnoC,OAAAA,GACC5W,KAAK+c,KACH3H,KAAKqqC,GAAY7nB,eACjBh1B,KAAK2G,IACLvJ,KAAK6a,IAAMtR,EAAIhL,KAAKsc,IACpB7a,KAAKyhB,cAAgBlY,EAAIhL,KAAKkjB,cAC9BzhB,KAAKwhB,UAAYjY,EAAIhL,KAAKijB,WAE7B,EACAve,SAAkB,onCC/GnB+9C,GAAe,CACd79C,WAAY,CACX9E,WAED+E,OAAQ,CACP/E,GAEDK,MAAO,CACNuiD,eAAsB,KAAN1hD,MAChB4gD,YAAarhD,OAObuE,cAAeC,SACfC,gBAAiBD,SACjBE,uBAAwBF,SACxBG,cAAeH,SACfI,eAAgBJ,UAEjB/E,KAAMA,KAAAA,CACL0D,QAAQ,IAETzB,OAAAA,GACCR,KAAKxB,MAAQwB,KAAKS,MAAMkD,eAAenF,KACxC,EACAoC,KAAAA,CAAME,GACL,OAAOzC,EAAQuC,MAAMiD,KAAK7D,KAAnB3B,CAAyB,KAAMyC,EACvC,EACAmC,SAAU,o8BClBXi+C,GAAe,CACdvsB,iBAAiB9Q,IAET,CACNrJ,OAAQ,MACRC,IAAK,yCACL5G,OAAQ,CAAEgQ,oBAGZ+Q,UAASA,CAACtQ,EAAwBiI,KAC1B,CACN/R,OAAQ,MACRC,IAAK,6BAA6B6J,KAA0BiI,MAG9DsI,qBAAqBtI,IACb,CACN/R,OAAQ,MACRC,IAAK,qCAAqC8R,OCjC7C,MAAM40B,GAAQ,CAAA,EAEd,IAAAjS,GAAe,CACdxwC,MAAM,CACL0iD,iBAAkBtiD,OAClBytB,qBAAsBpiB,QAEvB5L,KAAMA,KAAAA,CACL4hD,YAAa,KACbkB,oBAAqB,KACrB32B,SAAU,KACV42B,eAAgB,KAChBrtB,QAAS,KACTstB,KAAM,KACNC,SAAU,KACVv/C,QAAQ,EACRw/C,KAAM,OAEPn9C,SAAU,CACTo9C,gBAAAA,GACC,IAAIC,EAAgB,CAAA,EAKpB,OAJA3hD,KAAKyhD,KAAKG,SAASh7C,QAAQsP,IAC1B,IAAI5X,IAAS4X,EAAE2rC,UAAY,IAAM,KAAO3rC,EAAE4rC,SAAW,IAAM,KAAO5rC,EAAE6rC,UAAY,IAAM,KAAO7rC,EAAE8rC,WAAa,KAAKnkB,OACjH8jB,EAAcrjD,GAAQgV,2BAA2BC,SAAWD,2BAA2BE,UAAY,oBAAoB0C,EAAE2E,QAEnH8mC,CACR,EACAM,WAAAA,GACC,OAAOjiD,KAAKyhD,KAAKG,SAASt5C,IAAK4N,KAAMA,EAAE2rC,UAAY,IAAM,KAAO3rC,EAAE4rC,SAAW,IAAM,KAAO5rC,EAAE6rC,UAAY,IAAM,KAAO7rC,EAAE8rC,WAAa,KAAKnkB,OAC1I,EACAqkB,SAAAA,GACC,OAAOliD,KAAKyhD,KAAKS,WAAaliD,KAAKyhD,KAAKS,UAAU/7C,OAASnG,KAAKyhD,KAAKS,UAAU55C,IAAI4N,KAAOA,EAAE2rC,UAAY,IAAM,KAAO3rC,EAAE4rC,SAAW,IAAM,KAAO5rC,EAAE6rC,UAAY,IAAM,KAAO7rC,EAAE8rC,WAAa,KAAKnkB,QAAU,IACzM,EACAskB,EAAAA,GACC,OAAOniD,KAAKyhD,KAAKU,GAAGC,wBAA2BpiD,KAAKyhD,KAAKU,GAAGC,wBAA0B,IAAMpiD,KAAKyhD,KAAKU,GAAGhC,YAAe,EACzH,EACAkC,SAAAA,GACC,OAAKriD,KAAKyhD,KAAKY,WAAcriD,KAAKyhD,KAAKY,UAAUl8C,OAE1CnG,KAAKyhD,KAAKY,UAAU/5C,IAAI4N,KAAOA,EAAE2rC,UAAY,IAAM,KAAO3rC,EAAE4rC,SAAW,IAAM,KAAO5rC,EAAE6rC,UAAY,IAAM,KAAO7rC,EAAE8rC,WAAa,KAAKnkB,QADlI,CAAC,IAEV,EACAykB,WAAAA,GACC,OAAKtiD,KAAKyhD,KAAKa,aAAgBtiD,KAAKyhD,KAAKa,YAAYn8C,OAE9CnG,KAAKyhD,KAAKa,YAAYh6C,IAAI4N,KAAOA,EAAE2rC,UAAY,IAAM,KAAO3rC,EAAE4rC,SAAW,IAAM,KAAO5rC,EAAE6rC,UAAY,IAAM,KAAO7rC,EAAE8rC,WAAa,KAAKnkB,QADpI,IAET,EACA0kB,WAAAA,GACC,OAAKviD,KAAKyhD,KAENzhD,KAAKyhD,KAAKe,SACNxiD,KAAKyhD,KAAKe,SACbxiD,KAAKyhD,KAAKgB,OAERziD,KAAKyhD,KAAKiB,mBAAqB1iD,KAAKyhD,KAAKgB,OAAOziD,KAAKyhD,KAAKiB,mBAAqB1iD,KAAKyhD,KAAKiB,kBAAoBljD,OAAO6M,KAAKrM,KAAKyhD,KAAKgB,QAAQ55C,QAD1I,KAJA,IAMT,GAED+N,OAAAA,GACC5W,KAAK+c,KAAK3H,KAAK8rC,GAAStsB,UAAU50B,KAAKohD,iBAAkBphD,KAAKusB,uBAC7D3pB,KACA2G,GAAOA,EAAIhL,MACVqE,KAAKrE,IACNiB,OAAOmjD,OAAO3iD,KACb,CACCmgD,YAAc5hD,EAAK4hD,YACnBkB,oBAAqB9iD,EAAK8iD,oBAC1B32B,SAAUnsB,EAAKmsB,SACf42B,eAAgB/iD,EAAK+iD,eACrBrtB,QAAS11B,EAAK01B,QACdstB,KAAMhjD,EAAKgjD,KACXC,SAAUjjD,EAAKijD,UAAY,QAI1BL,GAAMnhD,KAAKusB,sBACdvsB,KAAKyhD,KAAON,GAAMnhD,KAAKusB,sBAEvB3Y,MAAMrI,IAAI+H,2BAA2BC,SAAWD,2BAA2BE,UAAY,6BAA+BxT,KAAKohD,iBAAmB,IAAMphD,KAAKusB,sBAAsB3pB,KAAK2G,IACnLvJ,KAAKyhD,KAAON,GAAMnhD,KAAKusB,sBAAwBhjB,EAAIhL,KAAKuV,QAAU,KAChEC,MAAM,IAAM/T,KAAKyhD,KAAO,CAAA,EAE7B,EACAx+C,SAAkB,29HCnFnB,MAAMua,GAAa,CAAA,EACbymB,GAAiB,CAAA,EAEvB,SAASW,GAAgB5qB,EAAKsD,GAC7B,OAAOtD,EAAIvQ,OAAOyM,GAAKA,EAAEoH,UAAYA,GAAUzX,OAAO,CAAC0D,EAAKo7B,KACtDp7B,EAAIo7B,EAAKF,UACbl7B,EAAIo7B,EAAKF,QAAUE,EAAKD,MAClBn7B,GACL,CAAA,EACJ,CACA,SAASq5C,GAAWtlC,GACnB,KAAO2mB,GAAe3mB,GAAUnX,QAAQ,CACvC,IAAIsB,EAAIw8B,GAAe3mB,GAAUxR,MACjCrE,EAAE,GAAGxI,MAAQimC,GAAwB5nB,EAAU7V,EAAE,GAAIA,EAAE,IACvDhG,IAAIohD,WAAWp7C,EAAE,GAElB,CACD,CAoBA,SAASy9B,GAAwB5nB,EAAUmnB,EAAQ5wB,GAClD,IAAI5R,EAASub,GAAWF,GAAUmnB,GAClC,OAAKxiC,GAED4R,IACH5R,EAASA,EAAO0gB,QAAQ,eAAgB,CAACqiB,EAAOC,SAAsB/jC,IAAf2S,EAAOoxB,GAAoBD,EAAQnxB,EAAOoxB,KAC3FhjC,GAHC,aAAewiC,EAAS,IAIjC,CAGA,MAAM5N,GAAU,CACfgO,KAAAA,CAAMvnB,EAAUmnB,EAAQ5wB,GAQvB,QAPe3S,IAAX2S,IACFtU,MAAM4I,QAAQmV,IAAgC,GAAnBA,EAASnX,QACpCmX,EAASwnB,OAAuC,GAA9BxnB,EAASwnB,MAAM,KAAK3+B,UAEvC0N,EAAS4wB,GACRnnB,EAAUmnB,GAAUnnB,EAASwnB,MAAQxnB,EAASwnB,MAAM,KAAOxnB,QAE9Cpc,IAAXujC,EAEH,OADA38B,QAAQC,MAAM,iBACP,GAER,IAAKyV,GAAWF,GAAW,CAE1B,IAAIwlC,EAAa,GACf,QAA6C5hD,IAAzCkY,OAAO2pC,8BAA6C,CACvD,IAAIC,EAAepe,GAAgBme,8BAA+BzlC,QACxCpc,IAAzB8hD,EAAave,KACfqe,EAAaE,EAAave,GAE5B,CAEA,IAAKjnB,GAAWF,IAA0D,IAA7C9d,OAAO6M,KAAKmR,GAAWF,IAAWnX,OAAc,CAC5EqX,GAAWF,QAAYpc,EACvB,IAAI6jC,EAAMtjC,IAAIK,IAAIghD,GAElB,OAxDJ,SAAkBxlC,EAAUynB,EAAKN,EAAQ5wB,GAExC,GAAIowB,GAAe3mB,GAIlB,OAHA2mB,GAAe3mB,GAAUhX,KAAK,CAACy+B,EAAKN,EAAQ5wB,SACxC2J,GAAWF,IACdslC,GAAWtlC,IAGb2mB,GAAe3mB,GAAY,CAAC,CAACynB,EAAKN,EAAQ5wB,IAE1CD,MAAMrI,IAAI+H,2BAA2BC,SAAWD,2BAA2BE,UAAY,kCAAoC8J,GAAU1a,KAAK2G,IACrIA,EAAIhL,KAAKuV,OACZ0J,GAAWF,GAAYsnB,GAAgBr7B,EAAIhL,KAAKuV,OAAQwJ,GAExDE,GAAWF,GAAY,CAAA,EAExBslC,GAAWtlC,KACTvJ,MAAMwH,GAAOzT,QAAQC,MAAMwT,GAC/B,CAqCI0nC,CAAS3lC,EAAUynB,EAAKN,EAAQ5wB,GACzBkxB,CACR,CACD,CACA,IAAI9iC,EAASijC,GAAwB5nB,EAAUmnB,EAAQ5wB,GACvD,OAAOpS,IAAIK,IAAIG,EAChB,EACA+V,CAAAA,CAAEsF,EAAUmnB,EAAQ5wB,GACnB,OAAOpS,IAAIyhD,MAAMljD,KAAK6kC,MAAMvnB,EAAUmnB,EAAQ5wB,GAC/C,GAGD,IAAA/Q,GAAe,CACdvE,KAAMA,KACE,CACN4K,EAAG0tB,MCvFNssB,GAAe,CACdzkD,MAAM,CACL+4B,KAAK,CACJ74B,KAAKW,MACLR,QAAQ,MAETqkD,gBAAiB7jD,MACjB8jD,UAAW9jD,MACX+jD,mBAAoB,CACnBrsC,UAAS,EACTlY,SAAQ,EACRH,KAAKC,UAGPN,KAAIA,KACG,CAAA,GAIPuB,QAAQ,CACPyjD,YAAa,SAAUC,GACtB,OAAKxjD,KAAKyjD,QAAQD,KAAcA,EAASE,iBAAiBv9C,SAGvC,8BAAfq9C,EAAS52C,KAAuC5M,KAAKsjD,oBAGlD,KACR,EACAK,UAAW,SAAUH,GACpB,OAAIA,EAASE,iBAAiBv9C,OAAS,EAAU,KAC1Cq9C,EAASG,WAAa,IAC9B,EACAF,QAAQD,GACFA,EACDjkD,MAAM4I,QAAQq7C,EAASE,kBAAoBF,EAASE,gBAAgBv9C,OAEhE,KAIAq9C,EAASC,SAAW,KAPN,KAUvBG,WAAAA,CAAYJ,GACX,OAAGA,EAAS/e,OACJzkC,KAAK+X,GAAGC,EAAEwrC,EAAS/e,QAEnB+e,EAASllD,IAElB,GAED2E,SAAiB,87CCpClB4gD,GAAe,CACd9uB,UAASA,CAACC,EAAM1Q,KACR,CACN9J,OAAQ,MACRC,IAAK,qCAAqCua,KAAQ1Q,OChBrDw/B,GAAgB,CAEZplD,MAAM,CACFuG,MAAM,CACFrG,KAAKY,OACLyX,UAAS,EACTlY,QAAQ,MAElBwgB,gBAAiB,CAChB3gB,KAAME,OACNmY,UAAU,EACVlY,QAAS,MAEVglD,MAAO,CACNnlD,KAAME,OACNmY,UAAU,EACVlY,QAAS,MAGVilD,gBAAiB,CAChBplD,KAAMY,OACNyX,UAAU,EACVlY,QAAS,OAGRR,KAAIA,KACO,CACH0D,QAAQ,EACRw1B,KAAM,GACfwsB,gBAAe,EACfX,oBAAoB,EACpBY,qBAAsB,KAGrB9gD,OAAO,CAAC/E,GACR8E,WAAW,CACP9E,UACN8kD,WAEDl/C,OAAQ,CAAC,2BACNnE,QAAQ,CAEJqkD,YAAa,WAClBnkD,KAAKikD,gBAAiB,CACjB,EACAG,UAAW,WAuBhB,GAtBKpkD,KAAKgkD,gBASThkD,KAAKikD,gBAAiB,EARVjkD,KAAK+c,KACf3H,KAAKyuC,GAAU9uB,UAAU/0B,KAAKiF,MAAMsnB,qBAAuBvsB,KAAKuf,iBAAmBvf,KAAKiF,MAAMqf,yBAC/E1hB,KAAK2G,IACbA,EAAIhL,OACPyB,KAAKy3B,KAAOluB,EAAIhL,QAQnByB,KAAKqkD,yBACRrkD,KAAKkd,QAAQwc,QAAQtD,QAAQO,qBAAqB32B,KAAKqkD,wBAAyBrkD,KAAKiF,MAAM4e,gBAAkB7jB,KAAKiF,MAAMsnB,sBACtH3pB,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACLvJ,KAAKkkD,qBAAuB36C,EAAIkyB,UAK/Bz7B,KAAKuf,iBAAmBvf,KAAKiF,MAChC,OAAOjF,KAAKkd,QAAQwc,QAAQtD,QAAQM,4BAA4B12B,KAAKuf,gBAAiBvf,KAAKiF,MAAM4e,gBAAkB7jB,KAAKiF,MAAMsnB,sBAC5H3pB,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACDhK,MAAM4I,QAAQoB,IAAQA,EAAIpD,OAAS,EACtCnG,KAAKsjD,oBAAqB,EAE1BtjD,KAAKsjD,oBAAqB,GAKzB,GAEP9iD,OAAAA,GACOR,KAAKxB,MAAQwB,KAAKS,MAAMkD,cAC5B,EACH3B,aAAAA,GACChC,KAAKS,MAAMkD,eAAezD,MAC3B,EACG+C,SAAiB,o+BC3FrBqhD,GAAe,CACdnhD,WAAY,CACXohD,wBCDa,CACdphD,WAAY,CACXqhD,0BCKa,CACdrhD,WAAW,CACV2gD,iBAED1gD,OAAQ,CACPN,IAEDmB,OAAQ,CAAC,oBACTvF,MAAO,CACN6tB,qBAAsBpiB,OACtBg2C,YAAarhD,OACb2lD,gBAAiB3lD,OACjB4lD,OAAQ5lD,OACRk/C,MAAOl/C,OACP2jD,OAAQ5jD,QACR8lD,SAAU9lD,QACV+lD,OAAQ9lD,OACR+lD,UAAWtlD,MACXulD,MAAOhmD,OACPimD,SAAUxlD,MACV8hD,oBAAqBviD,OACrB4rB,SAAU,CAAC5rB,OAAQqL,QACnBm3C,eAAgBxiD,OAChBm1B,QAASn1B,OACTyiD,KAAMziD,OACN0iD,SAAUr3C,OACV66C,QAASnmD,QACTomD,WAAYnmD,QAEbP,KAAMA,KACE,CACN0iD,eAAgB,KAChBQ,KAAM,KACNhqB,KAAM,KACNytB,oBAAqB,OAGvB5gD,SAAU,CACT6gD,UAAAA,GAEC,GAAoB,MAAhBnlD,KAAKglD,QAET,OAAIhlD,KAAKglD,QAED,qBAIA,mBAET,EACAI,2BAAAA,GACC,MAAoB,4BAAbplD,KAAKy3B,IACb,EACA4tB,SAAAA,GACC,OAAQrlD,KAAKy3B,OAASl4B,MAAM4I,QAAQnI,KAAKy3B,OAASl4B,MAAM4I,QAAQnI,KAAKy3B,OAA6B,GAApBz3B,KAAKy3B,KAAKtxB,MACzF,EACAm/C,UAASA,KAAW,CAAA,GAMpBC,KAAAA,GACC,MAAMC,EAAgD,YAAhCxlD,KAAK+X,GAAGmsB,cAAcjlC,MAAsB,EAAI,EACtE,OAAGe,KAAK2kD,UAAY3kD,KAAK+kD,UAAU5+C,OAC3BnG,KAAK+kD,SAASS,GACZxlD,KAAK2kD,UAAY3kD,KAAK6kD,WAAW1+C,OACnCnG,KAAK6kD,UAAUW,GACT,IACf,EACAC,0BAAAA,GACC,OAAOzlD,KAAKihD,gBAAkBjhD,KAAKihD,eAAe96C,OAAS,CAC5D,GAEDrG,QAAS,CAER4lD,SAAAA,CAAUn5B,EAAuBvsB,KAAKusB,qBAAsB60B,EAAmBphD,KAAKohD,kBACnF,OAAOphD,KAAK+c,KACV3H,KAAKyuC,GAAU9uB,UAAUxI,EAAsB60B,IAC/Cx+C,KAAK2G,IACLvJ,KAAKy3B,KAAOluB,EAAIhL,OAEhBwV,MAAOhM,IACP/H,KAAKu7B,UAAUqF,kBAAkB74B,GACjC/H,KAAKy3B,KAAO,IAEf,EAEAgsB,QAAQD,GACFA,EACDjkD,MAAM4I,QAAQq7C,EAASE,kBAAoBF,EAASE,gBAAgBv9C,OAChE,IAGAq9C,EAASC,SAAW,KALN,KAQvBkC,YAAAA,CAAanC,GACO,+BAAfA,EAAS52C,IAEa,yCAAf42C,EAAS52C,GADnBwM,OAAOwsC,SAAS7f,KAAOyd,EAASC,SAIhCzjD,KAAKklD,oBAAsB1B,EAC3B/hD,IAAIokD,SAAS,KACZ7lD,KAAKS,MAAMqlD,aAAa3lD,SAG3B,EACA4lD,cAAAA,GAEM/lD,KAAKylD,4BAEVzE,GAAapgD,MAAM,CAClBqgD,eAAgBjhD,KAAKihD,eACrBd,YAAangD,KAAKmgD,aAEpB,EACA6F,SAAAA,GACMhmD,KAAKyhD,OACTzhD,KAAKyhD,MAAO,EAEZwE,GAAOrlD,MAAM,CACZ2rB,qBAAsBvsB,KAAKusB,qBAC3B4zB,YAAangD,KAAKmgD,YAClBsE,gBAAiBzkD,KAAKykD,gBACtBpD,oBAAqBrhD,KAAKqhD,oBAC1B32B,SAAU1qB,KAAK0qB,SACf02B,iBAAkBphD,KAAKohD,iBACvBE,eAAgBthD,KAAKshD,eACrBrtB,QAASj0B,KAAKi0B,QACdstB,KAAMvhD,KAAKuhD,KACXC,SAAUxhD,KAAKwhD,WACb5+C,KAAK,IAAM5C,KAAKyhD,MAAO,GAAO1tC,MAAM,IAAM/T,KAAKyhD,MAAO,GAE3D,GAEDzzC,MAAM,CACLozC,gBAAAA,CAAiBhC,GAChBp/C,KAAK0lD,UAAU1lD,KAAKusB,qBAAsB6yB,EAC3C,GAEDxoC,OAAAA,GACC5W,KAAK+c,KACH3H,KAAK8rC,GAASrsB,qBAAqB70B,KAAKusB,uBACxC3pB,KAAK2G,GAAOA,EAAIhL,MAChBqE,KAAKsjD,IACLlmD,KAAKihD,eAAiBiF,GAEzB,EACA1lD,OAAAA,GACCR,KAAK0lD,UAAU1lD,KAAKusB,qBAAsBvsB,KAAKohD,iBAChD,EACAn+C,SAAkB,g0GD7JlBG,OAAQ,CACPN,IAEDpE,MAAO,CACNyhD,YAAarhD,OACbqnD,QAASrnD,OACT4rB,SAAU,CAAC5rB,OAAOqL,QAClBi8C,IAAK7mD,MACL8mD,mBAAoBvnD,QAErBwF,SAAU,CACTgiD,mBAAAA,GACC,MAAO,IAAK,IAAIC,IACfvmD,KAAKomD,IACJ99C,IAAI81C,GAAM,CACVA,EAAG7xB,qBACH6xB,KAEA3jB,SACH,GAED36B,QAAS,CACR2sB,KAAK2xB,GACGA,EAAGuG,WAAWvG,EAAG0G,OAAS1G,EAAGwG,SAAiB,MAGvD3hD,SAAU,mkBD3BVuU,OAAAA,GACC,MAAO,CACN4pC,iBAAkB3/C,IAAI6C,SAAS,IAAMtE,KAAK0qB,UAE5C,EACAhsB,MAAO,CACNgsB,SAAU,CAAC5rB,OAAQqL,QACnBi8C,IAAK7mD,OAEN+E,SAAU,CACTmR,KAAAA,GAAU,OAAoB,OAAbzV,KAAKomD,GAAc,EACpCI,aAAAA,GACC,MAAO,IAAK,IAAID,IACfvmD,KAAKomD,IACJ99C,IAAI81C,GAAM,CACVA,EAAGr5B,eAAiB,IAAMq5B,EAAG1zB,SAC7B,CACC3F,eAAgBq5B,EAAGr5B,eACnBo7B,YAAa/B,EAAGqI,eAChBJ,mBAAoBjI,EAAGiI,mBACvBF,QAAS/H,EAAGiD,oBACZ32B,SAAU0zB,EAAG1zB,aAGd+P,UAAUrzB,KAAK,CAACC,EAAGC,IAAMD,EAAE84C,YAAYtf,eAAiBv5B,EAAE64C,YAAYtf,cAAgBx5B,EAAEqjB,SAAWpjB,EAAEojB,SAAWrjB,EAAE84C,YAAYtf,cAAgBv5B,EAAE64C,YAAYtf,cAC/J,GAED/gC,QAAS,CACR4mD,iBAAAA,CAAkBpwB,GACjB,OAAOt2B,KAAKomD,IAAI38C,OAAO20C,GAAMA,EAAGr5B,gBAAkBuR,EAAYvR,gBAAkBq5B,EAAG1zB,UAAY4L,EAAY5L,SAC5G,GAEDznB,SAAU,8UGhCX0jD,GAAe,CACdxjD,WAAY,CACXmhD,iBAEDlhD,OAAQ,CACPN,IAEDvE,KAAMA,KACE,CACNqoD,WAAW,EACXrnC,gBAAiB,KACjB6mC,IAAK,CAAA,EACLS,gBAAiB,OAGnBviD,SAAU,CACTmR,KAAAA,GACC,OAAgC,OAAzBzV,KAAKuf,mBAA8Bvf,KAAK4mD,WAAkC,OAArB5mD,KAAKmuC,QAAQiY,IAC1E,EACAjY,OAAAA,GACC,OAA6B,OAAzBnuC,KAAK6mD,gBACD,CAAEn8B,SAAU,KAAM07B,IAAK,UACQllD,IAAnClB,KAAKomD,IAAIpmD,KAAK6mD,mBACjB7mD,KAAKomD,IAAIpmD,KAAK6mD,iBAAmB,CAChCn8B,SAAU1qB,KAAK6mD,gBACfT,IAAK,MAENxyC,MAAMrI,IAAI+H,2BAA2BC,SAAWD,2BAA2BE,UAAY,4BAA8BxT,KAAK6mD,iBAAiBjkD,KAAK2G,IAC/IvJ,KAAKomD,IAAIpmD,KAAK6mD,iBAAiBT,IAAM78C,EAAIhL,KAAKuV,QAAU,GACxD9T,KAAK4mD,WAAY,KAGZ5mD,KAAKomD,IAAIpmD,KAAK6mD,iBACtB,EACAC,UAAAA,GACC,IAAI5U,EAAMz2B,KAAKy2B,MACX4U,EAAa,KACbC,EAAiB,EAgBrB,OAfA/mD,KAAKuf,gBAAgB3Y,QAAQogD,IAC5B,IAAIra,EAAQ,IAAIlxB,KAAKurC,EAAIra,OACrBC,EAAM,IAAInxB,KAAKurC,EAAIxH,MACvB,GAAItN,GAAOvF,GAASuF,GAAOtF,EAG1B,OAFAka,EAAaE,EAAI1iC,4BACjByiC,EAAiB,GAGlB,IAAI5R,EAAO/uC,KAAKoJ,IAAIpJ,KAAK6gD,IAAI/U,EAAMvF,GAAQvmC,KAAK6gD,IAAI/U,EAAMtF,KACvC,OAAfka,GAAuB3R,EAAO4R,KACjCD,EAAaE,EAAI1iC,uBACjByiC,EAAiB5R,KAIZ2R,CACR,EACAI,cAAAA,GACC,OAAOlnD,KAAKuf,gBAAgB,GAAG+E,wBAA0BtkB,KAAK6mD,eAC/D,EACAM,aAAAA,GACC,OAAOnnD,KAAKuf,gBAAgBvf,KAAKuf,gBAAgBpZ,OAAO,GAAGme,wBAA0BtkB,KAAK6mD,eAC3F,GAED/mD,QAAS,CACRsnD,OAAAA,GACCpnD,KAAKS,MAAM8e,gBAAgB8nC,gBAC3BrnD,KAAKS,MAAM8e,gBAAgB8hB,cAAc,IAAIF,MAAM,SAAU,CAAEwJ,SAAS,IACzE,EACA2c,OAAAA,GACCtnD,KAAKS,MAAM8e,gBAAgB8nC,gBAC3BrnD,KAAKS,MAAM8e,gBAAgB8hB,cAAc,IAAIF,MAAM,SAAU,CAAEwJ,SAAS,IACzE,EACA4c,YAAAA,CAAaxiB,GACZ/kC,KAAKugD,QAAQj6C,KAAK,aAAay+B,IAChC,GAEDnuB,OAAAA,GACChD,MAAMrI,IAAI+H,2BAA2BC,SAAWD,2BAA2BE,UAAY,wCAAwC5Q,KAAK2G,IACnIvJ,KAAKuf,gBAAkBhW,EAAIhL,KAAKuV,QAAU,GAC1C,MAAM0zC,EAAwBxnD,KAAKynD,OAAO5zC,OAAO0L,gBAC7CioC,GAAyBxnD,KAAKuf,gBAAgB9V,OAAOi+C,GAAKA,EAAEpjC,wBAA0BkjC,GAAuBrhD,OAChHnG,KAAK6mD,gBAAkBW,EAEvBxnD,KAAK6mD,gBAAkB7mD,KAAK8mD,YAE/B,EACAa,iBAAAA,CAAkBC,EAAI71C,EAAM81C,GACvBD,EAAG/zC,OAAO0L,iBAAmBvf,KAAKuf,gBAAgB9V,OAAOi+C,GAAKA,EAAEpjC,wBAA0BsjC,EAAG/zC,OAAO0L,iBAAiBpZ,QAAUyhD,EAAG/zC,OAAO0L,iBAAmBvf,KAAK6mD,kBACpK7mD,KAAK6mD,gBAAkBe,EAAG/zC,OAAO0L,iBAClCsoC,GAED,EACA5kD,SAAU,4pDC7EJ,MAAM6kD,GAAgB,CAC5BjoD,MAAO,CAAC,eACRnB,MAAO,CACNqpD,QAAS,CACRnpD,KAAMC,SAEPmpD,YAAa,CACZ/wC,UAAU,EACVrY,KAAM0E,UAEP2kD,sBAAuB,CAAA,GAExBj6C,MAAO,CAIN+5C,QAAS,SAAU3I,EAAU8I,GAC5BloD,KAAKmoD,WACN,GAED5pD,KAAM,WACL,MAAO,CACNod,SAAS,EACT5T,OAAO,EACPqgD,aAAc,KAEhB,EACAxxC,QAAS,WACR5W,KAAKmoD,WACN,EACAroD,QAAS,CAIRqoD,UAAW,WAMV,GALAnoD,KAAK2b,SAAU,EACf3b,KAAK+H,OAAQ,EACb/H,KAAKooD,aAAe,KAGW,mBAApBpoD,KAAKgoD,YAChB,CAEQ,IAAIK,EAAoBroD,KAAKgoD,YAAYhoD,KAAKioD,uBAGjDI,aAA6BhnD,QAEhCgnD,EACEzlD,KAAK5C,KAAKsoD,gBACVv0C,MAAM/T,KAAKuoD,cACXC,QAAQxoD,KAAKyoD,gBAIfzoD,KAAK0oD,SAAS,mDAEhB,MAGC1oD,KAAK0oD,SAAS,yCAEhB,EAIAA,SAAU,SAASN,GAClBpoD,KAAK2b,SAAU,EACf3b,KAAK+H,OAAQ,EACb/H,KAAKooD,aAAeA,CACrB,EAIAE,eAAgB,SAASt0C,GACxBhU,KAAKO,MAAM,cAAeyT,EAAWA,EAASzV,UAAO2C,EACtD,EAIAqnD,aAAc,SAASxgD,GAClBA,EAAMiM,UAAUzV,MAAMuV,OACzB9T,KAAK0oD,SAAS3gD,EAAMiM,SAASzV,KAAKuV,QAC1B/L,EAAMxJ,MAAMk9B,QACpBz7B,KAAK0oD,SAAS3gD,EAAMxJ,KAAKk9B,SAEzBz7B,KAAK0oD,SAAS3gD,EAAM0zB,QACtB,EAIAgtB,eAAgB,WACfzoD,KAAK2b,SAAU,CAChB,GAED1Y,SAAU,0RClGL0lD,GAA8B,8BAKpC,IAAAC,GAAe,CACdlqD,MAAO,CACNmqD,QAAS,CACRjqD,KAAMW,MACNR,QAAS,IAEV+pD,QAAS,CACRlqD,KAAMW,MACNR,QAAS,IAEVgqD,OAAQ,CACPnqD,KAAMW,MACNR,QAAS,KAGXc,MAAO,CACNmpD,aAAc,CAAC,YACfC,kBAAmB,CAAC,gBACpBhrC,iBAAkB,CAAC,qBAEpB1f,KAAM,WACL,MAAO,CACN2qD,cAAe,GAEjB,EACA5kD,SAAU,CACTgkC,KAAAA,GACC,OAAOtoC,KAAK8oD,QAAQjjD,OAAO,CAACwB,EAAE8hD,KAC7B,IAAIvqD,EAAOuqD,EAAEvqD,KAAKiiC,cAgBlB,OAfIjiC,EAAKkL,QAAQ,QAAU,EAC1BzC,EAAE8hD,EAAE7qD,MAAQ,UAEZM,EAAKkL,QAAQ,YAAc,GAC3BlL,EAAKkL,QAAQ,SAAW,GACxBlL,EAAKkL,QAAQ,WAAa,EAE1BzC,EAAE8hD,EAAE7qD,MAAQ,OAEZM,EAAKkL,QAAQ,cAAgB,GAC7BlL,EAAKkL,QAAQ,SAAW,EAExBzC,EAAE8hD,EAAE7qD,MAAQ,OAEZ+I,EAAE8hD,EAAE7qD,MAAQ,GACN+I,GACL,CAAA,EACJ,GAED2G,MAAO,CACN+6C,MAAAA,CAAOpmB,GACN3iC,KAAKkpD,cAAgBvmB,CACtB,GAED7iC,QAAS,CACRkpD,YAAAA,CAAaxkD,GACZxE,KAAKO,MAAM,eAAgBiE,EAAI4kD,cAAcnqD,MAC9C,EACAgqD,iBAAAA,GACC,MAAMI,EAAiBrpD,KAAKkpD,cAAcz/C,OAAO6K,GAAMA,EAAGhW,MAAQqqD,IAC9DU,EAAe5/C,OAAO6K,GAAsB,IAAhBA,EAAG9F,WAAiBrI,OACnD8V,MAAM,sCAENjc,KAAKO,MAAM,oBAAqB8oD,EAClC,EACAC,QAAAA,CAAS9kD,GACRxE,KAAKkpD,cAAc5iD,KAAK,CACvBhI,KAAMqqD,IAER,EACAY,WAAAA,CAAYziD,GACX9G,KAAKkpD,cAAcltC,OAAOlV,EAAO,EAClC,GAED7D,SAAU,+zJC3EXumD,GAAe,CACd9qD,MAAO,CACNqqD,OAAQxpD,MACRkqD,SAAU,CACT7qD,KAAMW,MACNR,QAAS,IAEV2qD,MAAO,CACN9qD,KAAMY,OACNT,QAAS,CAAA,IAGXc,MAAO,CACNK,KAAM,CAAC,aACPC,KAAM,CAAC,cAER5B,KAAM,WACL,MAAO,CACNorD,eAAgB,GAElB,EACA37C,MAAO,CACNy7C,QAAAA,CAAS9mB,GACR3iC,KAAK2pD,eAAiBhnB,CACvB,GAED7iC,QAAS,CACRO,MAAAA,CAAOmiC,IACoC,GAAtCxiC,KAAK2pD,eAAe7/C,QAAQ04B,IAE/BxiC,KAAK2pD,eAAe3tC,OAAOhc,KAAK2pD,eAAe7/C,QAAQ04B,GAAQ,GAC/DxiC,KAAKO,MAAM,OAAQiiC,KAInBxiC,KAAK2pD,eAAerjD,KAAKk8B,GACzBxiC,KAAKO,MAAM,OAAQiiC,GAErB,GAEDv/B,SAAU,meC3CX,MAAM2mD,GAAgB,CACrBC,UAAW,gBACXC,KAAM,gBACNC,IAAK,cACLtpB,KAAM,eACNupB,KAAM,UACNC,IAAK,eAEAC,GAAiB,CACtBL,UAAW,wBACXC,KAAM,mBACNC,IAAK,kBACLtpB,KAAM,mBACNupB,KAAM,mBACNC,IAAK,oBAON,IAAAE,GAAe,CACdzrD,MAAO,CACN0rD,UAAW5qD,OACXiD,OAAQ,CACP7D,KAAM,CAACC,QAASC,OAAQwE,SAAU/D,MAAOC,QACzCT,SAAS,GAEVsrD,UAAW,CAACvrD,OAAQS,MAAOC,SAE5B8E,SAAU,CACTgmD,aAAAA,GACC,IAAKtqD,KAAKyC,OACT,OAAO,EAER,IAAIA,EAASzC,KAAKyC,OAElB,GAAIA,aAAkBa,SACrB,MAAO,CAACb,GAET,GAAe,OAAXA,EACH,MAAO,GAQR,IANoB,IAAhBzC,KAAKyC,SACRA,EAAS,CAAC,QAEoC,oBAA3CjD,OAAO0V,UAAUC,SAASC,KAAK3S,KAClCA,EAASA,EAAOqiC,MAAM,MAED,iBAAXriC,IAAwBlD,MAAM4I,QAAQ1F,GAAS,CACzD,IAAI8nD,EAAY,GAChB,IAAK,IAAI5zC,KAAKlU,EAAQ,CACrB,IAAmB7D,EAAf6I,EAAIhF,EAAOkU,GAEVlP,IAGqC,oBAAtCjI,OAAO0V,UAAUC,SAASC,KAAK3N,GAErB,QADb7I,EAAOoB,KAAKwqD,sBAAsB/iD,IAEjC8iD,EAAUjkD,KAAK,CACd6iC,KAAM,YAAcygB,GAAchrD,GAClCwqC,MAAO3hC,IAAMkP,EAAIuzC,GAAetrD,GAAQ+X,EACxC8zC,UAAW7rD,IAIA,QADZA,EAAOoB,KAAKwqD,sBAAsB7zC,IAEjC4zC,EAAUjkD,KAAK,CACd6iC,KAAM,YAAcygB,GAAchrD,GAClCwqC,MAAO3hC,EACPgjD,UAAW7rD,IAGZqd,MAAM,WAAatF,EAAI,QAAUlP,EAAI,sCAGhB,iBAANA,GAAmBlI,MAAM4I,QAAQV,GAiBrC,QADb7I,EAAOoB,KAAKwqD,sBAAsB7zC,IAEjC4zC,EAAUjkD,KAAK,CACd6iC,KAAM,YAAcygB,GAAchrD,GAClCwqC,MAAO8gB,GAAetrD,GACtB6rD,UAAW7rD,IAGZqd,MAAMtF,EAAI,0CAtBE,QADb/X,EAAOoB,KAAKwqD,sBAAsB7zC,UAEbzV,IAAhBuG,EAAEgjD,YACLhjD,EAAEgjD,UAAY7rD,QACCsC,IAAZuG,EAAE2hC,QACL3hC,EAAE2hC,MAAQ8gB,GAAetrD,SACXsC,IAAXuG,EAAE0hC,OACL1hC,EAAE0hC,KAAOygB,GAAchrD,IACxB2rD,EAAUjkD,KAAKmB,UAECvG,IAAZuG,EAAE2hC,QACL3hC,EAAE2hC,MAAQzyB,GACX4zC,EAAUjkD,KAAKmB,IAclB,CACAhF,EAAS8nD,CACV,CAEA,GAAIhrD,MAAM4I,QAAQ1F,GAClB,CA4BC,GA3BAA,EAASA,EAAO6F,IAAIgM,IACnB,GAA2C,oBAAvC9U,OAAO0V,UAAUC,SAASC,KAAKd,GAA2B,CAC7D,IAAIm2C,EAAYzqD,KAAKwqD,sBAAsBl2C,GAC3C,OAAkB,OAAdm2C,EACI,KACD,CACNthB,KAAM,YAAcygB,GAAca,GAClCrhB,MAAO8gB,GAAeO,GACtBA,YAEF,CAEA,GAAIn2C,aAAchR,SACjB,MAAO,CACNmnD,UAAWn2C,GAGb,GAAkB,iBAAPA,IAAoB/U,MAAM4I,QAAQmM,IAAc,OAAPA,EAAa,CAChE,GAAIA,EAAGm2C,qBAAqBnnD,SAC3B,OAAOgR,EACR,GAAItU,KAAK0qD,sBAAsBp2C,EAAGm2C,WACjC,OAAOn2C,CACT,CAEA,OAAO,OACL7K,OAAO6K,GAAa,OAAPA,GAEZ7R,EAAO0D,OAAS,EACnB,OAAO1D,EAER,GAAIA,EAAOgH,OAAO6K,GAAMA,EAAG80B,OAAS90B,EAAG60B,MAAMhjC,QAAU1D,EAAO0D,OAC7D,OAAO1D,EAERwZ,MAAM,mBACP,CAEA,MAAO,EACR,GAEDnc,QAAS,CACR0qD,qBAAAA,CAAsBt6C,GACrB,IAAIy6C,EAAUz6C,EAAM2wB,cAEpB,MAAe,aAAX8pB,EACI,YAEJ,CAAC,OAAQ,MAAO,OAAQ,OAAQ,OAAOzrD,SAASyrD,GAC5CA,EAED,IACR,EACAD,qBAAAA,CAAsBx6C,GACrB,IAAIu6C,EAAYzqD,KAAKwqD,sBAAsBt6C,GAC3C,IAAKu6C,EAEJ,OADAxuC,MAAM/L,EAAQ,uCACP,EAER,GAAiB,QAAbu6C,IACErxC,OAAOwxC,KAEX,OADA3uC,MAAM,4BACC,EAGT,GAAiB,OAAbwuC,EAAoB,CACvB,IAAKrxC,OAAOyxC,MAEX,OADA5uC,MAAM,6BACC,EAGR,IADU,IAAI4uC,MAAMC,MAAM,CAAA,GACjBC,UAER,OADA9uC,MAAM,sCACC,CAET,CACA,OAAO,CACR,EACA+uC,QAAAA,CAASvoD,GACRzC,KAAKoqD,UAAUY,SAASvoD,EAAOgoD,UAAWhoD,EAAOqU,KAAMrU,EAAO3B,QAC/D,GAEDmC,SAAU,4pCC/MX,MAAMgoD,GAAiB,IAAIC,QAE3B,IAAAC,GAAe,CACd3qD,OAAAA,CAAQ8T,EAAIwyB,GACX,IAAI3P,GAAO,EACX8zB,GAAez/C,IAAI8I,EAAI9P,IACtB,IAAK2yB,EACJ,OAED,GAAI7iB,EAAG/B,SAAS/N,EAAIC,QACnB,OAED,MAAM2mD,EAAW1qD,UAAUu+B,SAASosB,YAAY/2C,GAC5C82C,GACHA,EAASlrD,SAEXoU,EAAGiF,iBAAiB,oBAAqB,KACxC4d,GAAO,IAER7iB,EAAGiF,iBAAiB,mBAAoB,KACvC4d,GAAO,IAER70B,SAASiX,iBAAiB,QAAS0xC,GAAe1/C,IAAI+I,IAAK,EAC5D,EACAtS,aAAAA,CAAcsS,EAAIwyB,GACjBxkC,SAAS8nC,oBAAoB,QAAS6gB,GAAe1/C,IAAI+I,WAClDA,EAAGg3C,uBACX,GClBclyC,OAAOmyC,WAAWC,aAAa,SAAU,QAAS,CAChEC,oBAAAA,CAAqB3C,EAAS4C,GAC7B,IAAIC,EAAY,EAChBC,EAAa5rD,KAAK6rD,MAAMC,WAAWjlB,QAAQn2B,YAC3Cq7C,EAAM,EACNC,GAAU,EAEVlD,EAAQliD,QAAQ,CAACqlD,EAAQtmD,KACnBsmD,EAAOC,YACXD,EAAOE,qBAGJnsD,KAAK6rD,MAAM/qD,QAAQsrD,iBAAmBH,EAAOI,QAAQC,WAAWC,QAAUN,EAAOM,UAAYN,EAAOO,WAAWC,UAClHT,EAAUC,GAGPA,EAAOM,UACVZ,GAAaM,EAAOS,cAIlBV,GACHD,EAAMH,EAAaD,EAAYK,EAAQU,WAEnC1sD,KAAK6rD,MAAM/qD,QAAQsrD,kBAAoBpsD,KAAK6rD,MAAMc,UAAU,oBAAoB,KACnFX,EAAQY,SAAS,GACjB5sD,KAAK6rD,MAAMQ,QAAQD,iBAAiBzzC,UAGjCozC,EAAM,EACTC,EAAQY,SAASb,GAEjBC,EAAQG,qBAGLnsD,KAAK6rD,MAAM/qD,QAAQsrD,kBAAoBpsD,KAAK6rD,MAAMc,UAAU,oBAAoB,IACnF3sD,KAAK6rD,MAAMQ,QAAQD,iBAAiBzzC,QAGvC,IC/BD,IAAAk0C,GAAe,CACd5uC,iBAAiBC,IACT,CACN1D,OAAQ,OACRC,IAAK,2CACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBC,iBAAkBH,EAASG,oBAI9BC,mBAAmBJ,IACX,CACN1D,OAAQ,OACRC,IAAK,6CACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,YAItBC,kBAAkBN,IACV,CACN1D,OAAQ,OACRC,IAAK,4CACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBK,aAAcP,EAASO,gBAI1BC,eAAeR,IACP,CACN1D,OAAQ,OACRC,IAAK,yCACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,eAIzBC,kBAAkBV,IACV,CACN1D,OAAQ,OACRC,IAAK,4CACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBO,YAAaT,EAASS,eAIzBE,cAAcX,IACN,CACN1D,OAAQ,MACRC,IAAK,oCACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,WACrBG,SAAUL,EAASK,YAItBO,UAAUZ,IACF,CACN1D,OAAQ,MACRC,IAAK,oCACL5G,OAAQ,CACPsK,eAAgBD,EAASC,eACzBC,WAAYF,EAASE,eC3DrB0uC,GAAQ,EAKL,MAAMC,GAAiB,CAC7B5pD,WAAY,CACX2kD,iBACAc,gBACAY,iBACAW,kBAEDve,WAAY,CACXuf,sBAEDtrD,MAAO,CACN,aACA,YACA,aACA,cACA,kBAEDnB,MAAO,CACNsuD,aAAc1pD,SACdvC,MAAOjC,OACPmuD,YAAanuD,OACbouD,SAAU,CACTtuD,KAAMC,QACNE,SAAS,GAEVqf,WAAY,CACXxf,KAAME,QAEPquD,iBAAkB3tD,OAClB4tD,gBAAiB7tD,MACjB8tD,UAAWxuD,QACXyuD,eAAezuD,QACf0uD,OAAQ1uD,QACR2uD,kBAAmB1uD,OACnBksD,SAAU,CACTpsD,KAAM,CAACC,QAASC,OAAQwE,SAAU/D,MAAOC,QACzCT,SAAS,GAEV0uD,WAAY5uD,QACZ6uD,YAAa,CAAC5uD,OAAQS,MAAOC,QAC7BmuD,eAAgB9uD,QAChB+uD,YAAa9uD,OACb+uD,SAAU/uD,OAEVgvD,QAAShvD,OACTivD,cAAejvD,OACfkvD,UAAWnvD,QACXovD,iBAAkB,CACjBrvD,KAAMC,QACNE,SAAS,IAGXR,KAAM,WACL,MAAO,CACN2vD,KAAM,EAENC,WAAY,KACZC,cAAc,EACdrF,OAAQ,KACRsF,QAAS,KACTC,gBAAiB,KACjB3E,eAAgB,KAChBlrC,aAAc,KAEd8vC,iBAAkB,KAClBC,eAAgB,KAGhBC,kBAAkB,EAClBC,qBAAsB,KACtBC,2BAA4B,KAC5BC,qBAAsB,KAEtBC,YAAa,KAEbzE,UAAW,KACX0E,YAAY,EACZC,sBAAsB,EACtBC,aAAc,GACdC,YAAa,CACZ7nD,MAAM,EACN0hD,SAAS,EACTr/C,QAAQ,EACRylD,cAAc,EACd/oC,OAAO,EACPiO,MAAM,GAGT,EACA9vB,SAAU,CACT6qD,iBAAAA,GACC,OAAKnvD,KAAK+oD,QAAW/oD,KAAK2pD,eAEnB3pD,KAAK+oD,OAAOt/C,OAAOhE,QAAKzF,KAAK2pD,eAAe7/C,QAAQrE,IADnD,IAET,EACA2pD,YAAAA,GACC,OAAKpvD,KAAKquD,QAEHhzC,KAAKC,MAAMD,KAAK6f,UAAUl7B,KAAKquD,UAD9B,EAET,EACAgB,eAAAA,GACC,IAAItG,EAAS1tC,KAAKC,MAAMD,KAAK6f,UAAUl7B,KAAK+oD,UAAY,GACpDY,EAAiBtuC,KAAKC,MAAMD,KAAK6f,UAAUl7B,KAAK2pD,kBAAoB,GAEpEb,EAAU,KAOd,GAJI9oD,KAAKmtD,kBAAoBntD,KAAKmtD,iBAAiBzvB,eAAe,aACjEorB,EAAU9oD,KAAKmtD,iBAAiBrE,UAG5BvpD,MAAM4I,QAAQ2gD,IAAavpD,MAAM4I,QAAQ2gD,IAAYA,EAAQ3iD,OAAS4iD,EAAO5iD,OAClF,CACC2iD,EAAU,GAGV,IAAK,IAAItmB,KAASumB,EAClB,CAEC,IAAIkD,EAAS,CACZlrD,MAAOyhC,EACPA,MAAOA,GAIRypB,EAAOM,QAAU5C,EAAe7/C,QAAQ04B,IAAU,EAGlDsmB,EAAQxiD,KAAK2lD,EACd,CACD,MAIC,IAAK,IAAIqD,KAAOxG,EAKfwG,EAAI/C,QAAU5C,EAAe7/C,QAAQwlD,EAAI9sB,QAAU,IAAkC,GAA7BumB,EAAOj/C,QAAQwlD,EAAI9sB,OAEvE8sB,EAAI5xB,eAAe,eACtB4xB,EAAIC,UAAYD,EAAI/C,SAIvB,OAAOzD,CACR,EACA0G,oBAAAA,GACC,OAAKxvD,KAAK8uD,WAEH9uD,KAAKoqD,UAAUqF,aAAahmD,OAAO6lD,IACzC,IAAII,EAAMJ,EAAIK,gBACd,OAAQD,EAAIjD,QAAUiD,EAAI3uD,OAA0B,sBAAjB2uD,EAAIjF,YACrCniD,IAAIgnD,GAAOA,EAAIM,YAJV,EAKT,EACAC,UAAAA,GACC,OAAK7vD,KAAK8uD,WAEH9uD,KAAKoqD,UAAUqF,aAAa5pD,OAAO,CAAC0D,EAAK+lD,KAC/C/lD,EAAI+lD,EAAIM,YAAcN,EAAIK,gBAAgB5uD,MACnCwI,GACL,CAAA,GAJK,CAAA,CAKT,EACAumD,OAAAA,GACC,OAAK9vD,KAAKkuD,KAEH,IAAMluD,KAAKkuD,KADV,EAET,EACA6B,gBAAAA,GACC,IAAK/vD,KAAKqvD,kBAAoBrvD,KAAKsuD,gBAClC,MAAO,GACR,MAAM0B,EAAehwD,KAAKqvD,gBAAgBxpD,OAAO,CAACwB,EAAE8hD,KACnD9hD,EAAE8hD,EAAE3mB,OAAS2mB,EAAEpoD,MACRsG,GACL,CAAA,GACH,OAAOrH,KAAKsuD,gBAAgBhmD,IAAIgM,IAAE,IAASA,EAAQvT,MAAOivD,EAAa17C,EAAGhW,QAC3E,GAEDwB,QAAS,CACRmwD,WAAAA,GACKjwD,KAAKqtD,UACRrtD,KAAKoqD,UAAUzgB,UAEf3pC,KAAK8e,WACP,EACA,mBAAMoxC,GACL,IAAIvjD,EAAc,iCACd3M,KAAK+X,WACF/X,KAAK+X,GAAG4E,aAAa,MAC3BhQ,EAAc3M,KAAK+X,GAAGC,EAAE,2BAGpBhY,KAAKqtD,iBAEH,IAAIhsD,QAAQC,IACjB,MAAMid,EAAWnF,OAAOwsC,SAASuK,KAAO/2C,OAAOwsC,SAASuK,KAAK7Z,MAAM,GAAK,KAElE8Z,EAAqB7xD,IAC1ByB,KAAKqwD,cAAc9xD,GACnB+C,KAGgB,OAAbid,EACHve,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAU/tC,UAAUZ,IAC/C,KACAkyC,GAGDpwD,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAUhuC,cAAcX,IACnD,CAAEK,YACF6xC,KAMJ,IAAIjD,EAAmB,CACrBoD,OAAQ,uBACRC,gBAAgB,EAChBC,eAAe,CACdC,SAAS,GAEV/jD,cACAsiD,YAAajvD,KAAKivD,eACZjvD,KAAKmtD,kBAAoB,CAAA,GAmCjC,QAhCgCjsD,IAA5BisD,EAAiBh+C,aACWjO,IAA/BisD,EAAiB93C,gBACcnU,IAA/BisD,EAAiBn4C,YACjBm4C,EAAiBh+C,OAAS,KAGtBnP,KAAKqtD,UAITF,EAAiBrE,QAAQliD,QAAQ0oD,SACZpuD,IAAhBouD,EAAI/C,UACP+C,EAAI/C,SAAU,MALhBY,EAAiB5uD,KAAOyB,KAAKovD,aAC7BjC,EAAiBrE,QAAU9oD,KAAKqvD,kBAQ7BlC,EAAiBwD,YAAexD,EAAiBrE,SAAWqE,EAAiBrE,QAAQr/C,OAAO6K,GAAsB,gBAAhBA,EAAGm2C,WAA6BtkD,UACrInG,KAAK+uD,sBAAuB,GAEzB/uD,KAAK8tD,UAEJ9tD,KAAK+tD,gBAAeZ,EAAiByD,UAAW,GAEpDzD,EAAiBrmD,MAAQ9G,KAAK8tD,SAI/B9tD,KAAKoqD,UAAY,IAAImB,UACpBvrD,KAAKS,MAAMorD,MACXsB,GAGG5tD,MAAM4I,QAAQnI,KAAKotD,kBAAoBptD,KAAKotD,gBAAgBjnD,OAAS,EAGxE,IAAK,IAAI3B,KAAOxE,KAAKotD,gBACpBptD,KAAKoqD,UAAUyG,GAAGrsD,EAAIS,MAAOT,EAAI0J,SAEnClO,KAAKoqD,UAAUyG,GAAG,aAAc,KAAO7wD,KAAK8uD,YAAa,EAAM9uD,KAAKO,MAAM,gBAC1EP,KAAKoqD,UAAUyG,GAAG,sBAAuBtyD,IACxCyB,KAAKgvD,aAAezwD,IAIjByB,KAAK+tD,eAAiB/tD,KAAK8tD,SAC9B9tD,KAAKoqD,UAAUyG,GAAG,cAAetyD,IAChC,IAAIuyD,EAAW,GAGf,IAAK,IAAIC,EAAW,EAAGA,EAAWxyD,EAAK4H,OAAQ4qD,IAC/C,CACC,IAAIC,EAAQzyD,EAAKwyD,GAGbC,EAAMhxD,KAAK+tD,gBAGV/tD,KAAKgD,YAAYzE,EAAMyyD,IAAQF,EAASxqD,KAAKyqD,EAEnD,CAGA,IAAK,IAAIjrC,EAAU,EAAGA,EAAUgrC,EAAS3qD,OAAQ2f,IAGhDvnB,EAAKyd,OAAO80C,EAAShrC,GAAWA,EAAS,KAIxC9lB,KAAKqtD,WACRrtD,KAAKoqD,UAAUyG,GAAG,aAAc,KAC/B,MAAM3mD,EAAOlK,KAAKoqD,UAAUqF,aAC5BzvD,KAAK+oD,OAAS7+C,EAAK5B,IAAIgnD,GAAOA,EAAIM,YAClC5vD,KAAK2pD,eAAiBz/C,EAAKT,OAAO6lD,GAAOA,EAAI2B,aAAa3oD,IAAIgnD,GAAOA,EAAIM,YACrE5vD,KAAKoqD,UAAUtpD,QAAQmuD,YAAYC,cACtClvD,KAAKkxD,qBAKRlxD,KAAKoqD,UAAUyG,GAAG,eAAgBhI,IACjC7oD,KAAKouD,aAAevF,EAAQ1iD,OAAS,EACrCnG,KAAKO,MAAM,iBAAkBP,KAAKouD,eAEpC,EACA+C,eAAAA,GACKnxD,KAAKoqD,YACJpqD,KAAK8uD,WACR9uD,KAAKoxD,mBAELpxD,KAAKoqD,UAAUyG,GAAG,aAAc7wD,KAAKoxD,kBAExC,EACAA,gBAAAA,GACCpxD,KAAK+uD,qBAAuB/uD,KAAKmtD,iBAAiBwD,YAAc3wD,KAAKqvD,gBAAgB5lD,OAAO6K,GAAsB,gBAAhBA,EAAGm2C,WAA6BtkD,OAClInG,KAAKoqD,UAAUiH,WAAWrxD,KAAKqvD,iBAC/BrvD,KAAKoqD,UAAUzgB,QAAQ3pC,KAAKovD,cAC5BpvD,KAAKkxD,kBACN,EACAI,YAAAA,GAEuBtxD,KAAKoqD,UAAUmH,mBACrB3qD,QAAQ6C,IACvBzJ,KAAKoqD,UAAUoH,qBAAqB/nD,EAAO+4B,MAAO,MAEnDxiC,KAAKoqD,UAAUqH,cACfzxD,KAAKouD,cAAe,CACrB,EACA8C,gBAAAA,GAEyBlxD,KAAKoqD,UAAUmH,mBACvB3qD,QAAQ6C,IACvBzJ,KAAKoqD,UAAUoH,qBAAqB/nD,EAAO+4B,MAAO/4B,EAAOxK,QAE3D,EACA6f,SAAAA,GAC6B,OAAxB9e,KAAKwuD,eACRxuD,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAU/tC,UAAUZ,IAC/C,KACAle,KAAK0xD,QAGN1xD,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAUhuC,cAAcX,IACnD,CACCK,SAAUve,KAAKwuD,gBAEhBxuD,KAAK0xD,OAER,EACArB,aAAAA,CAAc9xD,GACbyB,KAAK6uD,YAActwD,EACnByB,KAAKmuD,WAAa5vD,EAAK4vD,WACvBnuD,KAAKquD,QAAU9vD,EAAK8vD,QACpBruD,KAAKsuD,gBAAkB/vD,EAAK+vD,gBAE5BtuD,KAAK+oD,OAASxqD,EAAKwqD,OACnB/oD,KAAK2pD,eAAiBprD,EAAKorD,eAC3B3pD,KAAKye,aAAe,GAEpB,IAAK,IAAI9Y,EAAI,EAAGA,EAAIpH,EAAK+vD,gBAAgBnoD,OAAQR,IAEhD,IAAK,IAAIoE,EAAI,EAAGA,EAAIxL,EAAKsqD,QAAQ1iD,OAAQ4D,IAExC,GAAIxL,EAAK+vD,gBAAgB3oD,GAAGrH,MAAQC,EAAKsqD,QAAQ9+C,GAAGzL,KACpD,CACC,IAAImL,EAASlL,EAAKsqD,QAAQ9+C,GAC1BN,EAAO7K,KAAOL,EAAK+vD,gBAAgB3oD,GAAG/G,KAEtCoB,KAAKye,aAAanY,KAAKmD,EAExB,CAGH,EAIAioD,MAAAA,CAAO19C,GACN,IAAIzV,EAAOyV,EAEXhU,KAAKqwD,cAAc9xD,IAGG,IAAlByB,KAAKktD,SAERltD,KAAK2xD,YAAYpzD,GAIjByB,KAAK4xD,gBAAgBrzD,GAEtByB,KAAKmxD,iBACN,EAIAQ,WAAAA,CAAYpzD,GACX,IAAIsqD,EAAUtqD,EAAK2uD,SAASrE,QACxBgJ,EAAkBtzD,EAAK2uD,SAAS2E,gBAChCC,EAAe,GAEnB,IAAK,IAAIC,EAAe,EAAGA,EAAelJ,EAAQ1iD,OAAQ4rD,IAC1D,CACC,IAAIhR,EAAO8H,EAAQkJ,GAAchR,KAErB,MAARA,IAAcA,EAAO,KAEzB+Q,EAAaA,EAAa3rD,QAAU,CACnCyG,GAAIi8C,EAAQkJ,GAAcC,UAC1BjR,KAAMA,EAAO8H,EAAQkJ,GAAcC,UACnC/E,YAAapE,EAAQkJ,GAAcE,KACnC7qD,KAAM2qD,EACNG,YAAalyD,KAAKmyD,qBAEpB,CAEA,IAAK,IAAIJ,EAAe,EAAGA,EAAeF,EAAgB1rD,OAAQ4rD,IAClE,CACC,IAAIhR,EAAO8Q,EAAgBE,GAAchR,KAE7B,MAARA,IAAcA,EAAO,KAEzB+Q,EAAaA,EAAa3rD,QAAU,CACnCyG,GAAIilD,EAAgBE,GAAcC,UAClCjR,KAAMA,EAAO8Q,EAAgBE,GAAcC,UAC3C/E,YAAa4E,EAAgBE,GAAcE,KAC3CG,qBAAsBP,EAAgBE,GAAcK,qBACpDC,mBAAoBR,EAAgBE,GAAcM,mBAClDC,mBAAoBT,EAAgBE,GAAcO,mBAClDlrD,KAAM2qD,EACNG,YAAalyD,KAAKmyD,qBAClBI,qBAAsBvyD,KAAKwyD,0BAE7B,CAEAxyD,KAAKuuD,iBAAmBuD,EAExB9xD,KAAKO,MACJ,aACA,CACCwgD,KAAM,IACNkM,YAAa,UACb9jB,KAAM,SACNspB,SAAUX,GAGb,EAIAF,eAAAA,CAAgBrzD,GACf,IAAIsqD,EAAUtqD,EAAK2uD,SAASrE,QACxBgJ,EAAkBtzD,EAAK2uD,SAAS2E,gBAChCC,EAAe,GAEnB,IAAK,IAAIC,EAAe,EAAGA,EAAelJ,EAAQ1iD,OAAQ4rD,IAE9ClJ,EAAQkJ,GAAchR,KAIjC+Q,EAAaA,EAAa3rD,QAAU,CACnCyG,GAAIi8C,EAAQkJ,GAAcC,UAC1BU,OAAQ7J,EAAQkJ,GAAcC,UAC9B/E,YAAapE,EAAQkJ,GAAcE,MAIrC,IAAK,IAAIF,EAAe,EAAGA,EAAeF,EAAgB1rD,OAAQ4rD,IAEtDF,EAAgBE,GAAchR,KAIzC+Q,EAAaA,EAAa3rD,QAAU,CACnCyG,GAAIilD,EAAgBE,GAAcC,UAClCU,OAAQb,EAAgBE,GAAcC,UACtC/E,YAAa4E,EAAgBE,GAAcE,MAI7CjyD,KAAKuuD,iBAAmBuD,CACzB,EAIAxB,cAAAA,CAAetI,EAAaC,EAAuB0K,GAElD3yD,KAAK0uD,qBAAuB1G,EAGC,MAAzBC,IAA+BA,EAAwB,CAAA,GAG3DA,EAAsB9pC,eAAiB7K,2BAA2BurB,YAAc,IAAMvrB,2BAA2BwrB,cACjHmpB,EAAsB7pC,WAAape,KAAKoe,WAEpCpe,KAAK6tD,WACR5F,EAAsB9pC,gBAAkB,IAAMne,KAAK6tD,UAGpD7tD,KAAK2uD,2BAA6B1G,EAElCjoD,KAAK4uD,qBAAuB+D,GAGF,IAA1B3yD,KAAKyuD,iBAA4BzuD,KAAKyuD,kBAAmB,EAAQzuD,KAAKyuD,kBAAmB,CAC1F,EAQAmE,uBAAAA,CAAwBv0C,GACvBre,KAAKwuD,eAAiB,KAEtBxuD,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAU5uC,iBAAiBC,IACtD,CACCG,oBAEDre,KAAK8e,UAEP,EAIA0zC,yBAAAA,CAA0BvtD,GACzB,IAAIsZ,EAAWtZ,EAAMmkD,cAAczkD,aAAa,QAAQgiC,UAAU,GAC9DpoB,IAAave,KAAKwuD,iBACrBxuD,KAAKwuD,eAAiB,MAEvBxuD,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAUvuC,mBAAmBJ,IACxD,CACCK,SAAUA,GAEXve,KAAK8e,UAEP,EAKAqzC,qBAAsB,SAASltD,GAE9B,IAAIsZ,EAAW,KAGXs0C,EAAO5tD,EAAMmkD,cAAczkD,aAAa,QAK3C4Z,EAFW,MAARs0C,EAEQ5tD,EAAMmkD,cAAcnqD,MAIpB4zD,EAAKlsB,UAAU,GAG3B3mC,KAAKgpD,aAAazqC,EACnB,EACAyqC,YAAAA,CAAazqC,GACZve,KAAKwuD,eAAiBjwC,EACtBve,KAAK8e,WACN,EACAmqC,iBAAAA,CAAkBxqC,GACjBze,KAAKwuD,eAAiB,KACtBxuD,KAAKswD,eACJpyC,GAAYle,KAAK+c,KAAK3H,KAAKy3C,GAAUruC,kBAAkBN,IACvD,CACCO,gBAEDze,KAAK8e,UAEP,EAGA9b,WAAAA,CAAYzE,EAAMyyD,GAEjB,IAAI8B,EAAW9B,EAAMhxD,KAAK+tD,eAG1B,IAAK,IAAIgF,EAAY,EAAGA,EAAYx0D,EAAK4H,OAAQ4sD,IACjD,CACC,IAAInuD,EAASrG,EAAKw0D,GAGlB,GAAInuD,EAAO5E,KAAK8tD,UAAYgF,EAS3B,OANKluD,EAAOouD,YAAWpuD,EAAOouD,UAAY,IAGrCpuD,EAAOouD,UAAU9zD,SAAS8xD,IAAQpsD,EAAOouD,UAAU1sD,KAAK0qD,IAGtD,EAGCpsD,EAAOouD,WAAWhzD,KAAKgD,YAAY4B,EAAOouD,UAAWhC,EAC/D,CAGA,OAAO,CACR,GAEDiC,YAAAA,IACMjzD,KAAKqtD,YAAcrtD,KAAKoe,YAC5BnC,MAAM,qDACR,EACArF,OAAAA,IACK5W,KAAKktD,UAAcltD,KAAKkzD,OAAOlG,cAAkBhtD,KAAKkzD,OAAOlG,wBAAwB1pD,UACxF2Y,MAAM,4DACPjc,KAAKkuD,KAAOpB,KACZ9sD,KAAKO,MAAM,cAAeP,KAAKkuD,KAChC,EACA1tD,OAAAA,GACCR,KAAKkwD,gBAAgBttD,KAAK,KACpB5C,KAAKqtD,YACTrtD,KAAKwuD,eAAiBp1C,OAAOwsC,SAASuK,KAAO/2C,OAAOwsC,SAASuK,KAAK7Z,MAAM,GAAK,KAC7Et2C,KAAK0xD,OAAO1xD,KAAK6uD,eAIpB,EACA5rD,SAAU,4wICrqBX,IAAAkwD,GAAe,CACXz0D,MAAO,CACHH,KAAMiB,OACNuB,MAAO,CAAEnC,KAAME,SAEnBP,KAAIA,KACO,CAAA,GAEXqY,OAAAA,GAEA,EACA3T,SAAkB,g+BCXtBmwD,GAAe,CACd10D,MAAO,CACNH,KAAM,CACLK,KAAME,SAGRP,KAAIA,KACI,CAAA,GAER0E,SAAkB,qKCTnBowD,GAAe,CAEd30D,MAAO,CACNH,KAAM,CACLK,KAAME,QAEPiC,MAAO,CACNnC,KAAME,OACNmY,UAAU,GAEXq8C,OAAQ,CACP10D,KAAMC,QACNE,SAAS,IAGXe,QAAS,CACRyzD,aAAc,WACbvzD,KAAKwzD,cAAe,CACrB,EACAC,aAAc,WACbzzD,KAAKwzD,cAAe,CACrB,GAEDj1D,KAAIA,KACI,CACNi1D,cAAc,IAGhBvwD,SAAmB,26CC5BpBywD,GAAe,CACXh1D,MAAM,CACFH,KAAKiB,OACL88C,KAAKx9C,OACL60D,mBAAmB,CACf/0D,KAAKC,QACLE,SAAQ,IAGhBR,KAAIA,KACM,CAAA,GAEVqY,OAAAA,GAEA,EACA3T,SAAiB,upECfrB2wD,GAAc,CACVl1D,MAAM,CACF49C,KAAKx9C,OACLP,KAAKiB,QAETjB,KAAIA,KACO,CAAA,GAIXqY,OAAAA,GAEA,EACA3T,SAAiB,qwDCbrB4wD,GAAe,CACdt1D,KAAIA,KACI,CAAA,GAERG,MAAO,CACNqC,MAAO,CACNnC,KAAME,OACNmY,UAAU,GAEX1Y,KAAM,CACLK,KAAMW,QAGR0D,SAAmB,y3BCbpB6wD,GAAe,CACdv1D,KAAIA,KACI,CAAA,GAERG,MAAO,CACNH,KAAM,CACLK,KAAMY,QAEPuB,MAAO,CACNnC,KAAME,SAGRmF,OAAQ,CAEP8gB,eAAkB,CACjBhT,KAAM,iBACNhT,SAAS,IAGXuF,SAAU,CACTyvD,kBAAAA,GACC,OAA2B,IAAxB/zD,KAAK+kB,eACA,GAED/kB,KAAKzB,KAAKy1D,QAAQ/0D,OAASe,KAAKzB,KAAK4lB,SAASllB,OAASe,KAAKzB,KAAKmsB,UAAUzrB,MAAQqU,2BAA2BC,SAClH,kCAAkCvT,KAAK+kB,eAAe,QAAU/kB,KAAKzB,KAAKmsB,SAASzrB,MACnF,YAAce,KAAKzB,KAAK4lB,QAAQllB,MAAQ,QAAUe,KAAKzB,KAAKy1D,OAAO/0D,MAAQ,EAC/E,EACAg1D,mBAAAA,GACC,OAA2B,IAAxBj0D,KAAK+kB,eACA,GAED/kB,KAAKzB,KAAK4lB,SAASllB,OAASe,KAAKzB,KAAKmsB,UAAUzrB,MAAQqU,2BAA2BC,SACvF,kCAAkCvT,KAAK+kB,eAAe,QAAU/kB,KAAKzB,KAAKmsB,SAASzrB,MACnF,YAAce,KAAKzB,KAAK4lB,QAAQllB,MAAQ,EAC5C,EACAi1D,oBAAAA,GACC,OAA2B,IAAxBl0D,KAAK+kB,eACA,GAED/kB,KAAKzB,KAAKmsB,UAAUzrB,MAAQqU,2BAA2BC,SAC3D,kCAAkCvT,KAAK+kB,eAAe,QAAU/kB,KAAKzB,KAAKmsB,SAASzrB,MAAQ,EAC/F,GAED2X,OAAAA,GACC,EAED3T,SAAU,otEC9BXkxD,GAAe,CAEdC,cAAAA,CAAev5C,GACd,IAAIJ,EAAM,yCAIV,OAHGI,IACFJ,GAAO,IAAII,KAEL,CACNL,OAAQ,MACRC,IAAKA,EAEP,EACA8G,WAAWtiB,IACH,CACNub,OAAQ,MACRC,IAAK,sCAAsCxb,MAI7CuiB,UAAU3G,IAEF,CACNL,OAAQ,MACRC,IAAK,oCACL5G,OAAQ,CAAEgH,SAGZ4G,cAAc5G,IACN,CACNL,OAAQ,MACRC,IAAK,yCAAyCI,MAGhD6G,kBAAiBA,KAET,CACNlH,OAAQ,MACRC,IAAK,8CAGPkH,kBAAiBA,KAET,CACNnH,OAAQ,MACRC,IAAK,8CAGPmH,aAAYA,CAACC,EAAQC,KACb,CACNtH,OAAQ,MACRC,IAAK,wCAAwCoH,KAAUC,MAIzDC,eAAcA,KACN,CACNvH,OAAQ,MACRC,IAAK,4CCxER45C,GAAe,CACdlxD,WAAY,CACXmxD,QCJa,CACdz0D,MAAO,CACN,UAEDnB,MAAO,CACN0mB,WAAY,CACXxmB,KAAM,CAACg8B,KAAMp7B,QACbyX,UAAU,IAGZ1Y,KAAIA,KACI,CACNg2D,QAAS,KAGXvmD,MAAO,CACNoX,UAAAA,CAAWud,GACI,8BAAVA,EAAE/jC,MACL+jC,EAAE+B,OAAO9hC,KAAKX,IACb,MAAM+X,EAAMqB,KAAKC,MAAMrZ,GACvBjC,KAAKu0D,QAAUv6C,EAAIu6C,SAAW,IAGjC,GAEDtxD,SAAU,wdDnBVpD,MAAO,CACN,qBAEDnB,MAAO,CACN0mB,WAAY,CACXxmB,KAAM,CAAE+7B,SAAUp7B,OAClB0X,UAAU,GAEXu9C,SAAU31D,QACV+N,GAAI9N,OACJR,KAAMQ,OACN21D,WAAY,CAAC31D,OAAQS,MAAOC,QAC5Bk1D,OAAQ71D,QACR0hC,OAAQ,CACP3hC,KAAME,OACNC,QAAS,IAEV41D,SAAU,CACT/1D,KAAMC,QACNE,SAAS,IAGXe,QAAS,CACR80D,cAAc99C,GACNuE,KAAK6f,UAAU,CACrB25B,aAAc/9C,EAAK+9C,aACnBC,iBAAkBh+C,EAAKg+C,iBACvBx2D,KAAMwY,EAAKxY,KACX62B,KAAMre,EAAKqe,KACXv2B,KAAMkY,EAAKlY,OAGbm2D,QAAAA,CAAS9vD,GACR,IAAKjF,KAAKw0D,SACT,OAAOx0D,KAAKO,MAAM,oBAAqB0E,EAAMR,OAAOuwD,OAErD,MAAMC,EAAK,IAAIC,aACTC,EAAU,GAChB,IAAK,IAAIr+C,KAAQ9W,KAAKolB,WACrB6vC,EAAG7qD,MAAM7D,IAAIuQ,GACbq+C,EAAQ7uD,KAAKtG,KAAK40D,cAAc99C,IAEjC,IAAK,IAAIA,KAAQ7R,EAAMR,OAAOuwD,MAEzBG,EAAQrrD,QAAQ9J,KAAK40D,cAAc99C,IAAS,GAC/Cm+C,EAAG7qD,MAAM7D,IAAIuQ,GAEf9W,KAAKO,MAAM,oBAAqB00D,EAAGD,MACpC,EACAI,UAAAA,CAAWxoD,GACV,MAAMyoD,EAAe91D,MAAMwS,KAAK/R,KAAKolB,YAAYxY,GAE3CqoD,EAAK,IAAIC,aACf,IAAK,IAAIp+C,KAAQ9W,KAAKolB,WACjBtO,IAASu+C,GACZJ,EAAG7qD,MAAM7D,IAAIuQ,GAEf9W,KAAKO,MAAM,oBAAqB00D,EAAGD,MACpC,GAEDhnD,MAAO,CACNoX,UAAAA,CAAWud,GACV,IAAKA,EACJ,OACD,GAAIA,aAAahI,SAAU,CAC1B,IAAK36B,KAAKS,MAAM60D,OACf,OAED,OAAOt1D,KAAKS,MAAM60D,OAAON,MAAQryB,CAClC,CAEA,MAAMsyB,EAAK,IAAIC,aAEf,IAAK,IAAIp+C,KAAQ6rB,EAChB,GAAI7rB,aAAgB8jB,KACnBq6B,EAAG7qD,MAAM7D,IAAIuQ,OACP,CACN,MAAMy+C,EAAU,IAAI36B,KAAK,CAACvf,KAAK6f,UAAUpkB,IAAQA,EAAKxY,KAAM,CAC3DM,KAAM,+BAEPq2D,EAAG7qD,MAAM7D,IAAIgvD,EACd,CAEDv1D,KAAKO,MAAM,oBAAqB00D,EAAGD,MACpC,GAED/xD,SAAU,gqBE3EXuyD,GAAe;;AAEdvzC,UAASA,KACD,CACNzH,OAAQ,MACRC,IAAK,4CAGPyH,SAAQA,KACA,CACN1H,OAAQ,MACRC,IAAK,2CAGP0H,oBAAmBA,EAACC,iBAACA,EAAgBvH,IAAEA,EAAGwH,eAAEA,EAAcC,MAAEA,EAAKC,iBAAEA,MAC3D,CACN/H,OAAQ,OACRC,IAAK,oDACL5G,OAAQ,CACPuO,mBACAvH,MACAwH,iBACAC,QACAC,sBAIHC,kBAAiBA,EAACJ,iBAACA,EAAgBvH,IAAEA,EAAGyH,MAAEA,EAAKD,eAAEA,MACzC,CACN7H,OAAQ,OACRC,IAAK,kDACL5G,OAAQ,CACPuO,mBACAvH,MACAyH,QACAD,oBAIHI,WAAUA,CAACC,EAAKC,EAAU,QAClB,CACNnI,OAAQ,OACRC,IAAK,4CAA4CkI,IACjD9O,OAAQ6O,IAGV+yC,iBAAiB/yC,IACT,CACNlI,OAAQ,OACRC,IAAK,iDACL5G,OAAQ6O,IAGVgzC,8BAA8BjsD,IAEtB,CACN+Q,OAAQ,MACRC,IAAK,+DAHyB,KAAXhR,EAAiB,IAAM8a,mBAAmB9a,GAAU,MAMzEmZ,sBAAsBC,IACd,CACNrI,OAAQ,MACRC,IAAK,uDAAuDoI,MAG9DC,oBAAmBA,CAACjI,EAAM,KAAMjO,EAAK,QAC7B,CACN4N,OAAQ,MACRC,IAAK,oDACL5G,OAAQ,IACHgH,EAAM,CAAEA,OAAQ,MAChBjO,EAAK,CAAEA,MAAO,CAAA,KAIrBmW,oBAAmBA,CAACT,EAAOvJ,EAASiK,EAAS,QACrC,CACNxI,OAAQ,OACRC,IAAK,oDACL5G,OAAQ,CACPyO,QACAvJ,aACIiK,EAAS,CAAEA,UAAW,CAAA,KAI7BC,oBAAmBA,CAACX,EAAOvJ,EAASmK,EAAIF,EAAS,QACzC,CACNxI,OAAQ,OACRC,IAAK,oDACL5G,OAAQ,CACPyO,QACAvJ,UACAmK,QACIF,EAAS,CAAEA,UAAW,CAAA,KAI7BG,oBAAoBN,IACZ,CACNrI,OAAQ,OACRC,IAAK,oDACL5G,OAAQ,CAAEgP,gBCnHb8yC,GAAe,CACdp3D,KAAIA,KACI,CACNq3D,QAAS,KAGXzyD,WAAY,KACX0yD,GACAx3D,WAED+E,OAAQ,CAAC/E,GACTK,MAAO,CACNqlD,MAAO,CACNnlD,KAAME,QAEPk2D,MAAO,CACNp2D,KAAMW,OAEPu2D,SAAU,CACTl3D,KAAMC,SAEPwE,cAAeC,SACfC,gBAAiBD,SACjBE,uBAAwBF,SACxBG,cAAeH,SACfI,eAAgBJ,UAEjBxD,QAAQ,CACP,iBAAMi2D,GACL,GAAG/1D,KAAK41D,QAAQ,CACf,IAAIxkC,EAAW,IAAIoJ,SACnBpJ,EAAS4J,OAAO,UAAWh7B,KAAK41D,QAAQ,UAClC51D,KAAK+c,KACT3H,KAAKogD,GAAgBC,iBAAiBrkC,IACtCxuB,KAAM2G,IACNvJ,KAAKu7B,UAAUkE,aAAaz/B,KAAK+X,GAAGC,EAAE,SAAS,gBAC/ChY,KAAKxB,MAAM0B,QAEd,CAED,GAEDM,OAAAA,GACCR,KAAKxB,MAAQwB,KAAKS,MAAMkD,eAAenF,MACnCwB,KAAKg1D,QACRh1D,KAAK41D,QAAU51D,KAAKg1D,MAEtB,EACAp0D,KAAAA,CAAME,GAEJ,OADAzC,EAAQuC,MAAMiD,KAAK7D,MACZ3B,EAAQuC,MAAM,KAAME,EAC7B,EACAmC,SAAkB,4hCCtDnB+yD,GAAe,CACdt3D,MAAO,CACNqC,MAAO,CACNnC,KAAME,QAEPP,KAAM,CACLK,KAAMY,QAEPy2D,WAAW,CACVr3D,KAAMC,QACNE,SAAS,IAGXoE,WAAW,CACVwyD,gBAEDp3D,IAAAA,GACC,MAAO,CACN23D,WAAYl2D,KAAKzB,KAAK43D,YAExB,EACAt2D,MAAO,CAAC,uBACRoE,OAAO,CAAC,cAERnE,QAAS,CACRskD,SAAAA,GACCpkD,KAAKS,MAAM21D,YAAYj2D,MACxB,EACAk2D,oBAAAA,GAEMr2D,KAAKzB,MAGVyB,KAAK+c,KACH3H,KAAK++C,GAAU5yC,YAAYvhB,KAAKk2D,aAChCtzD,KAAK2G,IACLvJ,KAAKk2D,WAAa3sD,EAAIhL,KAAK43D,aAE9B,GAED7xD,SAAU,CACTgyD,qBAAsB,WACrB,OAAKt2D,KAAKzB,KAAKg4D,KAGR,0BAA4Bv2D,KAAKzB,KAAKg4D,KAFrC,EAGT,EACAj4D,KAAM,WACL,MAAO,CAACwjD,QAAS9hD,KAAKzB,KAAKi4D,QAASzU,SAAU/hD,KAAKzB,KAAKk4D,SACzD,EACAC,WAAY,WACX,IAAIntD,EAAM,CAAA,EACNotD,EAAwB,CAC3B,UACA,WACA,cACA,QAOD,OALAn3D,OAAO6M,KAAKrM,KAAKzB,MAAMqI,QAASsT,IAC1By8C,EAAsBz3D,SAASgb,KACnC3Q,EAAI2Q,GAAOla,KAAKzB,KAAK2b,MAGhB3Q,CACR,GAEDtG,SAAmB,kwGC9DpB2zD,GAAe,CACdt4D,KAAM,mBACN6E,WAAY,CACXywD,WACAiD,YCXa,CACbn4D,MAAO,CACLH,KAAMiB,QAGRjB,KAAIA,KACK,CACLu4D,cAAe,KACfC,qBAAsB,OAI1B9yD,OAAQ,CAAC,2BAETnE,QAAS,CACPk3D,YAAa,SAAU/xD,EAAOpB,GAE1B7D,KAAKzB,KAAKsF,GADC,eAATA,EACgBoB,EAAMR,OAAOwyD,QAGU,KAAvBhyD,EAAMR,OAAOxF,MAAe,KAAOgG,EAAMR,OAAOxF,MAEpEe,KAAKO,MAAM,eAAgBP,KAAKk3D,UAAYl3D,KAAKzB,KAAO,MACxDyB,KAAK+2D,qBAAuB/2D,KAAKm3D,yBACnC,GAGF7yD,SAAU,CACR8yD,2BAA4B,WAE7B,GAAI/7C,KAAKC,MAAMtb,KAAK82D,eAAeO,WACjC,OAAO,EAET,MAAMC,EAAyBt3D,KAAK+2D,qBAAqBttD,OAAQo9B,GACzDA,EAAQ0wB,aAAev3D,KAAKzB,MAAMg5D,YAGvC,OAAKv3D,KAAK+2D,qBAAqB3uD,KAAMy+B,GAAYA,EAAQjf,aAAe5nB,KAAKzB,KAAKqpB,YAG3E5nB,KAAKs3D,uBAAuBnxD,QAAU,GAAKnG,KAAKzB,KAAK84D,WAFnDr3D,KAAKzB,KAAK84D,YAAcC,EAAuBnxD,MAG1D,EACA+wD,UAAW,WAET,SAAKl3D,KAAKzB,KAAK+nB,UAAYtmB,KAAKzB,KAAKg5D,aAG9Bl8C,KAAK6f,UAAUl7B,KAAKzB,QAAUyB,KAAK82D,aAC5C,GAGFlgD,OAAAA,GACE5W,KAAK82D,cAAgBz7C,KAAK6f,UAAUl7B,KAAKzB,MACzCyB,KAAK+2D,qBAAuB/2D,KAAKm3D,yBACnC,EAEAl0D,SAEE,6rFD9CFywD,WACA8D,YETa,CACbr0D,WAAY,CACVs0D,aAAcr2D,SAASs2D,aAC1B7B,IAAKA,IAGJn3D,MAAO,CACLH,KAAMiB,OACNw1D,MAAO,CACLp2D,KAAMW,MACNR,QAAS,KAIbkF,OAAQ,CAAC,0BAA2B,eAAgB,iBAEpD1F,KAAIA,KACK,CACLo5D,UAAW,GACXC,eAAgB,GAChBC,eAAgB,KAChBC,aAAc,GACdhB,cAAe,KACfiB,qBAAsB,KACzBnC,QAAS,GACToC,cAAc,IAIfhqD,MAAO,CACL,gBAAiB,SAAUoxC,EAAU8I,GACnCloD,KAAKO,MAAM,eAAgBP,KAAKk3D,UAAYl3D,KAAKzB,KAAO,KAC1D,EACA,WAAY,SAAU6gD,EAAU8I,GAC9BloD,KAAKO,MAAM,eAAgBP,KAAKk3D,UAAYl3D,KAAKzB,KAAO,KAC1D,GAGFuB,QAAS,CAEPm4D,4BAA6B,SAAUhzD,GACrCjF,KAAK23D,UAAY33D,KAAK23D,UAAUrvD,IAAK4vD,GAAaA,EACpD,EAEAC,kCAAmC,SAAUlzD,GAC3CjF,KAAK43D,eAAiB53D,KAAK43D,eAAetvD,IAAK8vD,GAAcA,EAC/D,EAEAC,YAAa,WAGTr4D,KAAKzB,KAAKsjB,QACW,MAArB7hB,KAAKzB,KAAKsjB,QACV7hB,KAAKzB,KAAKuoB,KACV9mB,KAAKzB,KAAKuoB,IAAM,KAChB9mB,KAAKzB,KAAKuoB,IAAM,KAEhB9mB,KAAK+c,KACF3H,KAAK++C,GAAUvyC,aAAa5hB,KAAKzB,KAAKsjB,OAAQ7hB,KAAKzB,KAAKuoB,MACxDlkB,KAAM2G,IACDA,EAAIhL,KAAK4H,SACXnG,KAAK23D,UAAY,IACZ,IAAIW,IACL/uD,EAAIhL,KAAK+J,IAAKu+B,GACLA,EAAQvoC,QAIrB0B,KAAK43D,eAAiB,IACjB,IAAIU,IACL/uD,EAAIhL,KAAK+J,IAAKu+B,GACLA,EAAQ0xB,qBAO3Bv4D,KAAK23D,UAAY,EAErB,EAEAX,YAAa,SAAU/xD,EAAOpB,GAEf,mBAATA,EACF7D,KAAKzB,KAAKsF,GAAQoB,EAAMR,OAAOwyD,QACjB,UAATpzD,GACN7D,KAAK41D,QAAQzvD,OAAS,GAA8B,+BAAzBnG,KAAK41D,QAAQ,GAAGh3D,OAC5CoB,KAAKg4D,cAAe,GAEtBh4D,KAAKw4D,aAAax4D,KAAK41D,UAEnB51D,KAAKzB,KAAKsF,GAA+B,KAAvBoB,EAAMR,OAAOxF,MAAe,KAAOgG,EAAMR,OAAOxF,MAGpEe,KAAKO,MAAM,eAAgBP,KAAKk3D,UAAYl3D,KAAKzB,KAAO,MAExDyB,KAAK+3D,qBAAuB/3D,KAAKy4D,yBACnC,EAEHC,cAAe,WACd14D,KAAK41D,QAAU,GACf51D,KAAKg3D,YAAY,KAAM,QACxB,GAGC1yD,SAAU,CACRq0D,2BAA4B,WAG7B,OAAIt9C,KAAKC,MAAMtb,KAAK82D,eAAe8B,iBAI3B54D,KAAK+3D,qBAAqB74D,SAASc,KAAKzB,KAAKs6D,YAG3C74D,KAAK+3D,qBAAqB5xD,QAAU,GAAKnG,KAAKzB,KAAKq6D,eAFjD54D,KAAKzB,KAAKq6D,gBAAkB54D,KAAK+3D,qBAAqB5xD,OAGjE,EACA+wD,UAAW,WACT,KACGl3D,KAAKzB,KAAKu6D,SACV94D,KAAKzB,KAAKuoB,KACV9mB,KAAKzB,KAAK40B,KACVnzB,KAAKzB,KAAKm1B,KACa,IAAxB1zB,KAAK41D,QAAQzvD,QAEb,OAAO,EAIT,OADoBnG,KAAK82D,gBAAkBz7C,KAAK6f,UAAUl7B,KAAKzB,OACzCyB,KAAKg4D,YAC7B,GAGFphD,OAAAA,GAEE5W,KAAK+c,KACF3H,KAAK++C,GAAUpyC,kBACfnf,KAAK2G,IACJvJ,KAAK83D,aAAevuD,EAAIhL,KACxByB,KAAKq4D,gBAGTr4D,KAAK82D,cAAgBz7C,KAAK6f,UAAUl7B,KAAKzB,MACzCyB,KAAK+3D,qBAAuB/3D,KAAKy4D,yBACnC,EAEAj4D,OAAAA,GACMR,KAAKg1D,QACPh1D,KAAK41D,QAAU51D,KAAKg1D,MAExB,EAEA/xD,SAAmB,i3IFhJnB81D,OGTa,CACb51D,WAAY,CACVuwD,WACAE,YAEF3vD,OAAQ,CAAC,qBACT1F,KAAIA,KACK,CACLy2D,MAAO,OAGXl1D,QAAS,CACPk5D,gBAAiB,SAAUC,GACzB,OACE3lD,2BAA2BC,SAC3BD,2BAA2BE,UAC3B,0BAA0BylD,GAE9B,GAEF30D,SAAU,CACR40D,iBAAkB,WAChB,OACEl5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,qBACrCn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,gBACrCn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,kBAE9B,UAEPn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,qBACrCn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,gBACrCn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,kBAE9B,UAEA,YAEX,EACAC,WAAY,WACV,OACEp5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,oBACrCn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,kBAE9B,SAEPn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,gBACrCn5D,KAAKsiB,OAAStiB,KAAKm5D,kBAAkB,eAE9B,MAEA,QAEX,GAEFz6D,MAAO,CACLH,KAAM,CAAEK,KAAMY,QACd88C,KAAM,CAAE19C,KAAME,QACduqB,OAAQ,CAAEzqB,KAAME,QAChBujB,eAAgB,CAAEzjB,KAAME,QACxBu6D,iBAAkB,CAAEz6D,KAAME,QAC1Bg3D,SAAU,CAAEl3D,KAAMuL,QAClBmY,MAAO,CAAE1jB,KAAME,SAEjB8X,OAAAA,GACE5W,KAAK+c,KACF3H,KAAKogD,GAAgB5yC,sBAAsB5iB,KAAK81D,WAChDlzD,KAAM2G,IACLvJ,KAAKg1D,MAAQzrD,EAAIhL,MAEvB,EACA0E,SAAmB,gtDH5DnBq2D,kBIba,CACb/6D,KAAIA,KACK,CACLq3D,QAAS,GACTkB,cAAe,OAGnB3zD,WAAY,CACV0yD,IAAAA,IAEFn3D,MAAO,CACLH,KAAM,CACJK,KAAMY,QAER+5D,UAAW,CACT36D,KAAMC,QACNE,SAAS,GAEXi2D,MAAO,CACLp2D,KAAMW,OAERu2D,SAAU,CACRl3D,KAAMC,UAGVoF,OAAO,CAAC,gBACRK,SAAU,CACRk1D,eAAgB,WACdx5D,KAAKw4D,aAAax4D,KAAK41D,SACvB,IAAIrsD,GAAM,EAEV,OAAGvJ,KAAKg1D,OACNz1D,MAAMwS,KAAK/R,KAAK41D,SAAShvD,QAASkQ,IAC5B9W,KAAKg1D,MAAM5sD,KAAMvB,GAAMA,EAAEvI,OAASwY,EAAKxY,QACzCiL,GAAM,OAGDvJ,KAAK41D,QAAQzvD,QAAUnG,KAAKg1D,MAAM7uD,SAAWoD,KAI/ChK,MAAMwS,KAAK/R,KAAK41D,SAASzvD,MAEpC,EACAszD,cAAe,WACb,OAAOp+C,KAAK6f,UAAUl7B,KAAKzB,QAAUyB,KAAK82D,aAC5C,EACAI,UAAW,WACT,OAAIl3D,KAAKu5D,UACJv5D,KAAK81D,UACE91D,KAAKy5D,eAAiBz5D,KAAKw5D,iBAAmBx5D,KAAK41D,QAAQzvD,OAE9DnG,KAAKy5D,eAAiBz5D,KAAKw5D,eAE7Bx5D,KAAKy5D,aACd,GAEF55D,MAAO,CAAC,gBACRmO,MAAO,CAEL4nD,OAAAA,CAAQ32D,GACNe,KAAK05D,aACP,GAEF55D,QAAS,CACP80D,cAAc99C,GACRuE,KAAK6f,UAAU,CACrB25B,aAAc/9C,EAAK+9C,aACnBC,iBAAkBh+C,EAAKg+C,iBACvBx2D,KAAMwY,EAAKxY,KACX62B,KAAMre,EAAKqe,KACXv2B,KAAMkY,EAAKlY,OAGX86D,YAAa,WACP15D,KAAKk3D,UAEPl3D,KAAKO,MACH,eAAgB,CAAEtB,MAAOe,KAAKzB,KAAKU,QAGrCe,KAAKO,MAAM,eAAgB,KAE/B,GAEFC,OAAAA,GACER,KAAK82D,cAAgBz7C,KAAK6f,UAAUz5B,IAAIk4D,MAAM35D,KAAKzB,OAE/CyB,KAAKg1D,QACPh1D,KAAK41D,QAAU51D,KAAKg1D,MAExB,EACA/xD,SAAkB,88BJ7EnBgB,OAAQ,CAAC,oBAAqB,iBAC9BvF,MAAO,CACNwtB,KAAM1sB,OAGN21B,KAAM,CACLv2B,KAAMuL,OACNpL,QAAS,MAGV66D,UAAW,CACVh7D,KAAME,OACNmY,UAAU,GAEX+K,aAAcljB,OACdwjB,MAAOxjB,OACP+6D,WAAY/6D,QAEbe,MAAO,CAEN,sBAAyB,KACzB,eAAkB,KAClB,oBAAuB,KACvBi6D,OAAQ,KACRC,OAAQ,MAETx7D,IAAAA,GACC,MAAO,CACN+9C,KAAM,KACN/9C,KAAM,KACNy7D,gBAAiB,GACjBC,YAAaj6D,KAAKsiB,MAClB43C,WAAY,KAEd,EAEAp6D,QAAS,CACRq6D,QAAS,WACRn6D,KAAKs8C,KACJt8C,KAAKi6D,aAAej6D,KAAKm5D,kBAAkB,oBACxC,cACA,cAGJn5D,KAAKi6D,YACJj6D,KAAKi6D,aAAej6D,KAAKm5D,kBAAkB,oBACxCn5D,KAAKm5D,kBAAkB,eACvBn5D,KAAKm5D,kBAAkB,eAC3Bn5D,KAAKO,MAAM,eAAgBP,KAAKi6D,aAChCj6D,KAAKg6D,gBAAgB1zD,KAAKtG,KAAKi6D,aAC/Bj6D,KAAKO,MAAM,oBAAqBP,KAAKg6D,iBAErCh6D,KAAKzB,KACS,eAAbyB,KAAKs8C,KACF,CAED/1C,KAAK,EACLsyD,WAAY,KACZC,QAAS,KACTplC,IAAK,KACL5M,IAAK,KACLqM,IAAK,KACLylC,gBAAgB,GAEf,CAEDryD,KAAK,EACLqhB,WAAY,KACZ2vC,WAAY,KACZjxC,QAAS,KACT8zC,UAAW,KACX/C,YAAY,EAEhB,EAEAgD,WAAY,SAAUn2D,GAErBA,EAAK3F,KAAKynB,QAAS,EACnBhmB,KAAKO,MAAM,sBAAuB2D,EAAK3F,MAGvCyB,KAAKi6D,YAAcj6D,KAAKi6D,aAAej6D,KAAKm5D,kBAAkB,oBAC3Dn5D,KAAKm5D,kBAAkB,kBACvBn5D,KAAKm5D,kBAAkB,kBAC1Bn5D,KAAKO,MAAM,eAAgBP,KAAKi6D,aAChCj6D,KAAKO,MAAM,SACZ,EAEA+5D,iBAAkB,SAAUr1D,GAE3BjF,KAAKO,MAAM,sBAAuB0E,EACnC,EAEAs1D,cAAe,SAAUt1D,EAAOf,GAC/BlE,KAAKk6D,WAAah2D,EAClBlE,KAAKzB,KAAO2F,EAAK3F,KACjByB,KAAKs8C,KAAOp4C,EAAKo4C,KACbp4C,EAAKnD,OAERf,KAAKi6D,YAAc/1D,EAAKoe,MACxBtiB,KAAKO,MAAM,eAAgBP,KAAKi6D,aAGhCj6D,KAAKg6D,gBAAgB1zD,KAAKpC,EAAKnD,QAE3BmD,EAAK3F,KAAKg5D,YACbv3D,KAAKg6D,gBAAgB1zD,KAAKpC,EAAK3F,KAAKg5D,YACpCv3D,KAAKg6D,gBAAgB1zD,KAAKpC,EAAK3F,KAAK+nB,UAC1BpiB,EAAK3F,KAAKu6D,SACpB94D,KAAKg6D,gBAAgB1zD,KAAKpC,EAAK3F,KAAKu6D,SAGtC94D,KAAKO,MAAM,oBAAqBP,KAAKg6D,gBACtC,GAED11D,SAAU,CAAA,EACVsS,OAAAA,GAEC5W,KAAKk6D,WAAa,IAAIl6D,KAAKksB,MAC3BlsB,KAAKzB,KAAOyB,KAAKksB,KAAK3tB,KACnB8c,KAAKC,MAAMD,KAAK6f,UAAUl7B,KAAKksB,KAAK3tB,OACpC,KACHyB,KAAKs8C,KAAOt8C,KAAKksB,KAAKowB,KACnBjhC,KAAKC,MAAMD,KAAK6f,UAAUl7B,KAAKksB,KAAKowB,OACpC,IACJ,EACA97C,OAAAA,GACA,EAEAyC,SAAmB,83EKhJpBu3D,GAAe,CACdr3D,WAAY,CACX9E,WAEDK,MAAO,CACNmiB,QAAS,CACRjiB,KAAMuL,OACNpL,QAAS,MAGXR,KAAIA,KACI,CACNyZ,EAAG,KACHyiD,MAAO,IAGT36D,QAAS,CACRK,IAAAA,GACC,OAAQH,KAAKy6D,OACZ,KAAK,EACJ,OAAIz6D,KAAK6gB,SACR7gB,KAAKy6D,MAAQ,OACbz6D,KAAKgY,EAAIoB,OAAOjI,WAAW,IAAMnR,KAAKS,MAAMjC,MAAM2B,OAAQH,KAAK6gB,WAGxD7gB,KAAKS,MAAMjC,MAAM2B,OAC1B,KAAK,EACJ,OAAOiZ,OAAOjI,WAAW,IAAMnR,KAAKG,OAAQ,GAE/C,EACAD,IAAAA,GACC,OAAQF,KAAKy6D,OACZ,KAAK,EACJ,OAAOrhD,OAAOshD,aAAa16D,KAAKgY,GACjC,KAAK,EACJ,OAAOoB,OAAOjI,WAAW,IAAMnR,KAAKE,OAAQ,GAC7C,KAAK,EACJF,KAAKS,MAAMjC,MAAM0B,OAEpB,GAEDM,OAAAA,GACCR,KAAKS,MAAMjC,MAAMiC,MAAMjC,MAAM+a,iBAAiB,gBAAiB,KAC9DvZ,KAAKy6D,MAAQ,IAEdz6D,KAAKS,MAAMjC,MAAMiC,MAAMjC,MAAM+a,iBAAiB,iBAAkB,KAC/DvZ,KAAKy6D,MAAQ,IAEdz6D,KAAKS,MAAMjC,MAAMiC,MAAMjC,MAAM+a,iBAAiB,gBAAiB,KAC9DvZ,KAAKy6D,MAAQ,IAEdz6D,KAAKS,MAAMjC,MAAMiC,MAAMjC,MAAM+a,iBAAiB,kBAAmB,KAChEvZ,KAAKy6D,MAAQ,GAEf,EACAx3D,SAAU,+JClDX03D,GAAe,CACdx3D,WAAY,CACX9E,UACA6E,QACA0zD,oBACAgE,OAAAA,IAEDx3D,OAAQ,CAAC/E,GACTK,MAAO,CACN+iB,cAAe,CACd7iB,KAAMC,QACNE,SAAS,GAEVE,MAAOO,OACPukD,MAAOjlD,OACP+7D,qBAAsBv3D,SACtBw3D,qBAAsBx3D,SAOtBD,cAAeC,SACfC,gBAAiBD,SACjBE,uBAAwBF,SACxBG,cAAeH,SACfI,eAAgBJ,UAGjB/E,IAAAA,GACC,MAAO,CACN+jB,MAAO,KACPN,aAAc,KACd+4C,SAAU/6D,KAAKf,MACf+jB,OAAQ,KACR62C,WAAY,KACZl+C,SAAS,EACT1Z,QAAQ,EACRw/C,KAAM,KAER,EACAx9C,OAAQ,CAAC,cACTuT,OAAAA,GACC,MAAO,CACNghD,aAAcx4D,KAAKg7D,qBACnBv5C,cAAezhB,KAAKyhB,cAEtB,EAEA3hB,QAAS,CACRk7D,qBAAsB,SAAUC,GAC/Bj7D,KAAKgjB,OAASi4C,CACf,EAEAC,kBAAmB,SAAU3/C,GAC5BzT,QAAQC,MAAMwT,GACdvb,KAAK2b,SAAU,EACf3b,KAAKm7D,YAAW,GAChBn7D,KAAKiC,QAAS,EACdjC,KAAKE,MACN,EAEA,wBAAMk7D,GAGL,GAAIp7D,KAAKsiB,OAAStiB,KAAKgiB,aAAc,CAEpC,GAAIhiB,KAAKgjB,OAAQ,CAChB,MAAMq4C,QAAiBr7D,KAAKs7D,YAAYt7D,KAAKgjB,QAE7ChjB,KAAKgjB,OAASq4C,GAAsB,IACrC,CAIA,MAAME,EAAqBhyD,IAEtBA,EAAIhL,KAAKwJ,OACZ/H,KAAKiC,QAAS,EACdiB,EAAMtC,MACL,+BAAiCya,KAAK6f,UAAU3xB,EAAIhL,KAAKuV,WAG1D9T,KAAKiC,QAAS,EACdiB,EAAMtC,MACL,+GAOHZ,KAAK2b,SAAU,EACf3b,KAAKm7D,YAAW,GAGhBn7D,KAAK+6D,SAASjF,SACb91D,KAAK+c,KACH3H,KAAKogD,GAAgBvyC,oBACrBjjB,KAAKsiB,MACLtiB,KAAKgiB,aACLhiB,KAAK+6D,SAASjF,SACd91D,KAAKgjB,OAAShjB,KAAKgjB,OAAO,GAAK,OAE/BpgB,KAAM2G,IACNgyD,EAAkBhyD,KAElBwK,MAAOwH,GAAQvb,KAAKu7B,UAAUqF,mBAC9B4nB,QAAQ,KACRxoD,KAAK2b,SAAU,EACf3b,KAAKm7D,YAAW,GAChBn7D,KAAKE,SAGPF,KAAK+c,KACH3H,KAAKogD,GAAgBzyC,oBACrB/iB,KAAKsiB,MACLtiB,KAAKgiB,aACLhiB,KAAKgjB,OAAShjB,KAAKgjB,OAAO,GAAK,OAE/BpgB,KAAM2G,IACNgyD,EAAkBhyD,KAElBwK,MAAOwH,GAAQvb,KAAKu7B,UAAUqF,mBAC9B4nB,QAAQ,KACRxoD,KAAK2b,SAAU,EACf3b,KAAKm7D,YAAW,GAChBn7D,KAAKE,QAET,CACD,EAEAo7D,YAAaj5B,eAAgB2yB,GAC5B,GAAsB,+BAAlBA,EAAM,GAAGp2D,KAAuC,CACnD,IAAIwyB,EAAW,IAAIoJ,SACnBpJ,EAAS4J,OAAO,UAAWg6B,EAAM,IAkBjC,OAjBeh1D,KAAK+6D,SAASjF,eAGtB91D,KAAK+c,KACT3H,KAAKogD,GAAgB/yC,WACrB2O,EACApxB,KAAK+6D,SAASjF,WAEdlzD,KAAM2G,GACCA,EAAIhL,MAAM+J,IAAKwO,GAASA,EAAKmiD,eAGhCj5D,KAAK+c,KACT3H,KAAKogD,GAAgB/yC,WAAW2O,IAChCxuB,KAAM2G,GACCA,EAAIhL,MAAM+J,IAAKwO,GAASA,EAAKmiD,QAGxC,CAEC,OAAO,CAET,GAED30D,SAAU,CACTk3D,WAAY,WACX,OAAQx7D,KAAKf,MAAMq9C,MAClB,IAAK,SAEL,IAAK,UAEL,IAAK,UACJ,OAAO,EACR,QACC,OAAO,EAEV,GAED1lC,OAAAA,GACK5W,KAAK+6D,SAASz4C,QAEjBtiB,KAAKsiB,MAAQtiB,KAAK+6D,SAASz4C,MAE7B,EACA9hB,OAAAA,GACCR,KAAKxB,MAAQwB,KAAKS,MAAMkD,eAAenF,KACxC,EACAoC,KAAAA,CAAME,GAEL,OADAzC,EAAQuC,MAAMiD,KAAK7D,MACZ3B,EAAQuC,MAAM,KAAME,EAC5B,EACAmC,SAAmB,smCC7LpBw4D,GAAe,CACdt4D,WAAY,CAACw3D,eACbj8D,MAAO,CACNH,KAAM,CACLK,KAAMY,SAIRyE,OAAQ,CACP,0BACA,0BACA,qBACA,qBAGDpE,MAAO,CAAC,gBAERtB,IAAAA,GACC,MAAO,CACNm9D,iBAAiB,EACjB5nC,QAAS,KACT6nC,gBAAiB37D,KAAK+X,GAAGC,EAAE,SAAU,oBAEvC,EAEAlY,QAAS,CACR87D,oBAAqB,WAEhB57D,KAAKS,MAAMo7D,gBAAgB55D,QAC9BjC,KAAKO,MAAM,gBAIZP,KAAK07D,iBAAkB,CACxB,EAEA,yBAAMI,CAAoBC,GAEzB,IAAIzf,EAAOt8C,KAAKshB,QAAQy6C,EAAcz5C,MAAOy5C,EAAc1yC,QAEvD9qB,EAAO,KACPu1B,EAAU,KACVkhC,EAAQ,KACRuE,GAAY,EAEhB,GAAa,sBAATjd,EAA8B,CACjC/9C,EAAO,CACNwlD,MAAOgY,EAAcz5C,MACrBrjB,MAAO88D,EAAcx5C,iBAAiBtjB,OAYvC+1D,QAROh1D,KAAK+c,KACT3H,KAAKogD,GAAgB5yC,sBACrBm5C,EAAc35C,mBAEdxf,KAAM2G,GACCA,EAAIhL,MAIVy2D,IACHuE,GAAY,EAEd,MACCh7D,EAAOw9D,EAAcx5C,iBAYtB,GATAuR,EAAU,CACTgiC,SAAUiG,EAAc35C,iBACxBk6B,KAAMA,EACN/9C,KAAMA,EACNg7D,UAAWA,EACXj3C,MAAOy5C,EAAcz5C,MACrB0yC,MAAOA,GAGK,gBAAT1Y,EAAwB,CAE3B,MAAM76B,QAAsBzhB,KAAK+c,KAAK3H,KAAK++C,GAAU1yC,cAAcs6C,EAAclhD,MAAMjY,KAAM2G,GAAQA,EAAIhL,MAErGkjB,IACHqS,EAAuB,cAAIrS,GAY5BuzC,QAROh1D,KAAK+c,KACT3H,KAAKogD,GAAgB5yC,sBACrBm5C,EAAc35C,mBAEdxf,KAAM2G,GACCA,EAAIhL,MAIdu1B,EAAe,MAAIkhC,CACpB,CAGI+G,EAAc1yC,SAAWrpB,KAAKg8D,mBAA4B,UAC7DloC,EAAgB,OAAIioC,EAAc1yC,OAClCyK,EAAwB,eAAIioC,EAAc15C,eAC1CyR,EAA0B,iBAAIioC,EAAc1C,kBAI7Cr5D,KAAK8zB,QAAUA,EACf9zB,KAAK27D,gBAAkBI,EAAcz5C,MAGjCwR,IACH9zB,KAAK07D,iBAAkB,EAEvBj6D,IAAIokD,SAAS,KACZ7lD,KAAKS,MAAMo7D,gBAAgB17D,SAG9B,EAEA87D,cAAe,SAAU/3D,GACxBlE,KAAK+c,KACH3H,KAAKogD,GAAgBryC,oBAAoBjf,EAAKke,mBAC9Cxf,KAAM2G,IACFA,EAAIhL,KAAKwJ,MAEZD,QAAQC,MAAM,iBAAkBwB,EAAIhL,MAEpCyB,KAAKO,MAAM,iBAGf,EAEA+gB,QAAS,SAAUgB,EAAO+G,GACzB,GAAMA,IAAWrpB,KAAKg8D,mBAA4B,QACjD,MAAO,SAGR,OAAQ15C,GACP,KAAKtiB,KAAKm5D,kBAAkB,oBAE5B,KAAKn5D,KAAKm5D,kBAAkB,eAC3B,MAAO,cACR,KAAKn5D,KAAKm5D,kBAAkB,kBAC3B,MAAO,UACR,KAAKn5D,KAAKm5D,kBAAkB,oBAE5B,KAAKn5D,KAAKm5D,kBAAkB,eAC3B,MAAO,cACR,KAAKn5D,KAAKm5D,kBAAkB,kBAC3B,MAAO,UACR,QACC,MAAO,oBAEV,GAGDviD,OAAAA,GACA,EAEAtS,SAAU,CAAA,EAEVrB,SAAmB,06FCxIpB,SAASi5D,GAAWC,EAAMC,EAAYl6B,GACrC,IAAIm6B,EAAM/5D,SAASC,cAAc,OAE7B+5D,EAAe,KAEfv3B,EAAMo3B,EAAKI,WAEf,GAAIh9D,MAAM4I,QAAQ48B,GAClB,CACC,MAAM4H,EAAQ5H,EAAI,GAAK,IAAItpB,KAAKspB,EAAI,IAAM,KACpC6H,EAAQ7H,EAAI,GAAK,IAAItpB,KAAKspB,EAAI,IAAM,KAC1Cu3B,EAAe,CAAC3vB,EAAOC,EACxB,CA0BA,OAxBAnrC,IAAIC,UAAU,CACbyB,WAAY,CACXq5D,iBAAkBp7D,SAASq7D,UAE5Bl+D,KAAIA,KACI,CACNwmC,IAAKu3B,IAGPtuD,MAAO,CACN+2B,GAAAA,CAAIpC,GACHT,EAAQS,EACT,GAED1/B,SAAU,kPAQRT,IAAIpB,SAASqB,OAAO1D,SAASgE,MAAMs5D,GAE/BA,CACR,CAtEKj7D,UACJ0G,QAAQC,MAAM,wBAIfwjD,UAAUC,aAAa,SAAU,UAAW,CAC3CkR,MAASA,CAACC,EAAaC,KACtB,IAAKD,EACJ,OAAO,EAER,IAAIE,EAAU,IAAIphD,KAAKmhD,GAEvB,GAAIr9D,MAAM4I,QAAQw0D,GAClB,CACC,IAAIG,EAAY,IAAIrhD,KAAKkhD,EAAY,IACrC,GAAIA,EAAY,GAChB,CACC,IAAII,EAAU,IAAIthD,KAAKkhD,EAAY,IAInC,OAFAI,EAAQC,SAAS,GAAI,GAAI,GAAI,KAEtBH,GAAWC,GAAaD,GAAWE,CAC3C,CAEA,OAAOF,EAAQI,iBAAmBH,EAAUG,cAC7C,CACA,IAAIC,EAAa,IAAIzhD,KAAKkhD,GAC1B,OAAOE,EAAQI,iBAAmBC,EAAWD,kBCZ/C,IAAAE,GAAe,CACdh6D,WAAY,CACX4pD,kBACAoG,iBACAC,iBACAC,cACAK,WACAE,WACAC,gBACAC,mBACAkC,qBACAyF,sBACAd,eAED12D,OAAQ,CAAC,oBAAqB,mBAAoB,WAAW,cAC7D1F,IAAAA,GACC,MAAO,CACN6lD,WAAW,EACXgZ,4BAA4B,EAC5BC,eAAgB,KAChBC,iBAAiB,CAAA,EAEjBC,8BAA+B,CAC9BC,cAAe,0CACfvO,YAAa,CACZnG,SAAS,GAEVzzC,UAAW,IACXk7C,OAAQ,aACRzH,QAAS,CAAC,CACT/nD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBG,uBAChDj7B,MAAO,iBAGTk7B,6BAA8B,CAC7BF,cAAe,yCACfvO,YAAa,CACZnG,SAAS,GAEVzzC,UAAW,IACXk7C,OAAQ,aACRnE,iBAAkB,WAClBuR,uCAAuC,EACvCC,kCAAmCn8D,IAAIo8D,mBACvC/U,QAAS,CACR,CACC/nD,MACC,yFACDyhC,MAAO,WACPs7B,YAAY,EACZ5O,cAAc,EACdzE,UAAW,qBACXx1C,SAAU,GACV8oD,YAAa/9D,KAAKg+D,kBAEnB,CACCj9D,MAAOU,IAAI6C,SAAS,IAAItE,KAAKs9D,iBAAiBW,+BAC9Cz7B,MAAO,iBACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAKtE,KAAKs9D,iBAAiBY,sBAC/C17B,MAAO,SACP0sB,cAAc,EACdK,WAAW,EACXj6C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAKtE,KAAKs9D,iBAAiBa,cAC/C37B,MAAO,gBACP47B,iBAAkB,QAClBlP,aAAcgN,GACd5mD,SAAU,IACVi3C,SAAS,EACT9B,UAAU,WACV4T,gBAAiBr+D,KAAKs+D,6BAK3B,EAEA5/D,MAAO,CACNH,KAAMiB,OACNu7D,SAAUv7D,QAEXgY,OAAAA,GACC,MAAO,CACNuN,eAAgBtjB,IAAI6C,SAAS,CAAEiH,IAAKA,IAAMvL,KAAKzB,KAAKwmB,iBAEtD,EACAjlB,QAAS,CAERy+D,yBAA0B,WACzBv+D,KAAKS,MAAM+9D,oBAAoBpU,UAAUiH,WAAWrxD,KAAK09D,6BAA6B5U,SACtF9oD,KAAKS,MAAM+9D,oBAAoBpU,UAAUzgB,QAAQ3pC,KAAKzB,KAAKkgE,OAC5D,EACAC,0BAA2B,WAC1B1+D,KAAKS,MAAMk+D,qBAAqBvU,UAAUiH,WAAWrxD,KAAKu9D,8BAA8BzU,SACxF9oD,KAAKS,MAAMk+D,qBAAqBvU,UAAUzgB,QACzC3pC,KAAKzB,KAAKqgE,gBAEZ,EACAC,mBAAoB,WACnB7+D,KAAK+c,KACH3H,KAAKogD,GAAgB1yC,uBACrBlgB,KAAM2G,KACDA,EAAIxB,OAASwB,IACjBvJ,KAAKzB,KAAKugE,cAAgBv1D,EAAIhL,MAAM4H,OACjCoD,EAAIhL,KAAK6I,KAAKpH,KAAK++D,mBACnB,OAGP,EAEAnD,oBAAqB,WAEhB57D,KAAKS,MAAMu+D,UAAU/8D,QACxBjC,KAAK+c,KACH3H,KAAKogD,GAAgB1yC,uBACrBlgB,KAAM23B,KACDA,EAAQxyB,OAASwyB,EAAQh8B,MAC7ByB,KAAKzB,KAAKugE,cAAgBvkC,EAAQh8B,KAClCyB,KAAKzB,KAAKugE,cAAc13D,KAAKpH,KAAK++D,oBAElCj3D,QAAQC,MAAM,wCAA0CwyB,KAGzDxmB,MAAOwH,IACPzT,QAAQC,MAAMwT,KAKjBvb,KAAKokD,WAAY,EACjBpkD,KAAKq9D,eAAiB,IACvB,EAEAvB,mBAAAA,CAAoBxf,GACfA,IACHt8C,KAAKq9D,eAAiB/gB,GAEvBt8C,KAAKokD,WAAY,EAEjB3iD,IAAIokD,SAAS,KACZ7lD,KAAKS,MAAMu+D,UAAU7+D,QAEvB,EACAm+D,wBAAyB,WAOxB,MANe,CACdW,YAAY,aACZC,aAAa,aACbC,mBAAmB,iBACnBrkD,SAASxH,2BAA2BwH,SAGtC,GAGDxW,SAAU,CAET2xD,UAAAA,GACC,OAAOj2D,KAAKzB,MAAM03D,YAAc,IACjC,EAEAmJ,gBAAAA,GACC,OAAOp/D,KAAKq9D,eACTr9D,KAAK+6D,SAASx8D,KAAKyB,KAAKq9D,gBACxBr9D,KAAK+6D,QACT,EAEAsE,iBAAAA,GACC,OAAKr/D,KAAKzB,KAIH,CACNi4D,QAASx2D,KAAKzB,KAAKujD,QACnB2U,SAAUz2D,KAAKzB,KAAKwjD,SACpBud,SAAUt/D,KAAKzB,KAAKghE,SACpBC,OAAQx/D,KAAKzB,KAAKkhE,OAClBC,MAAO1/D,KAAKzB,KAAKwlD,MACjB4b,UAAW3/D,KAAKzB,KAAKqhE,UACrBzJ,YAAan2D,KAAKzB,KAAK43D,YACvBI,KAAMv2D,KAAKzB,KAAKg4D,MAXT,CAAA,CAaT,EAEAsJ,eAAAA,GACC,OAAK7/D,KAAKzB,KAIH,CACNuhE,aAAc,CACb12B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,kBAC7B/Y,MAAOe,KAAKzB,KAAKwhE,UAElBC,WAAY,CACX52B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,gBAC7B/Y,MAAOe,KAAKzB,KAAK0hE,QAElBC,oBAAqB,CACpB92B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,yBAC7B/Y,MAAOe,KAAKzB,KAAK2hE,qBAElB5pC,YAAa,CACZ8S,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,iBAC5B/Y,MAAOe,KAAKzB,KAAK+3B,aAElB5L,SAAU,CACT0e,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,cAC5B/Y,MAAOe,KAAKzB,KAAKmsB,UAElBvG,QAAS,CACRilB,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,iBAC5B/Y,MAAOe,KAAKzB,KAAK4lB,SAElB6vC,OAAQ,CACP5qB,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,YAC5B/Y,MAAOe,KAAKzB,KAAKy1D,OAAOn2B,SA9BlB,CAAA,CAiCT,GAEDjnB,OAAAA,GAEC5W,KAAK+X,GAAG4E,aAAa,UAAU/Z,KAAK,KACnC5C,KAAKs9D,iBAAiBG,sBAAwBz9D,KAAK+X,GAAGC,EAAE,0BACxDhY,KAAKs9D,iBAAiBW,8BAAgCj+D,KAAK+X,GAAGC,EAAE,kCAChEhY,KAAKs9D,iBAAiBY,qBAAuBl+D,KAAK+X,GAAGC,EAAE,yBACvDhY,KAAKs9D,iBAAiBa,aAAen+D,KAAK+X,GAAGC,EAAE,uBAC/ChY,KAAKs9D,iBAAiB6C,QAAS,IAGhCngE,KAAKzB,KAAKugE,eAAe13D,KAAKpH,KAAK++D,kBACpC,EACA/wD,MAAO,CACN,iBAAiBoyD,GACbpgE,KAAKS,MAAM+9D,qBAAqBx+D,KAAKS,MAAM+9D,oBAAoBpU,UAAUiH,WAAWrxD,KAAK09D,6BAA6B5U,SACtH9oD,KAAKS,MAAMk+D,sBAAsB3+D,KAAKS,MAAMk+D,qBAAqBvU,UAAUiH,WAAWrxD,KAAKu9D,8BAA8BzU,QAC7H,GAED7lD,SAAmB,yqPCtPpBo9D,GAAe,CACdl9D,WAAY,CACX4pD,kBACA4N,cACAjH,WACAE,WACA6H,sBACArI,iBACAD,iBACAE,cACAQ,gBACAC,mBACAkC,sBAGD/xD,OAAQ,CAAC,oBAAqB,mBAAoB,WAAW,cAE7D1F,IAAAA,GACC,MAAO,CACN6lD,WAAW,EACXiZ,eAAgB,KAChBC,iBAAiB,CAAA,EAEjBgD,yBAA0B,CACzB9C,cAAe,gCACfvO,YAAa,CACZnG,SAAS,GAEVzzC,UAAW,IACXk7C,OAAQ,aACRnE,iBAAkB,WAClBuR,uCAAuC,EACvCC,kCAAmCn8D,IAAIo8D,mBACvC/U,QAAS,CACR,CACC/nD,MACC,qFACDyhC,MAAO,WACPs7B,YAAY,EACZ5O,cAAc,EACdzE,UAAW,qBACXx1C,SAAU,GACV8oD,YAAa/9D,KAAKg+D,iBAClBzR,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBiD,mBAChD/9B,MAAO,cACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBkD,4BAChDh+B,MAAO,uBACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBmD,kBAChDj+B,MAAO,aACP47B,iBAAkB,QAClBlP,aAAcgN,GACd3M,WAAW,EACXj6C,SAAU,IACVi3C,SAAS,EACT9B,UAAU,WACV4T,gBAAiBr+D,KAAKs+D,2BAEvB,CACCv9D,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBoD,kBAChDl+B,MAAO,aACP47B,iBAAkB,QAClBlP,aAAcgN,GACd3M,WAAW,EACXj6C,SAAU,IACVi3C,SAAS,EACT9B,UAAU,WACV4T,gBAAiBr+D,KAAKs+D,2BAEvB,CACCv9D,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBqD,qBAChDn+B,MAAO,gBACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,KAKZmR,6BAA8B,CAC7BF,cAAe,oCACfvO,YAAa,CACZnG,SAAS,GAEVzzC,UAAW,IACXk7C,OAAQ,aACRnE,iBAAkB,WAClBuR,uCAAuC,EACvCC,kCAAmCn8D,IAAIo8D,mBACvCt/D,KAAM,CAAC,CAAC6zB,eAAgB,GAAIwuC,OAAQ,GAAIC,cAAe,KACvD/X,QAAS,CACR,CACC/nD,MACC,yFACDyhC,MAAO,WACPs7B,YAAY,EACZ5O,cAAc,EACdzE,UAAW,qBACXx1C,SAAU,GACV8oD,YAAa/9D,KAAKg+D,iBAClBzR,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBW,+BAChDz7B,MAAO,iBACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBY,sBAChD17B,MAAO,SACP0sB,cAAc,EACdK,WAAW,EACXj6C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKs9D,iBAAiBwD,oBAChDt+B,MAAO,gBACP47B,iBAAkB,QAClBlP,aAAcgN,GACd5mD,SAAU,IACVi3C,SAAS,EACT9B,UAAU,WACV4T,gBAAiBr+D,KAAKs+D,6BAK3B,EAEA5/D,MAAO,CACNH,KAAMiB,OACNu7D,SAAUv7D,QAGXM,QAAS,CACRy+D,yBAA0B,WACzBv+D,KAAKS,MAAM+9D,oBAAoBpU,UAAUiH,WAAWrxD,KAAK09D,6BAA6B5U,SACtF9oD,KAAKS,MAAM+9D,oBAAoBpU,UAAUzgB,QAAQ3pC,KAAKzB,KAAKkgE,OAC5D,EACAsC,qBAAsB,WACrB/gE,KAAKS,MAAMugE,gBAAgB5W,UAAUiH,WAAWrxD,KAAKsgE,yBAAyBxX,SAC9E9oD,KAAKS,MAAMugE,gBAAgB5W,UAAUzgB,QAAQ3pC,KAAKzB,KAAK0iE,WACxD,EACArF,oBAAqB,WAEhB57D,KAAKS,MAAMu+D,UAAU/8D,QACxBjC,KAAK+c,KACH3H,KAAKogD,GAAgB1yC,uBACrBlgB,KAAM23B,KACDA,EAAQxyB,OAASwyB,EAAQh8B,MAC7ByB,KAAKzB,KAAKugE,cAAgBvkC,EAAQh8B,KAClCyB,KAAKzB,KAAKugE,cAAc13D,KAAKpH,KAAK++D,oBAElCj3D,QAAQC,MAAM,wCAA0CwyB,KAGzDxmB,MAAOwH,IACPzT,QAAQC,MAAMwT,KAKjBvb,KAAKokD,WAAY,EACjBpkD,KAAKq9D,eAAiB,IACvB,EAEAvB,mBAAAA,CAAoBxf,GACfA,IACHt8C,KAAKq9D,eAAiB/gB,GAGvBt8C,KAAKokD,WAAY,EACjB3iD,IAAIokD,SAAS,KACZ7lD,KAAKS,MAAMu+D,UAAU7+D,QAIvB,EAEA0+D,mBAAoB,WACnB7+D,KAAK+c,KACH3H,KAAKogD,GAAgB1yC,uBACrBlgB,KAAM2G,KACDA,EAAIxB,OAASwB,IACjBvJ,KAAKzB,KAAKugE,cAAgBv1D,EAAIhL,MAAM4H,OACjCoD,EAAIhL,KAAK6I,KAAKpH,KAAK++D,mBACnB,OAGP,EACAmC,oBAAAA,GACIlhE,KAAKS,MAAM+9D,qBAAqBx+D,KAAKS,MAAM+9D,oBAAoBpU,UAAUiH,WAAWrxD,KAAK09D,6BAA6B5U,SACtH9oD,KAAKS,MAAMugE,iBAAiBhhE,KAAKS,MAAMugE,gBAAgB5W,UAAUiH,WAAWrxD,KAAKsgE,yBAAyBxX,QAC9G,EACAwV,wBAAyB,WAOxB,MANe,CACdW,YAAY,aACZC,aAAa,aACbC,mBAAmB,iBACnBrkD,SAASxH,2BAA2BwH,SAGtC,GAGDxW,SAAU,CACT2xD,UAAAA,GACC,OAAOj2D,KAAKzB,MAAM03D,YAAc,IACjC,EACAkL,eAAAA,GACC,OAAGnhE,KAAKzB,KAAK6iE,kBAAkB96C,QACvBtmB,KAAKzB,KAAK6iE,iBAAiB96C,QAAU,IAAMtmB,KAAKzB,KAAK8iE,cACnDrhE,KAAKzB,KAAK6iE,iBACZphE,KAAKzB,KAAK6iE,iBAAmB,IAAMphE,KAAKzB,KAAK8iE,cAE7CrhE,KAAKzB,KAAK8iE,aAEnB,EACAjC,gBAAAA,GACC,OAAOp/D,KAAKq9D,eACTr9D,KAAK+6D,SAASx8D,KAAKyB,KAAKq9D,gBACxBr9D,KAAK+6D,QACT,EACAsE,iBAAAA,GACC,OAAKr/D,KAAKzB,KAIH,CACNi4D,QAASx2D,KAAKzB,KAAKujD,QACnB2U,SAAUz2D,KAAKzB,KAAKwjD,SACpBud,SAAUt/D,KAAKzB,KAAKghE,SACpBC,OAAQx/D,KAAKzB,KAAKkhE,OAClBC,MAAO1/D,KAAKzB,KAAKwlD,MACjB4b,UAAW3/D,KAAKzB,KAAKqhE,UACrBzJ,YAAan2D,KAAKzB,KAAK43D,YACvBI,KAAMv2D,KAAKzB,KAAKg4D,MAXT,CAAA,CAaT,EAEAsJ,eAAAA,GACC,OAAK7/D,KAAKzB,KAIH,CACNuhE,aAAc,CACb12B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,kBAC7B/Y,MAAOe,KAAKzB,KAAKwhE,UAElBC,WAAY,CACX52B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,gBAC7B/Y,MAAOe,KAAKzB,KAAK0hE,QAElBC,oBAAqB,CACpB92B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,iBAC7B/Y,MAAOe,KAAKzB,KAAK+iE,QAElBC,QAAS,CACRn4B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,aAC7B/Y,MAAOe,KAAKmhE,iBAEbK,OAAQ,CACPp4B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,UAC7B/Y,MAAOe,KAAKzB,KAAK+kB,aAtBX,CAAA,CAyBT,GAGD1M,OAAAA,GAEC5W,KAAK+X,GAAG4E,aAAa,CAAC,KAAK,QAAQ,SAAS,WAAW/Z,KAAK,KAC3D5C,KAAKs9D,iBAAiBiD,kBAAoBvgE,KAAK+X,GAAGC,EAAE,kBACpDhY,KAAKs9D,iBAAiBkD,2BAA6BxgE,KAAK+X,GAAGC,EAAE,8BAC7DhY,KAAKs9D,iBAAiBmD,iBAAmBzgE,KAAK+X,GAAGC,EAAE,qBACnDhY,KAAKs9D,iBAAiBoD,iBAAmB1gE,KAAK+X,GAAGC,EAAE,qBACnDhY,KAAKs9D,iBAAiBqD,oBAAsB3gE,KAAK+X,GAAGC,EAAE,wBACtDhY,KAAKs9D,iBAAiBW,8BAAgCj+D,KAAK+X,GAAGC,EAAE,kCAChEhY,KAAKs9D,iBAAiBY,qBAAuBl+D,KAAK+X,GAAGC,EAAE,yBACvDhY,KAAKs9D,iBAAiBwD,mBAAqB9gE,KAAK+X,GAAGC,EAAE,uBACrDhY,KAAKs9D,iBAAiB6C,QAAO,IAG9BngE,KAAKzB,KAAKugE,eAAe13D,KAAKpH,KAAK++D,kBAEpC,EACA/wD,MAAO,CACN,kBAAkBoyD,GACdpgE,KAAKS,MAAMugE,iBAAiBhhE,KAAKS,MAAMugE,gBAAgB5W,UAAUzgB,QAAQy2B,EAC7E,EACA,cAAcA,GACVpgE,KAAKS,MAAM+9D,qBAAqBx+D,KAAKS,MAAM+9D,oBAAoBpU,UAAUzgB,QAAQy2B,EACrF,EACA,iBAAiBA,GAChBpgE,KAAKkhE,sBACN,GAEDj+D,SAAmB,k1SClUpBw+D,GAAe,CACdljE,KAAIA,KACI,CAAA,GAER4E,WAAY,CACXkwD,cACAF,iBACAU,gBACAC,mBACAkC,sBAGDt3D,MAAO,CAAC,QACR8Y,OAAAA,GACC,MAAO,CACNuN,eAAgBtjB,IAAI6C,SAAS,CAAEiH,IAAKA,IAAMvL,KAAKzB,KAAKwmB,iBAEtD,EAEAjlB,QAAS,CAAA,EAETwE,SAAU,CACT2xD,UAAAA,GACC,OAAOj2D,KAAKzB,MAAM03D,YAAc,IACjC,EACAoJ,iBAAAA,GACC,OAAKr/D,KAAKzB,KAIH,CACNi4D,QAASx2D,KAAKzB,KAAKujD,QACnB2U,SAAUz2D,KAAKzB,KAAKwjD,SACpBud,SAAUt/D,KAAKzB,KAAKghE,SACpBC,OAAQx/D,KAAKzB,KAAKkhE,OAClBC,MAAO1/D,KAAKzB,KAAKwlD,MACjB4b,UAAW3/D,KAAKzB,KAAKqhE,UACrBzJ,YAAan2D,KAAKzB,KAAK43D,YACvBI,KAAMv2D,KAAKzB,KAAKg4D,MAXT,CAAA,CAaT,EAEAmL,YAAAA,GACC,OAAO1hE,KAAKzB,MAAMojE,OAAS3hE,KAAKzB,KAAKojE,OAAS,EAC/C,EAEA9B,eAAAA,GACC,OAAK7/D,KAAKzB,KAKH,CACNuhE,aAAc,CACb12B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,kBAC7B/Y,MAAOe,KAAKzB,KAAKwhE,UAElBC,WAAY,CACX52B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,gBAC7B/Y,MAAOe,KAAKzB,KAAK0hE,QAElBC,oBAAqB,CACpB92B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,yBAC7B/Y,MAAOe,KAAKzB,KAAK2hE,qBAElB5pC,YAAa,CACZ8S,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,iBAC5B/Y,MAAOe,KAAKzB,KAAK+3B,aAElB5L,SAAU,CACT0e,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,cAC5B/Y,MAAOe,KAAKzB,KAAKmsB,UAElBvG,QAAS,CACRilB,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,iBAC5B/Y,MAAOe,KAAKzB,KAAK4lB,SAElB6vC,OAAQ,CACP5qB,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,QAAQ,YAC5B/Y,MAAOe,KAAKzB,KAAKy1D,OAAOn2B,SA/BlB,CAAA,CAkCT,GAGDr9B,OAAAA,GACA,EAEAyC,SAAmB,kxHCrFpB2+D,GAAe,CACdz+D,WAAY,CACX4pD,kBACAoG,iBACAE,cACAS,mBACAD,gBACAmC,sBAED/xD,OAAQ,CAAC,mBAAoB,YAC7B1F,IAAAA,GACC,MAAO,CACNsjE,wBAAwB,EACxBvE,iBAAiB,CAAA,EACjBgD,yBAA0B,CACzB9C,cAAe,oCACfvO,YAAa,CACZnG,SAAS,GAEVzzC,UAAW,IACXk7C,OAAQ,aACRnE,iBAAkB,WAClBuR,uCAAuC,EACvCC,kCAAmCn8D,IAAIo8D,mBACvC/U,QAAS,CAGR,CACC/nD,MACC,qFACDyhC,MAAO,WACPs7B,YAAY,EACZ5O,cAAc,EACdzE,UAAW,qBACXx1C,SAAU,GACV8oD,YAAa/9D,KAAKg+D,iBAClBzR,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,mBACpCwqB,MAAO,cACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,+BACpCwqB,MAAO,uBACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,GAEV,CACCxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,sBACpCwqB,MAAO,aACP47B,iBAAkB,QAClBlP,aAAcgN,GACd3M,WAAW,EACXj6C,SAAU,IACVi3C,SAAS,EACT9B,UAAU,WACV4T,gBAAiBr+D,KAAKs+D,2BAEvB,CACCv9D,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,sBACpCwqB,MAAO,aACP47B,iBAAkB,QAClBlP,aAAcgN,GACd3M,WAAW,EACXj6C,SAAU,IACVi3C,SAAS,EACT9B,UAAU,WACV4T,gBAAiBr+D,KAAKs+D,2BAEvB,CACCv9D,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,yBACpCwqB,MAAO,gBACP0sB,cAAc,EACd55C,SAAU,IACVi3C,SAAS,KAKd,EAGA7tD,MAAO,CAAC,QACRoB,QAAS,CACRihE,qBAAsB,WACrB/gE,KAAKS,MAAMugE,gBAAgB5W,UAAUzgB,QAAQ3pC,KAAKzB,KAAK0iE,WACxD,EACA3C,wBAAyB,WAOxB,MANe,CACdW,YAAY,aACZC,aAAa,aACbC,mBAAmB,iBACnBrkD,SAASxH,2BAA2BwH,SAGtC,GAED9M,MAAO,CACN,kBAAkBoyD,GACdpgE,KAAKS,MAAMugE,iBAAiBhhE,KAAKS,MAAMugE,gBAAgB5W,UAAUzgB,QAAQy2B,EAC7E,EACA,iBAAiBA,GACbpgE,KAAKS,MAAMugE,iBAAiBhhE,KAAKS,MAAMugE,gBAAgB5W,UAAUiH,WAAWrxD,KAAKsgE,yBAAyBxX,QAC9G,GAEDxkD,SAAU,CACT68D,eAAAA,GACC,OAAGnhE,KAAKzB,KAAK6iE,kBAAkB96C,QACvBtmB,KAAKzB,KAAK6iE,iBAAiB96C,QAAU,IAAMtmB,KAAKzB,KAAK8iE,cACnDrhE,KAAKzB,KAAK6iE,iBACZphE,KAAKzB,KAAK6iE,iBAAmB,IAAMphE,KAAKzB,KAAK8iE,cAE7CrhE,KAAKzB,KAAK8iE,aAEnB,EACApL,UAAAA,GACC,OAAOj2D,KAAKzB,MAAM03D,YAAc,IACjC,EAEAyL,YAAAA,GACC,OAAO1hE,KAAKzB,MAAMojE,OAAS3hE,KAAKzB,KAAKojE,OAAS,EAC/C,EAEAtC,iBAAAA,GACC,OAAKr/D,KAAKzB,KAIH,CACNi4D,QAASx2D,KAAKzB,KAAKujD,QACnB2U,SAAUz2D,KAAKzB,KAAKwjD,SACpBud,SAAUt/D,KAAKzB,KAAKghE,SACpBC,OAAQx/D,KAAKzB,KAAKkhE,OAClBC,MAAO1/D,KAAKzB,KAAKwlD,MACjB4b,UAAW3/D,KAAKzB,KAAKqhE,UACrBzJ,YAAan2D,KAAKzB,KAAK43D,YACvBI,KAAMv2D,KAAKzB,KAAKg4D,MAXT,CAAA,CAaT,EAEAsJ,eAAAA,GACC,OAAK7/D,KAAKzB,KAGH,CACNuhE,aAAc,CACb12B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,kBAC7B/Y,MAAOe,KAAKzB,KAAKwhE,UAElBC,WAAY,CACX52B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,gBAC7B/Y,MAAOe,KAAKzB,KAAK0hE,QAElBC,oBAAqB,CACpB92B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,iBAC7B/Y,MAAOe,KAAKzB,KAAK+iE,QAElBC,QAAS,CACRn4B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,aAC7B/Y,MAAOe,KAAKmhE,iBAEbK,OAAQ,CACPp4B,MAAO,GAAGppC,KAAK+X,GAAGC,EAAE,SAAS,UAC7B/Y,MAAOe,KAAKzB,KAAK+kB,aArBX,CAAA,CAwBT,GAED1M,OAAAA,GACC5W,KAAK+X,GAAG4E,aAAa,CAAC,KAAM,QAAS,SAAU,WAAW/Z,KAAK,KAC9D5C,KAAKs9D,iBAAiBiD,kBAAoBvgE,KAAK+X,GAAGC,EAAE,kBACpDhY,KAAKs9D,iBAAiBkD,2BAA6BxgE,KAAK+X,GAAGC,EAAE,8BAC7DhY,KAAKs9D,iBAAiBmD,iBAAmBzgE,KAAK+X,GAAGC,EAAE,qBACnDhY,KAAKs9D,iBAAiBoD,iBAAmB1gE,KAAK+X,GAAGC,EAAE,qBACnDhY,KAAKs9D,iBAAiBqD,oBAAsB3gE,KAAK+X,GAAGC,EAAE,wBACtDhY,KAAKs9D,iBAAiB6C,QAAS,GAEjC,EAEAl9D,SAAmB,kpICxLpBxB,IAAIo8D,mBAAqB,SAAUt/D,GAElC,IAAIqQ,EAAYtM,SAASC,cAAc,OACvCqM,EAAUF,UAAUnI,IAAI,2BACxBqI,EAAUF,UAAUnI,IAAI,cAExB,IAAI2lB,EAAO5pB,SAASC,cAAc,OAkBlC,OAjBA2pB,EAAKxd,UAAUnI,IAAI,OAEnBqI,EAAU5L,YAAYkpB,GAEtB3tB,EAAKqI,QAAQ,SAAU0oD,GACtB,IAAIprD,EAAO5B,SAASC,cAAc,OAClC2B,EAAKwK,UAAUnI,IAAI,SACnB,IAAIu7D,EAAQx/D,SAASC,cAAc,OACnCu/D,EAAMpzD,UAAUnI,IAAI,SAEpBrC,EAAK69D,UAAY,WAAazS,EAAIvuD,MAAQ,YAC1C+gE,EAAMC,UAAYzS,EAAIrwD,MAAQqwD,EAAIrwD,MAAQ,IAE1CitB,EAAKlpB,YAAYkB,GACjBgoB,EAAKlpB,YAAY8+D,EAClB,GAEOtiE,OAAO6M,KAAK9N,GAAM4H,OAASyI,EAAY,EAC/C,EAEO,MAAMozD,GAAS,CACrB1jE,KAAM,SACN6E,WAAY,CACXg6D,iBACAkD,qBACAoB,qBACAG,yBACApH,YAED97D,MAAO,CACNmc,IAAK,CACJjc,KAAME,OACNmY,UAAS,GAEV2D,SAAU,CACThc,KAAMY,SAGRjB,IAAAA,GACC,MAAO,CAENod,SAAS,EACTqgD,mBAAoB,KACpB7C,kBAAmB,KACnB7c,KAAM,KACN/9C,KAAM,KAEN0jE,YAAa,KACbC,WAAYliE,KAAK4a,SAASunD,WAAY,EAExC,EACA3qD,OAAAA,GACC,MAAO,CACN0qD,WAAYzgE,IAAI6C,SAAS,IAAItE,KAAKkiE,YAClClG,mBAAoBv6D,IAAI6C,SAAS,MAChCtE,KAAKg8D,oBAAqBh8D,KAAKg8D,oBAEhC7C,kBAAmB13D,IAAI6C,SAAS,MAC/BtE,KAAKm5D,mBAAoBn5D,KAAKm5D,mBAE/BgC,WAAa/b,IACZp/C,KAAK2b,QAAUyjC,GAEhB+X,wBAAyBn3D,KAAK+2D,qBAC9B0B,wBAAyBz4D,KAAK+3D,qBAC9BiG,iBAAkBA,CAAC9nD,EAAG+1C,UAEK/qD,IAAtBlB,KAAKkW,EAAEzR,OAAOmI,MACjB5M,KAAKkW,EAAEzR,OAAOmI,KAAM,GAErB5M,KAAKkW,EAAEzR,OAAOmI,KAAO5M,KAAKkW,EAAEzR,OAAOmI,IAGnC,IAAIw1D,EAAoBnW,EAAOoW,QAAQC,MAAMh6D,IAAKk8B,GAC1CA,EAAIqC,QAAQ4rB,SAAS,IAKzBzyD,KAAKkW,EAAEzR,OAAOmI,IACjBsJ,EAAEzR,OAAOiK,UAAUiU,QAAQ,cAAe,iBAE1CzM,EAAEzR,OAAOiK,UAAUiU,QAAQ,gBAAiB,eAIzC3iB,KAAKkW,EAAEzR,OAAOmI,IACjBw1D,EACE34D,OAAQwiD,IACAA,EAAOv9C,UAAU6D,SAAS,SAElC3L,QAAS0oD,IACTA,EAAIiT,UAGNH,EACE34D,OAAQwiD,GACDA,EAAOv9C,UAAU6D,SAAS,SAEjC3L,QAAS0oD,IACTA,EAAIiT,WAIRxD,kBAAmBA,CAACyD,EAAMC,KACzB,IAAIxgE,EAAS,EAcb,OAZCA,EADiC,YAA9BugE,EAAKn5C,OAAOwX,eAEyB,aAA9B2hC,EAAKn5C,OAAOwX,eACiB,aAA9B4hC,EAAKp5C,OAAOwX,eAFZ,EAIA,EAGN2hC,EAAKn5C,SAAWo5C,EAAKp5C,SACxBpnB,EACC,IAAIwZ,KAAKgnD,EAAKC,WAAW59B,MAAM,KAAK69B,UAAUlmC,KAAK,MACnD,IAAIhhB,KAAK+mD,EAAKE,WAAW59B,MAAM,KAAK69B,UAAUlmC,KAAK,OAE9Cx6B,GAGV,EACAnC,QAAS,CACR,UAAM8iE,SAEC5iE,KAAK+c,KACT3H,KAAKogD,GAAgBvzC,aACrBrf,KAAMoR,IACNhU,KAAKg8D,mBAAqBhoD,EAASzV,OAEnCwV,MAAOhM,IACPD,QAAQC,MAAMA,KAGhB/H,KAAK+c,KACH3H,KAAKogD,GAAgBtzC,YACrBtf,KAAMoR,IACNhU,KAAKm5D,kBAAoBnlD,EAASzV,OAElCwV,MAAOhM,IACPD,QAAQC,MAAMA,KAIhB/H,KAAK+c,KACH3H,KAAK++C,GAAUC,eAAep0D,KAAKynD,OAAO5zC,OAAOgH,KAAK,OACtDjY,KAAMoR,GAAaA,EAASzV,MAAMqE,KAAKrE,IACvCyB,KAAKs8C,KAAO/9C,GAAMskE,YAAYvmB,KAC9Bt8C,KAAKzB,KAAOA,GAAMskE,YAAYtkE,KAC9ByB,KAAKkiE,WAAa3jE,GAAM4jE,WAAY,IAEpCpuD,MAAOhM,IACPD,QAAQC,MAAMA,IAIjB,EACAgwD,oBAAAA,GACC,IAAK/3D,KAAKzB,OAASyB,KAAKzB,KAAKukE,SAC5B,OAAO,KAGR,IAAIC,EAAgB,GAmCpB,OAlCI/iE,KAAKzB,KAAKugE,eAAe34D,SAC5B48D,EAAgBA,EAAc1oD,OAC7Bra,KAAKzB,KAAKugE,cACRr1D,OAAQkP,GACDA,EAAO4J,iBAAiBq2C,gBAE/BtwD,IAAK06D,GACEA,EAAQzgD,iBAAiBs2C,cAMlC74D,KAAKzB,KAAKugE,eAAe34D,QACzBnG,KAAKzB,KAAKukE,SACTr5D,OAAQu5D,GAAYA,EAAQpK,gBAC5Bl+B,MAAOsoC,GACPhjE,KAAKzB,KAAKugE,cAAc12D,KACtBuQ,GACAA,EAAO4J,iBAAiBs2C,YAAcmK,EAAQnK,eAIlDkK,EAAgBA,EAAc1oD,OAC7Bra,KAAKzB,KAAKukE,SACRr5D,OAAQu5D,GACDA,EAAQpK,gBAEftwD,IAAK26D,GACEA,EAAIpK,cAKR,IAAI,IAAIP,IAAIyK,GAEpB,EACAhM,oBAAAA,GACC,IAAK/2D,KAAKzB,OAASyB,KAAKzB,KAAK2kE,SAC5B,OAAO,KAGR,IAAIC,EAAgB,GA0CpB,OAxCInjE,KAAKzB,KAAKugE,eAAe34D,SAC5Bg9D,EAAgBA,EAAc9oD,OAC7Bra,KAAKzB,KAAKugE,cACRr1D,OAAQkP,GACiB,YAAlBA,EAAO0Q,QAAwB1Q,EAAO4J,iBAAiB80C,YAE9D/uD,IAAK86D,IACE,CACJx7C,WAAYw7C,EAAQ7gD,iBAAiBqF,WACrC2vC,WAAY6L,EAAQ7gD,iBAAiBg1C,gBAO1Cv3D,KAAKzB,KAAKugE,eAAe34D,QACzBnG,KAAKzB,KAAK2kE,SACTz5D,OAAQ6c,GAAYA,EAAQ+wC,YAC5B38B,MAAOpU,GACPtmB,KAAKzB,KAAKugE,cAAc12D,KACtBuQ,GACkB,YAAlBA,EAAO0Q,QAAwB1Q,EAAO4J,iBAAiBqF,YAActB,EAAQsB,eAIjFu7C,EAAgBA,EAAc9oD,OAC7Bra,KAAKzB,KAAK2kE,SACRz5D,OAAQ6c,GACDA,EAAQ+wC,YAEf/uD,IAAK+6D,IACE,CACJz7C,WAAYy7C,EAAIz7C,WAChB2vC,WAAY8L,EAAI9L,gBAMhB,IAAI,IAAIe,IAAI6K,GACpB,GAED7+D,SAAU,CAET86D,gBAAAA,GACC,GAAKp/D,KAAKzB,KAIV,MAAO,CACN+9C,KAAM,KACN/9C,KAAM,CACL+kE,uBAAwB,CACvBviE,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,yBAC3BsK,MAAO,yBACPg6B,KAAM,KACN/9C,KAAM,CACLujD,QAAS,CACR/gD,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,WAC3BsK,MAAOtiB,KAAKm5D,mBAA6B,QACzC7c,KAAM,oBACNid,WAAW,EACXh7D,KAAM,CACLwlD,MAAO,UACP9kD,MAAOe,KAAKzB,KAAKujD,UAGnBC,SAAU,CACThhD,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,YAC3BsK,MAAOtiB,KAAKm5D,mBAA8B,SAC1C7c,KAAM,oBACNid,WAAW,EACXh7D,KAAM,CACLwlD,MAAO,WACP9kD,MAAOe,KAAKzB,KAAKwjD,WAGnBgC,MAAO,CACNhjD,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,SAC3BsK,MAAOtiB,KAAKm5D,mBAA2B,MACvC7c,KAAM,oBACNid,WAAW,EACXh7D,KAAM,CACLwlD,MAAO,QACP9kD,MAAOe,KAAKzB,KAAKwlD,QAGnB6b,UAAW,CACV7+D,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,aAC3BsK,MAAOtiB,KAAKm5D,mBAA+B,UAC3C7c,KAAM,oBACNid,WAAW,EACXh7D,KAAM,CACLwlD,MAAO,YACP9kD,MAAOe,KAAKzB,KAAKqhE,cAKrB2D,iBAAkB,CACjBxiE,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,mBAC3BsK,MAAOtiB,KAAKm5D,oBAAoB,oBAChC56D,KAAMyB,KAAKzB,KAAK2kE,UACbz5D,OAAQvF,IAEDlE,KAAKzB,KAAKugE,eAAe12D,KAC/BuQ,GACAA,EAAO0Q,SAAWrpB,KAAKg8D,mBAA4B,SACnDrjD,EAAO4J,kBAAkBqF,aAAe1jB,EAAK0jB,aAG/Ctf,IAAKge,IACE,CACNk9C,SAAU,UACVlnB,KAAM,cACN/9C,KAAM+nB,MAIVm9C,iBAAkB,CACjB1iE,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,mBAC3BsK,MAAOtiB,KAAKm5D,oBAAoB,oBAChC56D,KAAMyB,KAAKzB,KAAKukE,UACbr5D,OAAQvF,IACDlE,KAAKzB,KAAKugE,eAAe12D,KAAMuQ,GAErCA,EAAO0Q,SAAWrpB,KAAKg8D,mBAA4B,SACnDrjD,EAAO4J,kBAAkBs2C,YAAc30D,EAAK20D,aAI9CvwD,IAAK06D,IACE,CACNQ,SAAU,UACVlnB,KAAM,cACN/9C,KAAMykE,OAMb,GAEDh1D,MAAO,CACN2N,QAAS,SAAUyjC,GACdA,EACHp/C,KAAKS,MAAMijE,gBAAgBvjE,OAE3BH,KAAKS,MAAMijE,gBAAgBxjE,MAE7B,EACA2a,GAAAA,CAAKulD,EAAQuD,GACZ3jE,KAAK4iE,MACN,GAEDhsD,OAAAA,GACC5W,KAAK4iE,MACN,EACA3/D,SAAU,+UC9WX,IAAA2gE,GAAe,CACdxwC,aAAaC,IACL,CACN7Y,OAAQ,MACRC,IAAK,iCACL5G,OAAQ,CAAEyP,WAAY+P,KAGxBC,SAAQA,CAACC,EAAOC,EAAKC,EAAKC,EAAKC,EAAiB,KACxC,CACNnZ,OAAQ,MACRC,IAAK,gCACL5G,OAAQ,CAAE0f,QAAOC,MAAKC,MAAKC,MAAKC,oBAGlCC,aAAYA,KACJ,CACNpZ,OAAQ,MACRC,IAAK,gCACL5G,OAAQ,CAAA,KCjCJ,MAAMgwD,GAAa,CACzBvlE,KAAM,YACNI,MAAO,CAAA,EAGPyE,WAAY,eACX4qC,EACAgf,kBACA+W,YAAa1iE,SAAS2iE,aAEvBxlE,IAAAA,GACC,MAAO,CACNylE,eAAgB,KAChBC,iBAAiB,EACjBC,cAAeziE,IAAIK,IAAI,GACvBqiE,kBAAmB,KACnBC,kBAAmB,KACnBC,UAAW,KACXC,YAAa,CACZC,eAAgB,GAChBC,aAAc/iE,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,iBAE5CysD,OAAQ,EACRC,aAAc,KACdnxC,MAAO,IAAI9X,KACX+X,IAAK/xB,IAAIK,IAAI,CACZ84C,OAAO,IAAIn/B,MAAOkpD,WAClBC,SAAS,IAAInpD,MAAOopD,eAErBpxC,IAAKhyB,IAAIK,IAAI,CACZ84C,OAAO,IAAIn/B,MAAOkpD,WAAa,EAC/BC,SAAS,IAAInpD,MAAOopD,eAErBC,2BAA4B,CAC3BC,aAAa,EACbC,WAAW,EACXC,eAAe,EACfC,OAAQ,aACRC,UAAU,GAEXC,2BAA4B,CAC3BL,aAAa,EACbC,WAAW,EACXC,eAAe,EACfC,OAAQ,QACRC,UAAU,GAEXE,sBAAuB,CACtBl2D,OAAQ1N,IAAIK,IAAI,KAChBgF,MAAO,aACPypD,OAAQ,aACR5jD,YAAa3M,KAAK+X,GAAGC,EAAE,0BACvB8wC,QAAS,CACR,CAAC/nD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,yBAA0BwqB,MAAO,aAAc8iC,UAAW,GAC/F,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,uBAAwBwqB,MAAO,cAAe8iC,UAAW,GAC9F,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,wBAAyBwqB,MAAO,SAAU8iC,UAAW,GAC1F,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,uBAAwBwqB,MAAO,WAAY8iC,UAAW,GAC3F,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,sBACpCwqB,MAAO,WAAYioB,UAAWzqD,KAAKulE,cAAeD,UAAW,GAC9D,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,8BACpCwqB,MAAO,UAAWioB,UAAWzqD,KAAKulE,cAAeD,UAAW,IAE9DrW,aAAa,GAEduW,4BAA6B,CAAC,CAC7BvgE,MAAO,aACPiJ,QAASm0B,UACRriC,KAAKmkE,uBAIT,EACArkE,QAAS,CACR2lE,YAAAA,CAAankE,GACZtB,KAAKmkE,kBAAoB7iE,CAC1B,EACAikE,aAAAA,CAAcpJ,GACb,MAAMp3B,EAAMo3B,EAAKI,WAEXmJ,EAAuB,aADfvJ,EAAKvM,WAEb5vD,KAAK+X,GAAGC,EAAE,qBACVhY,KAAK+X,GAAGC,EAAE,6BAChB,OAAG+sB,EACK,mGACKA,EAAI,iBAAmB2gC,EAD5B,uFAKA,gGAGT,EACAC,aAAaC,GACLtyD,2BAA2BC,SAAWD,2BAA2BE,UACtE,kCAAoCoyD,EAAKtiD,WAE5CuiD,aAAaD,GACLtyD,2BAA2BC,SAAWD,2BAA2BE,UACrE,uBAAyBoyD,EAAK7xC,WAElC+xC,cAAc51B,GAGN,GAFOpxC,OAAOoxC,EAAK0K,OAAO/tC,SAAS,EAAG,QAC7B/N,OAAOoxC,EAAK00B,SAAS/3D,SAAS,EAAG,OAGlDk5D,SAAAA,CAAUxnE,GACT,MAAM8+C,EAAI9+C,EAAK+J,IAAIs9D,IACX,CACNtiD,WAAYsiD,EAAKtiD,WACjB68B,YAAaylB,EAAKzlB,YAAYx9B,QAAQ,QAAS,KAC/CqjD,OAAQJ,EAAKK,gBACbC,SAAUN,EAAKO,WACfC,SAAUR,EAAK7xC,WAAa/zB,KAAK6lE,aAAaD,GAAQ,KACtDS,QAASrmE,KAAK2lE,aAAaC,MAM7B5lE,KAAKS,MAAM6lE,eAAelc,UAAUzgB,QAAQ0T,EAC7C,EACAkpB,aAAAA,GACCvmE,KAAK+c,KAAK3H,KAAKwuD,GAAOhwC,gBACpBhxB,KAAK2G,IACNA,GAAKhL,MAAMqI,QAAQhI,IAClBA,EAAK4lE,aAAe5lE,EAAK4lE,aAAa7hD,QAAQ,QAAS,OAExD3iB,KAAK0kE,aAAe1kE,KAAKskE,YACzBtkE,KAAKqkE,UAAY96D,GAAKhL,MAAQ,IAEhC,EACAioE,SAAAA,GACCxmE,KAAK+c,KAAK3H,KAAKwuD,GAAOtwC,SAAStzB,KAAKuzB,MAAMkzC,cAAezmE,KAAK8lE,cAAc9lE,KAAKwzB,KAAMxzB,KAAK8lE,cAAc9lE,KAAKyzB,KAAMzzB,KAAK0kE,cAAcH,gBAAkB,GAAIvkE,KAAKykE,SACjK7hE,KAAK2G,IACFA,GAAKhL,MAAMuV,QAAQ9T,KAAK+lE,UAAUx8D,EAAIhL,KAAKuV,SAEjD,EACA4yD,iBAAAA,CAAkBxY,GACjBluD,KAAKkkE,cAAgBhW,CACtB,EACAlxC,MAAAA,GACChd,KAAKwmE,WACN,EACAG,QAAAA,CAAS5hC,GACR,EAED6hC,WAAW7iD,GAIH,GAHKjlB,OAAOilB,EAAK8iD,WAAWh6D,SAAS,EAAG,QACjC/N,OAAOilB,EAAK+iD,WAAa,GAAGj6D,SAAS,EAAG,QACzCkX,EAAKgjD,gBAGnBC,WAAWjjD,GAGH,GAFOjlB,OAAOilB,EAAK4gD,YAAY93D,SAAS,EAAG,QAClC/N,OAAOilB,EAAK8gD,cAAch4D,SAAS,EAAG,OAGvD,kBAAMo6D,GAELjnE,KAAKokE,kBAAoB,IAAI/iE,QAAQrB,KAAKylE,oBACpCzlE,KAAKokE,kBAEXpkE,KAAKumE,gBACLvmE,KAAKwmE,YAEL,MAAMU,EAAUlnE,KAAKkkE,cAAiB,IAAMlkE,KAAKkkE,cAAiB,GAC5DiD,EAAe7kE,SAASwP,eAAe,qBAAuBo1D,GACpE,IAAIC,EAAc,OAClB,MAAM52D,EAAO42D,EAAat4D,wBAEpBjN,EAAIwX,OAAOguD,eAAej4D,OAASoB,EAAKZ,IAAM,IACjD3P,KAAKS,MAAM6lE,gBACbtmE,KAAKS,MAAM6lE,eAAe7lE,MAAMorD,MAAMn8C,MAAM23D,YAAY,SAAUzlE,EAAE,KAGtE,GAED0C,SAAU,CACTgjE,UAAAA,GACC,MAAuC,QAAhCtnE,KAAKqmC,OAAOf,WAAWrmC,KAC/B,GAED2X,OAAAA,GACC5W,KAAKgkE,eAAiBhkE,KAAK+X,GAAG4E,aAAa,CAAC,WAAY,WACxD3c,KAAKgkE,eAAephE,KAAK,KAAM5C,KAAKikE,iBAAkB,GACvD,EACAzjE,OAAAA,GACCR,KAAKinE,cACN,EACAhkE,SAAU,qxEChMX,IAAAskE,GAAe,CACbpkE,WAAY,CACVqkE,UAAWpmE,SAASomE,WAEtB3nE,MAAO,CAAC,eACRnB,MAAO,CACL+oE,aAAc,CACZ7oE,KAAMuL,OACNpL,QAAS,GAEXs1B,UAAW,CACTz1B,KAAMuL,OACN8M,UAAU,IAGd1Y,KAAIA,KACK,CAAA,GAETuB,QAAS,CACP4nE,aAAc,SAAUnpE,GAExB,GAEFiC,OAAAA,GAAW,EACXyC,SAAmB,ipBCxBrB0kE,GAAe,CACdjpE,MAAM,CACLmc,IAAI/b,OACJgjD,QAAQhjD,OACRijD,SAASjjD,OACT+iD,SAAS/iD,OACTwnB,QAAQxnB,OACR8oE,eAAe9oE,OACf+oE,MAAM/oE,OACNmnE,gBAAgBnnE,OAChBy3D,KAAKz3D,OACLgpE,cAAc,CACblpE,KAAKC,QACLE,SAAQ,IAGVkE,SAAiB,+qCAyBjBqB,SAAS,CACRyjE,eAAgB,WACf,IAAI/nE,KAAK6nE,MAAQ,OAAO,KACxB,IAEIG,EAFahoE,KAAK6nE,MAAMllD,QAAQ,UAAW,IAElBmiB,MAAM,KAEnC,OAAOkjC,EAAW,GAAK,SAAWA,EAAW,EAC9C,EACAC,SAAU,WACT,OAAIjoE,KAAK6hD,UAAY7hD,KAAK8hD,SAAW9hD,KAAK+hD,SAClC,GAAG/hD,KAAK6hD,YAAY7hD,KAAK8hD,WAAW9hD,KAAK+hD,WAExC/hD,KAAK8hD,SAAW9hD,KAAK+hD,SACtB,GAAG/hD,KAAK8hD,WAAW9hD,KAAK+hD,WAEvB/hD,KAAK+hD,SACN/hD,KAAK8hD,QAGL,IAET,EACAomB,MAAO,WACN,OAAIloE,KAAKsmB,SAAWtmB,KAAK4nE,eACjB,CACN7mB,KAAM,OAAO1mC,OAAOra,KAAKsmB,SAASjM,OAAO,IAAMra,KAAK4nE,gBACpDr0B,OAAQvzC,KAAKsmB,QAAQjM,OAAO,IAAMra,KAAK4nE,iBAIjC5nE,KAAKsmB,QAAU,CACrBy6B,KAAM,OAAO1mC,OAAOra,KAAKsmB,SACzBitB,OAAQvzC,KAAKsmB,SACV,IAEN,EACA6hD,WAAY,WACX,OAAOnoE,KAAK6nE,MAAQ,UAAUxtD,OAAOra,KAAK6nE,OAAS,IACpD,EACAO,YAAY,WACX,OAAOpoE,KAAKu2D,KAAO,yBAAyBl8C,OAAOra,KAAKu2D,MAAQ,IACjE,EACApjC,IAAI,WACH,OAAOnzB,KAAKimE,iBAAmB,IAChC,EACAoC,eAAgB,WACf,OAAOroE,KAAK6a,IAAMvH,2BAA2BC,SAAS8G,OAAO/G,2BAA2BE,WAAW6G,OAAO,qBAAqBA,OAAOra,KAAK6a,KAAM,IAClJ,ICzFFytD,GAAe,CACd5pE,MAAO,CACNqC,MAAMjC,OACNypE,gBAAgBhpE,MAChBipE,gBAAgB3pE,SAEjBoE,SAAiB,ujBAejBnD,QAAS,CACRuoE,eAAgB,SAAUxtD,GACzB,OAAOA,EAAMvH,2BAA2BC,SAAS8G,OAAO/G,2BAA2BE,WAAW6G,OAAO,qBAAqBA,OAAOQ,GAAO,IACzI,EACA4tD,uBAAwB,SAAUC,GACjC,OAAKA,EACE,GAAGA,EAAW5mB,SAAW,MAAM4mB,EAAW3mB,UAAY,MAAM2mB,EAAWvoB,aAAengD,KAAKwoE,gBAAkB,IAAInuD,OAAOquD,EAAWvoB,YAAYx9B,QAAQ,IAAK,IAAIA,QAAQ,IAAK,KAAKtI,OAAO,KAAO,KAD/K,IAEzB,ICXFsuD,GAAe,CACdpxC,uBAAsBA,KACd,CACN/c,OAAQ,MACRC,IAAK,iDAGP+c,mBAAmBzS,IACX,CACNvK,OAAQ,MACRC,IAAK,iEACL5G,OAAQ,CAAEkR,qBCvBb6jD,GAAe,CACfrqE,KAAIA,KACG,CACL+3B,YAAY,KACZ5L,SAAU,KACVm+C,QAAS,KACTC,OAAQ,KACRC,QAAS,KACTC,IAAK,KACLC,eAAgB,KAChBC,KAAM,KACNC,eAAgB,OAGlBzqE,MAAM,CACLopE,cAAc,CACblpE,KAAKC,QACLE,SAAQ,IAGVoE,WAAW,CACVwkE,qBACAW,0BAEDrlE,SAAiB,++EAkDjBqB,SAAS,CAGR8kE,iBAAkB,WACjB,IAAIC,EAAa,GAqBjB,OAnBI9pE,MAAM4I,QAAQnI,KAAK6oE,UAAmC,GAAvB7oE,KAAK6oE,QAAQ1iE,QAAe5G,MAAM4I,QAAQnI,KAAKgpE,MAA2B,GAAnBhpE,KAAKgpE,IAAI7iE,OAElGkjE,EAAW/iE,KAAK,CAAEvF,MAAO,GAAGf,KAAK+X,GAAGC,EAAE,SAAU,0BAA0BhY,KAAK+X,GAAGC,EAAE,yBAA0B,eAAiBwwB,WAAY,IAAIxoC,KAAK6oE,WAAY7oE,KAAKgpE,QAIrKK,EAAW/iE,KAAK,CAAEvF,MAAOf,KAAK+X,GAAGC,EAAE,SAAU,uBAAwBwwB,WAAYxoC,KAAK6oE,UACtFQ,EAAW/iE,KAAK,CAAEvF,MAAOf,KAAK+X,GAAGC,EAAE,yBAA0B,aAAcwwB,WAAYxoC,KAAKgpE,OAEzFzpE,MAAM4I,QAAQnI,KAAK8oE,SAAiC,GAAtB9oE,KAAK8oE,OAAO3iE,QAAe5G,MAAM4I,QAAQnI,KAAK+oE,UAAmC,GAAvB/oE,KAAK+oE,QAAQ5iE,OAExGkjE,EAAW/iE,KAAK,CAAEvF,MAAOf,KAAK+X,GAAGC,EAAE,yBAA0B,gDAAiDwwB,WAAY,IAAIxoC,KAAK8oE,UAAW9oE,KAAK+oE,YAInJM,EAAW/iE,KAAK,CAAEvF,MAAOf,KAAK+X,GAAGC,EAAE,yBAA0B,+BAAgCwwB,WAAYxoC,KAAK8oE,SAC9GO,EAAW/iE,KAAK,CAAEvF,MAAOf,KAAK+X,GAAGC,EAAE,yBAA0B,4BAA6BwwB,WAAYxoC,KAAK+oE,WAGrGM,CACR,EACAC,WAAY,WAEX,GAAItpE,KAAKs2B,aAAgBt2B,KAAKs2B,YAAYvR,eAE1C,MAAO,+DAAiE/kB,KAAKs2B,YAAYvR,cAC1F,GAEAvkB,OAAAA,GACCR,KAAK+c,KACH3H,KAAKuzD,GAAepxC,0BACpB30B,KAAK2G,GAAOA,EAAIhL,MAChBqE,KAAK2mE,IACL/pE,OAAOmjD,OAAO3iD,KAAMupE,IAEvB,GCvGDC,GAAe,CACd11C,QAAOA,CAACC,EAAYC,EAAQ,KAAMC,EAAQ,KAAMC,EAAS,QACjD,CACN1Z,OAAQ,MACRC,IAAK,+BACL5G,OAAQ,CACPkgB,gBACIC,EAAU,CAAEA,WAAY,MACxBC,EAAU,CAAEA,WAAY,MACxBC,EAAW,CAAEA,YAAa,CAAA,KAKjCC,QAAOA,CAACC,EAAO,EAAGC,EAAY,GAAIJ,KAC1B,CACNzZ,OAAQ,MACRC,IAAK,+BACL5G,OAAQ,CACPugB,OACAC,YACAJ,aAKHK,KAAKC,IACG,CACN/Z,OAAQ,MACRC,IAAK,4BACL5G,OAAQ,CAAE0gB,WAGZC,gBAAeA,KACP,CACNha,OAAQ,MACRC,IAAK,yCAGPga,aAAYA,KAEJ,CACNja,OAAQ,MACRC,IAAK,oDCtDRgvD,GAAe,CACdnrE,KAAM,gBACL6E,WAAY,CACVokE,cACHqB,2BAECrqE,KAAIA,KACK,CACLu1B,QAAS,KACT2zC,aAAc,EACdpzC,UAAW,GACdD,KAAK,IAGNpmB,MAAM,CACP,yBAAyB,SAASimB,GACjCj0B,KAAK0pE,WACN,GAECplE,SAAS,CACV2vB,QAAS,WACR,OAAOj0B,KAAK+X,GAAGmsB,cAAcjlC,KAC9B,GAECa,QAAS,CACT4pE,SAAAA,GACC,OAAO1pE,KAAK+c,KACV3H,KAAKo0D,GAAOr1C,QAAQn0B,KAAKo0B,KAAMp0B,KAAKq0B,UAAWr0B,KAAKi0B,UACpDrxB,KAAK2G,GAAOA,EAAIhL,MAChBqE,KAAKX,IACLjC,KAAK8zB,QAAU7xB,EAEfK,SAAS8+B,iBAAiB,uBAAuBx6B,QAAS0N,IACzDA,EAAGiF,iBAAiB,QAAU/U,IAC7BA,EAAIW,iBACJuT,EAAU9X,MAAM0T,EAAG+5C,QAAQh3B,SACzBz0B,KAAK,KACL+mE,MAAMp+D,IAAI+I,EAAGyxB,MACXnjC,KAAM2G,IAENq8C,SAAWA,WAEX7xC,MAAOwH,GAAQzT,QAAQC,MAAM,SAAUwT,MAEzCxH,MAAM,YAIVzR,SAAS8+B,iBAAiB,oBAAoBx6B,QAAS0N,IACtDA,EAAGyxB,KAAOzxB,EAAG+5C,QAAQtoB,KAAKpjB,QACzB,UACArP,2BAA2BC,YAG7B9R,IAAIokD,SAAS,KACZvjD,SAAS8+B,iBAAiB,gBAAgBx6B,QAAS0N,IAClDA,EAAG5F,UAAUnI,IAAI,iBAElBjE,SAAS8+B,iBAAiB,QAAQx6B,QAAS0N,IAC1CA,EAAG5F,UAAUnI,IAAI,SACjB+N,EAAG5F,UAAUnI,IAAI,wBAGlBjE,SAAS8+B,iBAAiB,WAAWx6B,QAAS0N,IAC7CA,EAAG5F,UAAUnI,IAAI,aAKtB,EACAqjE,kBAAAA,CAAmBrrE,GAClByB,KAAK+c,KACH3H,KAAKo0D,GAAOr1C,QAAQ51B,EAAK61B,KAAM71B,EAAK4N,OACpCvJ,KAAK2G,GAAOA,EAAIhL,MAChBqE,KAAKX,IACLjC,KAAK8zB,QAAU7xB,GAGlB,GAEA2U,OAAAA,GACE5W,KAAK0pE,YAEP1pE,KAAK+c,KACH3H,KAAKo0D,GAAOh1C,mBACZ5xB,KAAK2G,GAAOA,EAAIhL,MAChBqE,KAAKX,IACLjC,KAAKynE,aAAexlE,GAEtB,EACAgB,SAAmB,6pBC/FrB4mE,GAAe,CACdvrE,KAAM,gBACNC,KAAIA,KACI,CACNurE,WAAY,OAGXprE,MAAM,CACJo1B,QAAQ,CACJl1B,KAAKE,OACLmY,UAAS,GAEhB8c,WAAW,CACZn1B,KAAM,CAACuL,OAAQrL,UAGhBgB,QAAS,CACRiqE,oBAAAA,CAAqBle,GAGTA,EAAMzqB,iBAAiB,SAC/Bx6B,QAAQoR,IACV,MAAMuxB,EAAcvxB,EAAEuxB,YAAY1L,OAC5BmsC,EAAW1nE,SAASC,cAAc,KACxCynE,EAASzgC,YAAcA,EACvBvxB,EAAEiyD,WAAWC,aAAaF,EAAUhyD,KAI1B6zC,EAAMzqB,iBAAiB,MAC/Bx6B,QAAQujE,IACV5qE,MAAMwS,KAAKo4D,EAAE1X,UAAU7rD,QAAQwjE,IAC9B,MAAMjhE,EAAI7G,SAASC,cAAc,KACjC4G,EAAEogC,YAAc6gC,EAAG7gC,YACnB4gC,EAAEF,WAAWjnE,YAAYmG,KAE1BghE,EAAEF,WAAW5nE,YAAY8nE,KAKf5qE,MAAMwS,KAAK85C,EAAMzqB,iBAAiB,OAAO33B,OAAO6K,GAAMA,EAAG+1D,YAAc,KAC/EzjE,QAAQigC,IACV,GAAIA,EAAQyjC,YAAY/oC,WAAaC,KAAK+oC,WAAa1jC,EAAQyjC,WAAWnkE,OAAS,GAAI,CACtF,MAAMgD,EAAI7G,SAASC,cAAc,KACjC4G,EAAEnG,YAAY6jC,EAAQyjC,YACtBzjC,EAAQ7jC,YAAYmG,EACrB,IAIW5J,MAAMwS,KAAK85C,EAAMzqB,iBAAiB,OAC1Cx6B,QAAQ4jE,IAERA,EAAG/X,SAAStsD,OAAS,IACvBqkE,EAAGzI,UAAYxiE,MAAMwS,KAAKy4D,EAAGC,YAAYpmC,KAAKqmC,GAAMA,EAAGnhC,aAAaA,eAK5DsiB,EAAMzqB,iBAAiB,KAC/Bx6B,QAAQuC,IACTA,EAAEuG,MAAM23D,YAAY,YAAa,cACjCl+D,EAAEuG,MAAM23D,YAAY,cAAe,UACnCl+D,EAAEuG,MAAM23D,YAAY,YAAa,UAEnC,GAEE7mE,OAAAA,GAEF,IAAImqE,EAASroE,SAAS0P,uBAAuB,eAE7C,IAAK,IAAI65C,KAAS8e,EACjB3qE,KAAK+pE,qBAAqBle,GAC1B,IAAIN,UAAUM,EAAO,CACpB0E,OAAQ,iBAERE,eAAgB,CACfhG,UAAW,OACX8E,WAAW,EACXj6C,SAAU,WAKb,IAAIvU,EAAQuB,SAASsoE,qBAAqB,MAG1C,GAFA7pE,EAAQA,EAAMoF,OAASpF,EAAM,GAAK,KAE9BA,GAASA,EAAM8pE,UACnB,CACC,IAAIC,EAAY/pE,EAAM8pE,UAClBE,EAAoB,IAAI7jC,OAAO,+BAC/B8jC,EAA2BF,EAAU9lC,MAAM+lC,GAC/C,GAAGC,EACH,CACCF,EAAYE,EAAyB,GACrCF,EAAYA,EAAUnoD,QAAQ,IAAI,KAClC,IAAIsoD,EAAe3oE,SAASC,cAAc,KAC1C0oE,EAAallC,KAAOzyB,2BAA2BC,SAAWD,2BAA2BE,UAAY,kCAAoCs3D,EACrIG,EAAajoE,YAAYjC,EAAMsQ,WAAU,IACzCtQ,EAAMmqE,YAAYD,GAElB,IAAIE,EAAc7oE,SAAS8+B,iBAAiB,qCAC5C,IAAI,IAAIgqC,KAAcD,EACrBC,EAAWrlC,KAAOklC,EAAallC,IAEjC,MAGCj+B,QAAQC,MAAM,uDAAuD+iE,KAGtE,MACD,CAEA,MAGMO,GAHS,IAAIC,WACAC,gBAAgB,QAAQvrE,KAAK8zB,gBAAiB,aAEjDxiB,cAAc,OAC9B,GAAG+5D,GAAOA,EAAItqE,MACd,CACC,MAAMyqE,EAAgB,CAAA,EACtB,IAAK,IAAI3Y,KAAQwY,EAAIvlC,WACpB0lC,EAAc3Y,EAAKv0D,MAAQu0D,EAAK5zD,MAGjCe,KAAK8pE,WAAa0B,CACnB,CAEA1jE,QAAQC,MAAM,4DAEZ,EACA9E,SAAmB,kSCpIvB,MAKMwoE,GAAY,CACjBC,SAAS,CACR,CACCC,SAAU,EACVC,MAAO,IAAI1kC,OAAO,iDAClB2kC,YAAav4D,2BAA2BC,SAAWD,2BAA2BE,UAAY,sBAC1Fs4D,2BATY,iBAWb,CACCH,SAAU,EACVC,MAAO,IAAI1kC,OAAO,yBAClB2kC,YAAav4D,2BAA2BC,SAAWD,2BAA2BE,UAAY,oBAE3F,CACCm4D,SAAU,EACVC,MAAO,IAAI1kC,OAAO,yBAClB2kC,YAAav4D,2BAA2BC,SAAWD,2BAA2BE,WAE/E,CACCm4D,SAAU,GACVC,MAAO,IAAI1kC,OAAO,WAClB2kC,YAAav4D,2BAA2BC,WAG1Cw4D,SAAS,CACR,CAAA,IAKIC,GAAiBP,GAAUC,SAC/BtkE,KAAK,CAACC,EAAGC,IACFD,EAAEskE,SAAWrkE,EAAEqkE,UAEtBrjE,IAAIsjE,IACG,CACNA,MAAOA,EAAMA,MACbC,YAAaD,EAAMC,YACnBC,2BAA4BF,EAAME,8BAkB9B,SAASG,GAA0BC,GACzC,IAAK,IAAIN,MAACA,EAAKC,YAACA,EAAWC,2BAACA,KAA+BE,GAAe,CAEzE,IAAIhnC,EAAQknC,EAAmBlnC,MAAM4mC,GACrC,GAAI5mC,EAAO,CACV,IAAImnC,EAAWD,EAAmBvpD,QAAQipD,EAAOC,GAEhD,OAAQC,GACP,IAAK,mBAEJK,EAAWA,EAAS9xD,OAAO,IAAI2qB,EAAM,MACrC,IAAK,IAAIonC,KAAmBpnC,EAAMsR,MAAM,GACvC61B,EAAWA,EAAS9xD,OAAO,IAAI+xD,KAEhC,MACD,IAAK,gBACJ,IAAK,IAAIA,KAAmBpnC,EAAMsR,MAAM,GACvC61B,EAAWA,EAAS9xD,OAAO,IAAI+xD,KAOnC,OAAOD,CACR,CACD,CAEA,OAAOD,CACR,CA1CuBT,GAAUM,SAC/B3kE,KAAK,CAACC,EAAGC,IACFD,EAAEskE,SAAWrkE,EAAEqkE,UAEtBrjE,IAAIsjE,IACG,CACNA,MAAOA,EAAMA,MACbC,YAAaD,EAAMC,YACnBC,2BAA4BF,EAAME,8BCxDrC,IAAAhwC,GAAe,CACdx9B,KAAM,mBACHI,MAAM,CACJo1B,QAAQ,CACJl1B,KAAKE,OACLmY,UAAS,IAGlBnX,QAAS,CACRiqE,oBAAAA,CAAqBle,GAGTA,EAAMzqB,iBAAiB,SAC/Bx6B,QAAQoR,IACV,MAAMuxB,EAAcvxB,EAAEuxB,YAAY1L,OAC5BmsC,EAAW1nE,SAASC,cAAc,KACxCynE,EAASzgC,YAAcA,EACvBvxB,EAAEiyD,WAAWC,aAAaF,EAAUhyD,KAI1B6zC,EAAMzqB,iBAAiB,MAC/Bx6B,QAAQujE,IACV5qE,MAAMwS,KAAKo4D,EAAE1X,UAAU7rD,QAAQwjE,IAC9B,MAAMjhE,EAAI7G,SAASC,cAAc,KACjC4G,EAAEogC,YAAc6gC,EAAG7gC,YACnB4gC,EAAEF,WAAWjnE,YAAYmG,KAE1BghE,EAAEF,WAAW5nE,YAAY8nE,KAKf5qE,MAAMwS,KAAK85C,EAAMzqB,iBAAiB,OAAO33B,OAAO6K,GAAMA,EAAG+1D,YAAc,KAC/EzjE,QAAQigC,IACV,GAAIA,EAAQyjC,YAAY/oC,WAAaC,KAAK+oC,WAAa1jC,EAAQyjC,WAAWnkE,OAAS,GAAI,CACtF,MAAMgD,EAAI7G,SAASC,cAAc,KACjC4G,EAAEnG,YAAY6jC,EAAQyjC,YACtBzjC,EAAQ7jC,YAAYmG,EACrB,IAIW5J,MAAMwS,KAAK85C,EAAMzqB,iBAAiB,OAC1Cx6B,QAAQ4jE,IAERA,EAAG/X,SAAStsD,OAAS,IACvBqkE,EAAGzI,UAAYxiE,MAAMwS,KAAKy4D,EAAGC,YAAYpmC,KAAKqmC,GAAMA,EAAGnhC,aAAaA,eAK5DsiB,EAAMzqB,iBAAiB,KAC/Bx6B,QAAQuC,IACTA,EAAEuG,MAAM23D,YAAY,YAAa,cACjCl+D,EAAEuG,MAAM23D,YAAY,cAAe,UACnCl+D,EAAEuG,MAAM23D,YAAY,YAAa,UAEnC,EACAgF,cAAAA,GAEc9sE,MAAMwS,KAAKzP,SAAS0P,uBAAuB,gBAEjDpL,QAAQ,CAACilD,EAAO/kD,KACtB9G,KAAK+pE,qBAAqBle,GAE1B,IAAIN,UAAUM,EAAO,CACpB/kD,MAAOA,EACPypD,OAAQ,cAERE,eAAgB,CACfhG,UAAW,OACX8E,WAAW,EACXj6C,SAAU,aAKbhT,SAAS8+B,iBAAiB,uBAAuBx6B,QAAS0N,IACzDA,EAAGiF,iBAAiB,QAAU/U,IAC7BA,EAAIW,iBACJuT,UAAU9X,MAAM0T,EAAG+5C,QAAQh3B,SAC1Bz0B,KAAK,KACL+mE,MAAMp+D,IAAI+I,EAAGyxB,MACZnjC,KAAM2G,IAENq8C,SAAWA,WAEX7xC,MAAOwH,GAAQzT,QAAQC,MAAM,SAAUwT,MAExCxH,MAAM,YAGTzR,SAAS8+B,iBAAiB,oBAAoBx6B,QAAS0N,IACtDA,EAAGyxB,KAAOzxB,EAAG+5C,QAAQtoB,KAAKpjB,QACzB,UACArP,2BAA2BC,YAI7BjR,SAAS8+B,iBAAiB,UAAUx6B,QAASigC,IAC5C,IACIylC,EAAWL,GADIplC,EAAQliC,aAAa,SAExCkiC,EAAQd,KAAOumC,IAGhBhqE,SAAS8+B,iBAAiB,6BAA6Bx6B,QAASigC,IAC1B,sBAAjCA,EAAQn3B,MAAMs3B,kBACjBH,EAAQn3B,MAAMs3B,gBAAkB,yBAE9BH,EAAQv1B,cAAc,gCACxBu1B,EAAQn3B,MAAMs3B,gBAAkB,wBAGnC,GAED54B,OAAAA,GACCpO,KAAKqsE,gBACN,EACA7rE,OAAAA,GACCR,KAAKqsE,gBACN,EACGppE,SAAmB,sRCnHvBspE,GAAe,CACdjuE,KAAM,mBACNI,MAAO,CACNq1B,WAAY,CACXn1B,KAAM,CAACuL,OAAQrL,QACfmY,UAAU,GAEX+c,QAAS,CACRp1B,KAAM,CAACE,OAAQqL,QACfpL,QAAS,MAEVm1B,SAAU,CACTt1B,KAAM,CAACE,OAAQqL,QACfpL,QAAS,OAGXoE,WAAY,CACX0mE,wBACA2C,aCzBa,CACdluE,KAAM,kBACNI,MAAM,CACJo1B,QAAQ,CACPl1B,KAAKE,OACLmY,UAAS,IAGZnX,QAAS,CACRiqE,oBAAAA,CAAqBle,GAGTA,EAAMzqB,iBAAiB,SAC/Bx6B,QAAQoR,IACV,MAAMuxB,EAAcvxB,EAAEuxB,YAAY1L,OAC5BmsC,EAAW1nE,SAASC,cAAc,KACxCynE,EAASzgC,YAAcA,EACvBvxB,EAAEiyD,WAAWC,aAAaF,EAAUhyD,KAI1B6zC,EAAMzqB,iBAAiB,MAC/Bx6B,QAAQujE,IACV5qE,MAAMwS,KAAKo4D,EAAE1X,UAAU7rD,QAAQwjE,IAC9B,MAAMjhE,EAAI7G,SAASC,cAAc,KACjC4G,EAAEogC,YAAc6gC,EAAG7gC,YACnB4gC,EAAEF,WAAWjnE,YAAYmG,KAE1BghE,EAAEF,WAAW5nE,YAAY8nE,KAKf5qE,MAAMwS,KAAK85C,EAAMzqB,iBAAiB,OAAO33B,OAAO6K,GAAMA,EAAG+1D,YAAc,KAC/EzjE,QAAQigC,IACV,GAAIA,EAAQyjC,YAAY/oC,WAAaC,KAAK+oC,WAAa1jC,EAAQyjC,WAAWnkE,OAAS,GAAI,CACtF,MAAMgD,EAAI7G,SAASC,cAAc,KACjC4G,EAAEnG,YAAY6jC,EAAQyjC,YACtBzjC,EAAQ7jC,YAAYmG,EACrB,IAIW5J,MAAMwS,KAAK85C,EAAMzqB,iBAAiB,OAC1Cx6B,QAAQ4jE,IAERA,EAAG/X,SAAStsD,OAAS,IACvBqkE,EAAGzI,UAAYxiE,MAAMwS,KAAKy4D,EAAGC,YAAYpmC,KAAKqmC,GAAMA,EAAGnhC,aAAaA,eAK5DsiB,EAAMzqB,iBAAiB,KAC/Bx6B,QAAQuC,IACTA,EAAEuG,MAAM23D,YAAY,YAAa,cACjCl+D,EAAEuG,MAAM23D,YAAY,cAAe,UACnCl+D,EAAEuG,MAAM23D,YAAY,YAAa,UAEnC,GAED7mE,OAAAA,GAEcjB,MAAMwS,KAAKzP,SAAS0P,uBAAuB,gBAEjDpL,QAAQ,CAACilD,EAAO/kD,KACtB9G,KAAK+pE,qBAAqBle,GAE1B,IAAIN,UAAUM,EAAO,CACpB/kD,MAAOA,EACPypD,OAAQ,cAERE,eAAgB,CACfhG,UAAW,OACX8E,WAAW,EACXj6C,SAAU,aAKbhT,SAAS8+B,iBAAiB,uBAAuBx6B,QAAS0N,IACzDA,EAAGiF,iBAAiB,QAAU/U,IAC5BA,EAAIW,iBACJuT,UAAU9X,MAAM0T,EAAG+5C,QAAQh3B,SAC3Bz0B,KAAK,KACJ+mE,MAAMp+D,IAAI+I,EAAGyxB,MACbnjC,KAAM2G,IAENq8C,SAAWA,WAEX7xC,MAAOwH,GAAQzT,QAAQC,MAAM,SAAUwT,MAExCxH,MAAM,YAGTzR,SAAS8+B,iBAAiB,oBAAoBx6B,QAAS0N,IACtDA,EAAGyxB,KAAOzxB,EAAG+5C,QAAQtoB,KAAKpjB,QACzB,UACArP,2BAA2BC,YAI7BjR,SAAS8+B,iBAAiB,UAAUx6B,QAASigC,IAC5C,IACIylC,EAAWL,GADIplC,EAAQliC,aAAa,SAExCkiC,EAAQd,KAAOumC,IAGhBhqE,SAAS8+B,iBAAiB,6BAA6Bx6B,QAASigC,IAC1B,sBAAjCA,EAAQn3B,MAAMs3B,kBACjBH,EAAQn3B,MAAMs3B,gBAAkB,yBAE9BH,EAAQv1B,cAAc,gCACxBu1B,EAAQn3B,MAAMs3B,gBAAkB,yBAIlCvlC,IAAIokD,SAAS,KACZvjD,SAAS8+B,iBAAiB,gBAAgBx6B,QAAS0N,IAClDA,EAAG5F,UAAUnI,IAAI,iBAElBjE,SAAS8+B,iBAAiB,QAAQx6B,QAAS0N,IAC1CA,EAAG5F,UAAUnI,IAAI,SACjB+N,EAAG5F,UAAUnI,IAAI,wBAGlBjE,SAAS8+B,iBAAiB,WAAWx6B,QAAS0N,IAC7CA,EAAG5F,UAAUnI,IAAI,WAKpB,EACAtD,SAAmB,wQD1GlB64B,WACA2wC,eE1Ba,CACdnuE,KAAM,iBACNI,MAAO,CACNo1B,QAAS,CAAEl1B,KAAME,OAAQmY,UAAU,IAEpC3S,SAAU,CACTooE,MAAAA,GACC,MAEMC,GAFS,IAAIrB,WACAC,gBAAgB,QAAQvrE,KAAK8zB,gBAAiB,aAC9CxiB,cAAc,eAEjC,IAAKq7D,EACJ,MAAO,GAGR,OAAOV,GADGU,EAAOhoE,aAAa,QAAU,GAEzC,GAED1B,SAAU,uQFUV1E,IAAAA,GACC,MAAO,CACNquE,aAAc,KACd94C,QAAS,KACT+4C,oBAAqB7sE,KAAK+zB,WAE5B,EACAj0B,QAAS,CACRgtE,YAAAA,GACC9sE,KAAK+c,KACH3H,KAAKo0D,GAAO11C,QAAQ9zB,KAAK6sE,oBAAqB7sE,KAAKg0B,QAASh0B,KAAKi0B,QAASj0B,KAAKk0B,WAC/EtxB,KAAK2G,IACLvJ,KAAK+sE,UAAU,WACd/sE,KAAK8zB,QAAUvqB,EAAIhL,KAAKu1B,QACxB9zB,KAAK4sE,aAAerjE,EAAIhL,KAAKK,IAC9B,IAEH,GAEDoP,MAAM,CACLimB,QAAS,SAASA,GACjBj0B,KAAK8sE,cACN,EACA,2BAA2B1M,GAC1BpgE,KAAK6sE,oBAAsBzM,EAC3BpgE,KAAK8sE,cACN,GAEDxoE,SAAU,CACT2vB,OAAAA,GACC,OAAOj0B,KAAK+X,GAAGmsB,cAAcjlC,KAC9B,EACA+tE,mBAAoB,WACnB,OAAQhtE,KAAK4sE,cACZ,IAAK,uBACJ,MAAO,uBACR,IAAK,OACJ,MAAO,eACR,IAAK,SACJ,MAAO,iBACR,QACC,MAAO,UAEV,GAEDh2D,OAAAA,GACC5W,KAAK8sE,cACN,EACA7pE,SAAmB,0RG1Eb,MAAMgqE,GAAwB,OAErC,IAAAC,GAAe,CACd5uE,KAAM,kBACN6E,WAAY,CACXu6C,gBAEDh/C,MAAM,CACLkc,SAAUpb,OACVmgD,cAAengD,QAEhB8E,SAAU,CACTs7C,UAAAA,GACC,OAAO5/C,KAAK2/C,eAAeE,YAAc1S,MAAMC,SAAS8E,MAAM5E,QAAQttC,KAAK4a,SAASE,UAAUikC,WAC/F,EACAgB,WAAAA,GACC,OAAO//C,KAAK2/C,eAAeh1C,MAAQsiE,EACpC,GAEDntE,QAAQ,CACPsgD,gBAAAA,CAAiB/I,EAAKgJ,GACrB,OAAOrgD,KAAKsgD,iBAAiBD,EAAShJ,EACvC,EACAiJ,gBAAAA,CAAiBD,EAAShJ,GACzB,MAAM1sC,EAAO01C,EAAQ,GAAGtf,cAAgBsf,EAAQ/J,MAAM,GAChDuJ,EAAaxI,EAAI0H,YAEvB/+C,KAAKugD,QAAQj6C,KAAK,CACjBhI,KAAM,kBACNuV,OAAQ,CACPlJ,OACAk1C,aACAv8B,WAAYtjB,KAAK2/C,cAAcr8B,aAGlC,EACAq6B,cAAAA,CAAehR,EAAOC,GACrB,MAAO,CACN5sC,KAAK+c,KAAK3H,KAAK2+B,GAAU1wB,YAAYrjB,KAAK2/C,cAAcr8B,WAAYqpB,EAAMoS,YAAanS,EAAImS,cAC3F/+C,KAAK+c,KAAK3H,KAAK2+B,GAAUrwB,qBAAqB1jB,KAAK2/C,cAAcr8B,WAAYqpB,EAAMoS,YAAanS,EAAImS,cAEtG,GAED97C,SAAkB,0dC/CnBkqE,GAAe,CACdC,UAASA,KACD,CACN5yD,OAAQ,MACRC,IAAK,sCAGP4yD,iBAAgBA,KACR,CACN7yD,OAAQ,MACRC,IAAK,6CAGP6yD,0BAA0BzyD,IAClB,CACNL,OAAQ,MACRC,IAAK,oDACL5G,OAAQ,CAAEgH,SAGZ0yD,yBAAyBxuC,IACjB,CACNvkB,OAAQ,MACRC,IAAK,mDACL5G,OAAQ,CAAE25D,iBAAkBzuC,EAAOyuC,iBAAkBhhD,YAAauS,EAAOvS,eAG3EihD,kCAAkCr8C,IAC1B,CACN5W,OAAQ,OACRC,IAAK,4DACL5G,OAAQud,EACR3uB,OAAQ,CAACirE,QAAS,CAAE,eAAgB,0BAGtCC,uCAAuCv8C,IAC/B,CACN5W,OAAQ,OACRC,IAAK,iEACL5G,OAAQud,EACR3uB,OAAQ,CAACirE,QAAS,CAAE,eAAgB,0BAGtCE,8BAA8Bx2C,IACtB,CACN5c,OAAQ,MACRC,IAAK,wDACL5G,OAAQ,CAAEg6D,QAASz2C,KAGrB02C,uBAAAA,CAAwBC,GAEvB,IAAIC,EAAaD,EAAOx6C,MACxB,GAAGw6C,EAAOx6C,iBAAiB9X,KAAM,CAKhCuyD,EAAa,GAJAD,EAAOx6C,MAAMwzC,iBACZjoE,OAAOivE,EAAOx6C,MAAMuzC,WAAa,GAAGj6D,SAAS,EAAG,QAClD/N,OAAOivE,EAAOx6C,MAAMszC,WAAWh6D,SAAS,EAAG,MAGxD,CAEA,MAAO,CACN2N,OAAQ,OACRC,IAAK,kDACL5G,OAAQ,CACPo6D,YAAaF,EAAOE,YACpBC,mBAAoBH,EAAO5tB,YAAY+tB,mBACvC36C,MAAOy6C,EACPvhD,KAAMshD,EAAOI,QACbC,iBAAkBL,EAAOK,eACzBC,kBAAmBN,EAAOM,mBAAqB,GAC/CC,UAAWP,EAAOO,UAClBC,UAAWR,EAAOQ,UAClBjN,OAAQyM,EAAOzM,OACfkM,iBAAkBO,EAAOP,iBACzBgB,mBAAoBT,EAAOS,oBAG9B,EACAC,0BAA0BR,IAClB,CACNzzD,OAAQ,OACRC,IAAK,oDACL5G,OAAQ,CAAEo6D,iBAGZS,iBAAgBA,CAACn7C,EAAO26C,EAAoB/tB,EAAamhB,EAAQ8M,EAAgBO,EAAmBL,KAC5F,CACN9zD,OAAQ,OACRC,IAAK,2CACL5G,OAAQ,CAAE0f,QAAO26C,qBAAoB/tB,cAAamhB,SAAQ8M,iBAAgBO,oBAAmBL,eAG/FM,eAAejqD,IACP,CACNnK,OAAQ,OACRC,IAAK,yCACL5G,OAAQ,CAAE8Q,eAGZkqD,iBAAgBA,KACR,CACNr0D,OAAQ,MACRC,IAAK,6CAIPoQ,SAAQA,KACA,CACNrQ,OAAQ,MACRC,IAAK,qCAGPq0D,iCAAgCA,CAAC/pD,EAAgBgqD,EAAU,KACnD,CACNv0D,OAAQ,MACRC,IAAK,2DACL5G,OAAQ,CAAEkR,iBAAgBgqD,aAI5BC,iBAAgBA,KACR,CACNx0D,OAAQ,MACRC,IAAK,6CAGPw0D,oCAAoC79C,IAC5B,CACN5W,OAAQ,OACRC,IAAK,8DACL5G,OAAQud,EACR3uB,OAAQ,CAACirE,QAAS,CAAE,eAAgB,0BAGtCwB,yCAAwCA,CAACC,EAAc3iD,KAC/C,CACNhS,OAAQ,OACRC,IAAK,mEACL5G,OAAQ,CAACs7D,eAAc3iD,kBC3InB,MAAM4iD,GAAa,CACzB9wE,KAAM,aACNI,MAAO,CACNyF,OAAQ,CACPvF,KAAMC,QACNE,SAAS,IAGXkE,SAAU,kXCFEosE,GAAsB,CAClC/wE,KAAM,sBACN6E,WAAY,CACXkxD,UACAh2D,UACAylE,YAAa1iE,SAAS2iE,YACtBuL,SAAUluE,SAASmuE,SACnBC,SAAUpuE,SAASquE,SACnBC,SAAUtuE,SAASuuE,SACnBC,UAAWxuE,SAASyuE,UACpBC,aAAc1uE,SAAS2uE,aACvBC,QAAS5uE,SAASq6B,QAClBw0C,QAAS7uE,SAAS8uE,sBAClBniC,EACAqhC,eAEDnrE,OAAQ,CAAC,eAAgB,WAAY,aAAc,eACnDvF,MAAO,CACNyxE,cAAe,CACdvxE,KAAMY,OACNT,QAAS,MAEVqxE,SAAU,CACTxxE,KAAMC,QACNE,SAAS,IAGXR,KAAIA,KACI,CACNod,SAAS,EACT00D,eAAe,EACfC,gBAAiB,KACjBC,mBAAoBj9D,2BAA2B8wB,iBAC/Cze,KAAMlkB,IAAIuiC,SAAS,CAClB/P,QAAS,GACTu8C,SAAU,GACVC,YAAa,GACbC,cAAe,GACfC,iBAAkB,GAClBC,sBAAuB,GACvBC,aAAc,MAIjB/wE,QAAS,CACRgxE,kBAAAA,CAAmB/C,GAClB,MAAMgD,EAAU/wE,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQshD,EAAOthD,MAEjE,OAAGskD,GAAS5wB,YACJ4wB,GAAS/rB,QAAUhlD,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gCAAkC,KAAOhY,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gCAAkC,MAC5H,IAAtB+4D,GAASI,UAAsBpD,EAAOthD,KAGxC,GAFAzsB,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,6BAIpC,EACA,cAAMo5D,CAASrD,EAAQsD,GAAY,GAClC,OAAItD,EAAOj3D,KAAK3Q,QAKbkrE,IAOK,UANErxE,KAAKu7B,UAAUlE,QAAQ,CAC/BoE,QAASz7B,KAAK+X,GAAGC,EAAE,wCACnBmoB,YAAangC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCACxCooB,YAAa,mBACbC,YAAargC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wBACxCsoB,YAAa,wBAVdtgC,KAAKu7B,UAAUuE,aAAa9/B,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,+BAChD,EAgBT,EACA,sBAAMs5D,GAEL,UAAWtxE,KAAKoxE,SAASpxE,KAAKswE,iBAAiB,GAE9C,OAAO,EAIR,MAAMl/C,EAAW,IAAIoJ,SACrBpJ,EAAS4J,OAAO,qBAAsBh7B,KAAKswE,gBAAgBpC,oBAC3D98C,EAAS4J,OAAO,mBAAoBh7B,KAAKswE,gBAAgB9C,kBACzDp8C,EAAS4J,OAAO,cAAeh7B,KAAKswE,gBAAgBrC,aACpD78C,EAAS4J,OAAO,cAAeh7B,KAAKmwE,cAAc3jD,aAClD4E,EAAS4J,OAAO,aAAch7B,KAAKmwE,cAAcoB,YAEjDngD,EAAS4J,OAAO,UAAWh7B,KAAK2lB,KAAc,QAAEsO,SAChD7C,EAAS4J,OAAO,WAAYh7B,KAAK2lB,KAAe,UAChDyL,EAAS4J,OAAO,cAAeh7B,KAAK2lB,KAAkB,aACtDyL,EAAS4J,OAAO,gBAAiBh7B,KAAK2lB,KAAoB,eAC1DyL,EAAS4J,OAAO,mBAAoBh7B,KAAK2lB,KAAuB,kBAChEyL,EAAS4J,OAAO,eAAgBh7B,KAAK2lB,KAAmB,cAExD,IAAK,IAAIhgB,EAAI,EAAGA,EAAI3F,KAAKswE,gBAAgBx5D,KAAK3Q,OAAQR,IACrDyrB,EAAS4J,OAAO,OAAQh7B,KAAKswE,gBAAgBx5D,KAAKnR,IAEnD3F,KAAK2b,SAAU,EACf3b,KAAK+c,KAAK3H,KAAK+3D,GAAUM,kCAAkCr8C,IACzDxuB,KAAK2G,IACLvJ,KAAKwxE,gBAAgBjoE,EAAKvJ,KAAKswE,mBAC7B9nB,QAAQ,KACVxoD,KAAK2b,SAAU,IAGjB3b,KAAKS,MAAMgxE,mCAAmCvxE,MAC/C,EACAwxE,cAAAA,CAAe3D,GACd,MAAMtzD,EAAM,yEAAyEszD,EAAOE,2BAA2BjuE,KAAKmwE,cAAc3jD,gCAAgCxsB,KAAKmwE,cAAc3C,mBAE7Lp0D,OAAO+d,KAAK7jB,2BAA2BC,SAAWD,2BAA2BE,UAAYiH,EAE1F,EACAk3D,UAAAA,CAAWC,GACV,MAAM7tD,EAAO,IAAItI,KAAKm2D,GAEhBC,EAAWC,GAAQhzE,OAAOgzE,GAAKjlE,SAAS,EAAG,KAE3CuhC,EAAQyjC,EAAQ9tD,EAAK+iD,WAAa,GAIxC,MAAO,GAHK+K,EAAQ9tD,EAAK8iD,cAGRz4B,KAFJrqB,EAAKgjD,eAGnB,EACA,YAAMzR,CAAOyY,GAGZ,UAAY/tE,KAAKoxE,SAASrD,GAEzB,OAAO,EAGR,GAA8C,QAA3CA,EAAO5tB,aAAa+tB,mBAEtBluE,KAAKswE,gBAAkBvC,EACvB/tE,KAAKS,MAAMgxE,mCAAmCtxE,WACxC,CACN,MAAMixB,EAAW,IAAIoJ,SACrBpJ,EAAS4J,OAAO,qBAAsB+yC,EAAOG,oBAC7C98C,EAAS4J,OAAO,mBAAoBh7B,KAAKmwE,cAAc3C,kBACvDp8C,EAAS4J,OAAO,cAAe+yC,EAAOE,aACtC78C,EAAS4J,OAAO,cAAeh7B,KAAKmwE,cAAc3jD,aAClD4E,EAAS4J,OAAO,aAAch7B,KAAKmwE,cAAcoB,YAEjD,IAAK,IAAI5rE,EAAI,EAAGA,EAAIooE,EAAOj3D,KAAK3Q,OAAQR,IACvCyrB,EAAS4J,OAAO,OAAQ+yC,EAAOj3D,KAAKnR,IAGrC3F,KAAK2b,SAAU,EACf3b,KAAK+c,KAAK3H,KAAK+3D,GAAUQ,uCAAuCv8C,IAC9DxuB,KAAK2G,IACLvJ,KAAKwxE,gBAAgBjoE,EAAKwkE,KACxBvlB,QAAQ,KACVxoD,KAAK2b,SAAU,GAElB,CACD,EACA61D,eAAAA,CAAgBjoE,EAAKwkE,GACE,WAAnBxkE,EAAI4wB,KAAK9Q,QACXrpB,KAAKu7B,UAAUkE,aAAaz/B,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sCAGvD+1D,EAAOgE,aAAc,IAAIt2D,MAAOgrD,cAAc3hC,MAAM,KAAK,QAC9B5jC,IAAxBqI,GAAKhL,MAAMyzE,WACbjE,EAAOiE,SAAWzoE,EAAIhL,KAAKyzE,WAI5BhyE,KAAKu7B,UAAUI,WAAW37B,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,oCAGnDzO,EAAI4wB,KAAK83C,cACXjyE,KAAKu7B,UAAUsE,UAAUt2B,EAAI4wB,KAAK83C,aAIpC,EACAC,eAAexf,GACPA,EAAOz+B,QAEfk+C,wBAAAA,CAAyBpE,GACxB,MAAMgD,EAAU/wE,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQshD,EAAOthD,MACjE,OAAOskD,EAAUA,EAAQ5wB,YAAc,EACxC,GAEDnyC,MAAO,CACNmiE,aAAAA,CAAc/P,GAEbpgE,KAAK2lB,KAAKsO,QAAUmsC,EAAOnsC,QAAUj0B,KAAKuwE,mBAAmBlsC,KAAKgB,GAAQA,EAAKpR,SAAWmsC,EAAOnsC,SAAWj0B,KAAKuwE,mBAAmBlsC,KAAKgB,GAAwB,UAAhBA,EAAKpR,SACtJj0B,KAAK2lB,KAAK6qD,SAAWpQ,EAAOoQ,UAAY,GACxCxwE,KAAK2lB,KAAK8qD,YAAcrQ,EAAOqQ,aAAe,GAC9CzwE,KAAK2lB,KAAK+qD,cAAgBtQ,EAAOsQ,eAAiB,GAClD1wE,KAAK2lB,KAAKgrD,iBAAmBvQ,EAAOuQ,kBAAoB,GACxD3wE,KAAK2lB,KAAKirD,sBAAwBxQ,EAAOwQ,uBAAyB,GAClE5wE,KAAK2lB,KAAKkrD,aAAezQ,EAAOyQ,cAAgB,CAEjD,GAEDvsE,SAAU,CACT8tE,aAAAA,GACC,OAAOpyE,KAAKqyE,YAAcryE,KAAKmwE,cAAcprD,cAC9C,EACAutD,kBAAiBA,KAET,CACNv1C,KAAM,CACLrtB,MAAO,CACN6iE,OAAQ,QAGVpwE,QAAS,CACRuN,MAAO,CACN8iE,QAAS,UAKbC,MAAAA,GACC,OAAOzyE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,0CACnC,EACA06D,wBAAAA,GACC,OAAO1yE,KAAK2lB,KAAK+qD,cAAcvqE,OAAS,GAAKnG,KAAK2lB,KAAKgrD,iBAAiBxqE,OAAS,GAAKnG,KAAK2lB,KAAK6qD,SAASrqE,OAAS,GAAKnG,KAAK2lB,KAAK8qD,YAAYtqE,OAAS,GAAKnG,KAAK2lB,KAAKkrD,aAAe,CACrL,EACA8B,yBAAAA,GACC,OAAO3yE,KAAKqwE,eAAiBrwE,KAAK0yE,wBACnC,EACAE,0BAAAA,GACC,IAAIC,GAAa,EAOjB,OANA7yE,KAAKmwE,eAAe2C,cAAclsE,QAAQmsE,IACT,aAA7BA,EAAO7E,oBACuB,aAA7B6E,EAAO7E,qBACV2E,GAAa,KAGRA,CACR,EACAG,oBAAAA,GACC,MAAO,CACN/zE,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mCAClCnW,MAAO,iBAET,EACAoxE,kBAAAA,GACC,MAAO,CACNh0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,iCAClCnW,MAAO,iBAET,EACAqxE,mBAAAA,GACC,MAAO,CACNj0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCAClCnW,MAAO,iBAET,EACAsxE,kBAAAA,GACC,MAAO,CACNl0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mCAClCnW,MAAO,iBAET,EACAuxE,mBAAAA,GACC,MAAO,CACNn0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCAClCnW,MAAO,iBAET,EACAwxE,mBAAAA,GACC,MAAO,CACNp0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCAClCnW,MAAO,iBAET,EACAyxE,wBAAAA,GACC,MAAO,CACNr0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uCAClCnW,MAAO,iBAET,EACA0xE,4BAAAA,GACC,OAAGvzE,KAAKwzE,WACA,CACNv0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mDAClCnW,MAAO,kBAGD,CACN5C,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gDAClCnW,MAAO,iBAGV,EACA4xE,iCAAAA,GACC,MAAO,CACNx0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gDAClCnW,MAAO,iBAET,EACA6xE,mBAAAA,GACC,MAAO,CACNz0E,MAAOe,KAAK+X,GAAGC,EAAE,iCACjBnW,MAAO,iBAET,EACA8xE,wBAAAA,GACC,MAAO,CACN10E,MAAOe,KAAK+X,GAAGC,EAAE,sCACjBnW,MAAO,iBAET,GAED+U,OAAAA,GAEA,EACApW,OAAAA,GAEA,EACAyC,SAAU,mvgBCrUL2vC,GAAO,gBACPghC,GAAQzmC,MAAMC,SAAS8E,MAAM5E,QAAQsF,IAEpC,SAASihC,GAAkB9F,EAAQiD,GACzC,MAAMz9C,EAAQ4Z,MAAMC,SAASC,QAAQ0gC,EAAOx6C,MAAO,CAAEqf,UAAQjE,MAAM,OAC7DojC,EAAchE,EAAOgE,YAAc5kC,MAAMC,SAASC,QAAQ0gC,EAAOgE,YAAa,CAAEn/B,UAAU,KAChGm7B,EAAO+F,WAAavgD,EAAM4hB,KAAKy+B,GAAO,QAAQnlC,KAC9C,MAAMslC,EAAShC,GAAeA,EAAcx+C,EAG5C,GAAIw6C,EAAOthD,KAAM,CAChB,MAAMwkD,EAA6B,iBAAhBlD,EAAOthD,KAAoBshD,EAAOthD,KAAOukD,EAAa3sC,KAAK2vC,GAAQA,EAAKvnD,MAAQshD,EAAOthD,MAC1G,IAAqB,IAAjBwkD,GAAKjsB,QAAkB,MAAO,YAC7B,IAAqB,IAAjBisB,GAAKjsB,QAAmB,MAAO,gBACzC,CAGA,OAAI+oB,EAAO5tB,aAAagxB,UAAY59C,GAASqgD,GACrC,0BAIJ7F,EAAOK,eACNL,EAAOgE,YACHgC,EAAS,aAAe,YAI5BxgD,EAAQqgD,GAAc,WACtB7F,EAAO+F,YAAc,GAAW,YAC7B,WAIDvgD,EAAQqgD,GAAQ,WAAa,UACrC,CC9BO,MAAMK,GAAoB,CAChC31E,KAAM,oBACN6E,WAAY,CACXysE,UAAWxuE,SAASyuE,UACpBC,aAAc1uE,SAAS2uE,aACvB1xE,uBACA61E,GACA9E,eAED53D,OAAAA,GACC,MAAO,CACNw5D,aAAcvvE,IAAI6C,SAAS,IAAMtE,KAAKgxE,cACtCwC,WAAY/xE,IAAI6C,SAAS,IAAMtE,KAAKwzE,YACpCnB,YAAa5wE,IAAI6C,SAAS,IAAMtE,KAAKqyE,aAEvC,EACA3zE,MAAO,CACNy1E,iBAAkB,CACjBp1E,QAAS,MAEV6b,SAAU,CACThc,KAAMY,OACNyX,UAAU,EACVlY,QAASA,KAAAA,CAAQ8b,IAAK,KACtB7b,UAAUC,GACFA,GAASA,EAAM4b,MAIzBtc,KAAIA,KACI,CACN61E,eAAgB,CAAC,GACjBC,kBAAmB,KACnBrQ,eAAgB,KAChBC,iBAAiB,EACjBtoD,SAAS,EACTq1D,aAAc,KACdjyC,OAAQ,KACRu1C,gBAAiB,KACjBC,sBAAuB,KACvBlC,YAAa,OAGfvyE,QAAS,CACR00E,uBAAAA,CAAwBC,GACvB,IAAIC,GAAe,EACfC,GAAe,EAanB,OAXAF,EAAQ7tE,QAAQoR,IACf,MAAM48D,EAAa50E,KAAKgxE,cAAc3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQzU,EAAEyU,MAC7DmoD,GAAcA,EAAW5vB,UACA,aAAxBhtC,EAAEk2D,mBACJwG,GAAe,EACkB,aAAxB18D,EAAEk2D,qBACXyG,GAAe,MAKXD,GAAgBC,CACxB,EACAE,yBAAAA,CAA0BJ,GACzB,MAAMK,EAAeL,EAAQpwC,KAAKrsB,GAA6B,aAAxBA,EAAEk2D,oBACnC6G,EAAeN,EAAQpwC,KAAKrsB,GAA6B,aAAxBA,EAAEk2D,oBAEzC,IAAI8G,GAAgB,EACjBF,IACFE,GAAgB,EAEhBP,EAAQ7tE,QAAQoR,IACf,MAAM48D,EAAa50E,KAAKgxE,cAAc3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQzU,EAAEyU,MAC7DmoD,GAAcA,EAAW5vB,SACC,aAAxBhtC,EAAEk2D,qBACL8G,GAAgB,MAMpB,IAAIC,GAAgB,EAcpB,OAbGF,IACFE,GAAgB,EAEhBR,EAAQ7tE,QAAQoR,IACf,MAAM48D,EAAa50E,KAAKgxE,cAAc3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQzU,EAAEyU,MAC7DmoD,GAAcA,EAAW5vB,SACC,aAAxBhtC,EAAEk2D,qBACL+G,GAAgB,MAMbD,GAAiBC,CACzB,EACAC,UAAAA,CAAWnxD,GACV,MAAMoxD,EAAWhoC,MAAMC,SAASC,QAAQtpB,EAAM,CAAE6uB,KAAM,kBAAmBjE,MAAM,OAE/E,OADoBxB,MAAMC,SAAS8E,MAAM5E,QAAQ,iBAC5B6nC,CACtB,EACAC,kBAAAA,CAAmBprD,GAClBhqB,KAAK2b,SAAU,EACf3b,KAAKq1E,YAAYrrD,GAASpnB,KAAM2G,IAC/B,MAAM+rE,EAAKt1E,KAAKs0E,iBAAiBjwC,KAAKkxC,GAAgBA,EAAa/H,kBAAoBxjD,EAAQwjD,kBAC/F8H,EAAGxC,cAAgBvpE,EAAIhL,KAAK,GAAGuV,OAE/B,MAAM0hE,EAA0B,OAAZF,EAAG7oD,KAEvB6oD,EAAGxC,cAAclsE,QAAQmnE,IAIxB,GAHAA,EAAOj3D,KAAO,GACdi3D,EAAO0H,iBAAkB,EAEO,OAA7B1H,EAAOG,mBAA6B,CAItC,MAAMwH,GAAS3H,EAAOO,YAAatuE,KAAKk1E,WAAWnH,EAAOx6C,OAC1Dw6C,EAAO0H,gBAAkBC,GAAU11E,KAAK60E,0BAA0BS,EAAGxC,cAOtE,MAAU/E,EAAOO,UAChBP,EAAO0H,iBAAmBz1E,KAAKk1E,WAAWnH,EAAOx6C,OAGjDw6C,EAAO0H,gBAAkB1H,EAAOK,eAI9BoH,IAAazH,EAAO0H,iBAAkB,GAGzC1H,EAAO5tB,YAAcngD,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,qBAAuBH,EAAOG,oBAC1FH,EAAO4H,UAAY9B,GAAkB9F,EAAQ/tE,KAAKgxE,gBAGnDsE,EAAGM,SAAW51E,KAAK61E,cAAcP,GACjCA,EAAG9oD,YAAcxsB,KAAKwsB,YAEtBxsB,KAAKu0E,sBAAwBe,EAE7Bt1E,KAAKS,MAAMq1E,2BAA2B31E,SAEpCqoD,QAAQ,KAAKxoD,KAAK2b,SAAQ,GAC9B,EACAo6D,sBAAsB5Z,GAGd,mKAFKA,EAAKI,WAG+D,aAEjFyZ,eAAAA,CAAgB7Z,GACf,MAAMp3B,EAAMo3B,EAAKI,WAEjB,MAAgB,kBAAbx3B,EAAIp6B,KACC,+JAEgB,wBAAbo6B,EAAIp6B,KACP,iKADD,CAIR,EACAsrE,cAAc9Z,GAEL,mGADIA,EAAKI,WAEA,kEAElB2Z,qBAAqB/Z,GACRA,EAAKI,WAET,4JAEM,IAEf4Z,gBAAgBtkD,GAER,UAAYA,EAAQg2C,MAE5BgO,cAAc9C,IACLA,EAAOqD,UAAYrD,EAAOqD,UAAY,IAAM,IAAMrD,EAAOsD,SAAW,IAAMtD,EAAOuD,WAAavD,EAAOwD,WAAa,IAAMxD,EAAOwD,WAAa,IAErJ,eAAMxQ,CAAUxnE,GAEf,MAAM+1E,EAAkB/1E,EAAK,IAAM,KAC/B+1E,IACJt0E,KAAKs0E,gBAAkBA,EAAgBhsE,IAAIupB,IAGnC,IACHA,EACH7H,QAAS,CACRwC,YAAaxsB,KAAKwsB,YAClBghD,iBAAkB37C,EAAQ27C,iBAC1BgB,mBAAoB38C,EAAQ0/C,WAC5BiF,mBAAoB3kD,EAAQ2kD,mBAC5B7rE,KATS,iBAWV8rE,aAAc5kD,EAAQ6kD,eAAiB,KACvCC,aAAc9kD,EAAQ+kD,eAAiB,KACvC5vB,IAAKn1B,EAAQvN,uBACbuyD,IAAKhlD,EAAQilD,WACbC,KAAM/2E,KAAKm2E,gBAAgBtkD,GAC3B+jD,SAAU51E,KAAK61E,cAAchkD,GAC7B6B,IAAK7B,EAAQmlD,sBACbjzB,MAAOlyB,EAAQkyB,SAIlB,EACAkzB,mBAAAA,GACCj3E,KAAK+c,KAAK3H,KAAK+3D,GAAUG,0BAA0BttE,KAAKwsB,cACtD5pB,KAAK2G,IACFA,GAAKhL,MAAMyB,KAAK+lE,UAAUx8D,EAAIhL,OAEpC,EACA82E,WAAAA,CAAYrrD,GACX,OAAO,IAAI3oB,QAASC,IACnBtB,KAAK+c,KAAK3H,KAAK+3D,GAAUI,yBAAyBvjD,IAChDpnB,KAAK2G,IACLjI,EAAQiI,MAGZ,EACA,kBAAM09D,GACLjnE,KAAKi3E,qBACN,EACAC,+BAAAA,CAAgC/G,GAC/B,IAAIpvE,EAAQ,GAIZ,OAFAA,GAASovE,EAAcpsB,OAAS/jD,KAAK+X,GAAGC,EAAE,wBAEnCjX,CACR,EACAo2E,YAAYhH,GACRA,EAActI,MACT,UAAUsI,EAActI,MAClB,GAEfiJ,kBAAAA,CAAmBX,GAClB,GAAGA,EAAc1jD,MAAQzsB,KAAKgxE,aAAc,CAC3C,MAAMD,EAAU/wE,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQ0jD,EAAc1jD,MACxE,OAAOskD,GAAS5wB,WACjB,CACC,MAAO,EAET,EACAi3B,0BAAAA,CAA2BjH,GAC1B/2D,OAAO+d,KAAKg5C,EAAcsG,aAC3B,EACAY,0BAAAA,CAA2BlH,GAC1B/2D,OAAO+d,KAAKg5C,EAAcwG,aAC3B,GAED3oE,MAAO,CAAA,EAGP1J,SAAU,CACTkvE,UAAAA,GACC,OAAOxzE,KAAKwsB,cAAgBxsB,KAAK4a,SAASC,GAC3C,EACA2R,WAAAA,GACC,OAAOxsB,KAAKm0E,kBAAoBn0E,KAAK4a,UAAUC,KAAO,IACvD,GAED,aAAMjE,GACL5W,KAAKgkE,eAAiBhkE,KAAK+X,GAAG4E,aAAa,CAAC,aAAc,WAC1D3c,KAAKgkE,eAAephE,KAAK,KAAM5C,KAAKikE,iBAAkB,IAEtDjkE,KAAK2b,SAAU,QAET3b,KAAK+c,KAAK3H,KAAK+3D,GAAUtiD,YAAYjoB,KAAK2G,IACzB,WAAnBA,EAAI4wB,KAAK9Q,SACXrpB,KAAKgxE,aAAeznE,EAAIhL,KAAK,GAE7ByB,KAAKs3E,oBAAsBt3E,KAAKgxE,aAAavnE,OAC5CwnE,GAAO1nE,EAAIhL,KAAK,GAAGW,SAAS+xE,EAAIxkD,UAGhC+7B,QAAQ,KACVxoD,KAAK2b,SAAU,IAIhB3b,KAAK+c,KAAK3H,KAAK+3D,GAAU0B,oBAAoBjsE,KAAK2G,IACjDvJ,KAAKq0E,kBAAoB9qE,EAAIhL,OAC3BwV,MAAMmC,IACRlW,KAAK2b,SAAU,IAIhB3b,KAAK+c,KAAK3H,KAAK+3D,GAAUE,oBAAoBzqE,KAAK2G,IACjDvJ,KAAKqyE,YAAc9oE,EAAIhL,MAAM8zE,cAC3Bt+D,MAAMmC,IACRlW,KAAK2b,SAAU,GAEjB,EACAnb,OAAAA,GACCR,KAAKinE,cACN,EACAhkE,SAAU,+hKC/SEs0E,GAA0B,CACtCj5E,KAAM,0BACN6E,WAAY,CACX9E,UACAylE,YAAa1iE,SAAS2iE,YACtBuL,SAAUluE,SAASmuE,SACnBC,SAAUpuE,SAASquE,SACnBC,SAAUtuE,SAASuuE,SACnB6H,UAAWp2E,SAASq2E,UACpB7H,UAAWxuE,SAASyuE,UACpBC,aAAc1uE,SAAS2uE,aACvBC,QAAS5uE,SAASq6B,QAClBsS,cAAAA,GAEDluC,MAAO,CAAC,aACRoE,OAAQ,CACP,oBACA,sBACA,sBACA,uBACA,gBACA,+BAEDvF,MAAO,CACNyxE,cAAe,CACdvxE,KAAMY,OACNT,QAAS,MAEV24E,aAAc,CACb94E,KAAMC,QACNE,SAAS,GAEV44E,cAAe,CACd/4E,KAAMC,QACNE,SAAS,IAGXR,IAAAA,GACC,MAAO,CACNq5E,0BAA0B,EAC1BvH,eAAe,EACfC,gBAAiB,KACjBC,mBAAoBj9D,2BAA2B8wB,iBAC/CyzC,eAAgB,CAAC,CAChBzuC,MAAO3nC,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,iCACpCmxB,KAAM,aACN2uC,QAAS93E,KAAK+3E,yBACdpjB,SAAUlzD,IAAI6C,SAAS,KAAOtE,KAAKg4E,8BAEpC,CACC5uC,MAAO3nC,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,yBACpCmxB,KAAM,mBACN2uC,QAAS93E,KAAKi4E,aACdtjB,SAAUlzD,IAAI6C,SAAS,IAA2B,GAAtBtE,KAAK23E,gBAElC,CACCvuC,MAAO3nC,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,mCACpCmxB,KAAM,wBACN2uC,QAAS93E,KAAKk4E,kBAEf,CACC9uC,MAAO3nC,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,qCACpCmxB,KAAM,YACN2uC,QAAS93E,KAAKm4E,kBAEfC,UAAW,KACXzyD,KAAMlkB,IAAIuiC,SAAS,CAClB/P,QAAS,GACTu8C,SAAU,GACVC,YAAa,GACbC,cAAe,GACfC,iBAAkB,GAClBC,sBAAuB,GACvBC,aAAc,IAGjB,EACA/wE,QAAS,CACRgxE,kBAAAA,CAAmB/C,GAClB,OAAGA,EAAOsK,aAAal4B,YACf4tB,EAAOsK,aAAarzB,QAAUhlD,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gCAAkC,KAAOhY,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gCAAkC,MAC5H,IAAjC+1D,EAAO5tB,aAAagxB,UAAsBpD,EAAOsK,YAGnD,GAFAr4E,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,6BAIpC,EACAsgE,oBAAAA,CAAqBvK,GACpB,OAAOA,GAAQ5tB,YAAcngD,KAAK+X,GAAGC,EAAE,sBAAwB+1D,EAAOG,oBAAsBluE,KAAK+X,GAAGC,EAAE,kCACvG,EACAugE,UAAAA,CAAWxK,GAOV,OANoBA,EAAOE,YAC3BF,EAAOI,QAAUJ,EAAOthD,MAAMA,MAAQ,KACtCshD,EAAOS,mBAAqBxuE,KAAKmwE,cAAc3B,mBAG/CT,EAAOO,WAAaP,EAAOyK,kBACpBx4E,KAAK+c,KAAK3H,KAAK+3D,GAAUW,wBAAwBC,IAASnrE,KAAO2G,IACvE,GAAwB,WAArBA,GAAK4wB,MAAM9Q,OAAqB,CAClCrpB,KAAKu7B,UAAUkE,aAAaz/B,KAAK+X,GAAGC,EAAE,mBAEtC,MAAM+4D,EAAU/wE,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAOA,EAAIxkD,MAAQljB,EAAIhL,KAAK,GAAGkuB,MACvEgsD,EAAe,CACpBC,eAAiB,EACjBC,iBAAmB,KAChBpvE,EAAIhL,KAAK,IAEVk6E,EAAahsD,OACfgsD,EAAahsD,KAAOskD,EACpB0H,EAAaJ,YAActH,GAE5B0H,EAAaD,mBAAqBC,EAAanK,UAC/C,MAAMsK,EAAoBrvE,EAAIhL,KAAK,GAE7Bs6E,EAAY74E,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,oBAAsBuK,EAAavK,oBAS5F,GAPAuK,EAAat4B,YAAc,CAC1BA,YAAa4tB,EAAO5tB,aAAaA,YACjC+tB,mBAAoBH,EAAO5tB,aAAa+tB,mBACxCiD,SAAU0H,EAAU1H,UAIjByH,EAGG,CACN,MAAME,EAAkB94E,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAOA,EAAIxkD,MAAQmsD,EAAkBnsD,MAC3FmsD,EAAkBnsD,KAAOqsD,EAEzB/K,EAAOG,mBAAqBuK,EAAavK,mBACzCH,EAAOsK,YAActH,EACrBhD,EAAO4H,UAAY9B,GAAkB9F,EAAQ/tE,KAAKgxE,aACnD,MATCyH,EAAa9C,UAAY9B,GAAkB4E,EAAcz4E,KAAKgxE,cAC9DhxE,KAAKmwE,cAAc2C,cAAcxsE,KAAKmyE,GAUvCz4E,KAAKmwE,cAAc2C,cAAc1rE,KAAK,CAACC,EAAGC,IAAK,IAAImU,KAAKpU,EAAEksB,OAAS,IAAI9X,KAAKnU,EAAEisB,QAEhEvzB,KAAKmwE,cAAc2C,cAAcvmC,UAAUv0B,GAAK+1D,EAAOE,aAAej2D,EAAEi2D,aAMtF,MAAM8K,GAAwBH,IAAsBH,EAAahsD,MAAMu4B,SAAiC,OAAtByzB,EAAahsD,KAGzFusD,EAAqDJ,IAAsBH,EAAahsD,MAAMu4B,SAAiC,OAAtByzB,EAAahsD,OAAkBmsD,EAAkBnsD,MAAMu4B,cAAsC9jD,IAA3B03E,EAAkBnsD,MAEzJssD,GAAwBC,GAEjEh5E,KAAKo4E,UAAY,CAChBnK,aAAe,EACfT,iBAAoBxtE,KAAKmwE,cAAc3C,iBACvCc,WAAa,EACbkK,mBAAqB,EACrBlX,OAAU,GACV/tC,OAAS,IAAI9X,MAAOgrD,cAAc3hC,MAAM,KAAK,GAC7CrY,KAAQzsB,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAmB,GAAZA,EAAIxkD,MACjD4hD,kBAAqB,GACrBD,gBAAkB,EAClBF,mBAAsB,GACtB/tB,YAAengD,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,qBAAuBuK,EAAavK,oBAC1F6D,YAAe,KACfxD,UAAavuE,KAAK4a,UAAUC,KAAO,IAGpC7a,KAAK43E,0BAA2B,EAEhC53E,KAAKS,MAAMw4E,8BAA8B94E,QAEzCH,KAAK43E,0BAA2B,EAGjC53E,KAAKO,MAAM,YAAaP,KAAKmwE,cAC9B,KAA+B,SAArB5mE,GAAK4wB,MAAM9Q,QACpBrpB,KAAKu7B,UAAUI,cAGlB,EACAu9C,oBAAAA,GACCl5E,KAAKS,MAAM04E,0BAA0Bh5E,MACtC,EACA,qBAAMi5E,GACL,UAAWp5E,KAAKq5E,sBAEf,OAAO,EAGR,MAAM/D,EAAKt1E,KAAKmwE,cAGV/+C,EAAW,IAAIoJ,SACrBpJ,EAAS4J,OAAO,mBAAoBh7B,KAAKmwE,cAAc3C,kBAEvDp8C,EAAS4J,OAAO,UAAWh7B,KAAK2lB,KAAc,QAAEsO,SAChD7C,EAAS4J,OAAO,WAAYh7B,KAAK2lB,KAAe,UAChDyL,EAAS4J,OAAO,cAAeh7B,KAAK2lB,KAAkB,aACtDyL,EAAS4J,OAAO,gBAAiBh7B,KAAK2lB,KAAoB,eAC1DyL,EAAS4J,OAAO,mBAAoBh7B,KAAK2lB,KAAuB,kBAChEyL,EAAS4J,OAAO,eAAgBh7B,KAAK2lB,KAAmB,cAExD3lB,KAAK2b,SAAU,EACf3b,KAAK+c,KAAK3H,KAAK+3D,GAAU8B,oCAAoC79C,IAC3DxuB,KAAK2G,IACL,GAAsB,WAAnBA,EAAI4wB,KAAK9Q,OAAqB,CAEhC,GADArpB,KAAKu7B,UAAUkE,aAAaz/B,KAAK+X,GAAGC,EAAE,oBAClCzZ,MAAMuV,SAAS,GAAI,OACvB,MAAMwlE,EAAQ/6E,KAAKuV,OAAO,GAC1BwhE,EAAGzE,aAAeyI,EAAMzI,cAAgB,EACxCyE,EAAG1E,sBAAwB0I,EAAM1I,uBAAyB,GAC1D0E,EAAG5E,cAAgB4I,EAAM5I,eAAiB,GAC1C4E,EAAGrhD,QAAUqlD,EAAMrlD,SAAW,GAC9BqhD,EAAG3E,iBAAmB2I,EAAM3I,kBAAoB,GAChD2E,EAAG9E,SAAW8I,EAAM9I,UAAY,GAChC8E,EAAG7E,YAAc6I,EAAM7I,aAAe,EACvC,IAEEjoB,QAAQ,KACXxoD,KAAK2b,SAAU,IAGhB3b,KAAKS,MAAM04E,0BAA0Bj5E,MACtC,EACA,yBAAMm5E,GAEL,OAMO,UANEr5E,KAAKu7B,UAAUlE,QAAQ,CAC/BoE,QAASz7B,KAAK+X,GAAGC,EAAE,0CACnBmoB,YAAangC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCACxCooB,YAAa,mBACbC,YAAargC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wBACxCsoB,YAAa,sBAMf,EACA,wBAAMi5C,CAAmBxL,GACxB,IAMO,UANE/tE,KAAKu7B,UAAUlE,QAAQ,CAC/BoE,QAASz7B,KAAK+X,GAAGC,EAAE,+BACnBmoB,YAAa,UACbC,YAAa,kBACbC,YAAa,SACbC,YAAa,uBAEb,OAAO,EAEPtgC,KAAKw5E,aAAazL,EAEpB,EACAyL,YAAAA,CAAazL,GACZ/tE,KAAK+c,KAAK3H,KAAK+3D,GAAUsB,0BAA0BV,EAAOE,cAAcrrE,KAAO2G,IAC9E,GAAwB,WAArBA,GAAK4wB,MAAM9Q,OAAqB,CAClCrpB,KAAKu7B,UAAUkE,aAAaz/B,KAAK+X,GAAGC,EAAE,oBAAqB,CAAChY,KAAK+X,GAAGC,EAAE,wBAEtE,MAAMyhE,EAAqBz5E,KAAKmwE,cAAc2C,cAAcvmC,UAAUv0B,GAAKA,EAAEi2D,cAAgBF,EAAOE,aACpGjuE,KAAKmwE,cAAc2C,cAAc92D,OAAOy9D,EAAoB,GAC5Dz5E,KAAKO,MAAM,YAAaP,KAAKmwE,cAC9B,KAA+B,SAArB5mE,GAAK4wB,MAAM9Q,QACpBrpB,KAAKu7B,UAAUI,cAGlB,EACAy1C,SAAU,SAASrD,GAClB,QAAIA,EAAOj3D,KAAK3Q,SACfnG,KAAKu7B,UAAUuE,aAAa9/B,KAAK+X,GAAGC,EAAE,8BAC/B,EAIT,EACA05D,cAAAA,CAAe3D,GACd,MAAMtzD,EAAM,yEAAyEszD,EAAOE,2BAA2BjuE,KAAKmwE,cAAc3jD,gCAAgCxsB,KAAKmwE,cAAc3C,mBAE7Lp0D,OAAO+d,KAAK7jB,2BAA2BC,SAAWD,2BAA2BE,UAAYiH,EAE1F,EACAi/D,mBAAAA,CAAoB34B,GACnB3nC,OAAO+d,KAAK4pB,EAAM,SACnB,EACA44B,sBAAsBjnB,GACdA,EAAOz+B,QAEf2lD,uBAAAA,CAAwBlnB,GACvB,OAAO1yD,KAAK+X,GAAGC,EAAE,sBAAwB06C,EAAOwb,mBACjD,EACA2L,kBAAkBnnB,IACTA,EAAOonB,MAEhBC,oBAAoBrnB,GACZA,EAAOvS,YAEfg4B,eAAAA,GACC,MAAMp3B,EAAOztC,2BAA2BC,SAAWD,2BAA2BE,UAC3E,2BAA6BxT,KAAKmwE,eAAe3jD,YACpDpT,OAAO+d,KAAK4pB,EAAM,SACnB,EACAm3B,gBAAAA,GACC,MAAMn3B,EAAO/gD,KAAKg6E,cAClB5gE,OAAO+d,KAAK4pB,EAAM,SACnB,EACA,kBAAMk3B,GAGL,GAAGj4E,KAAKi6E,qBAAuBj6E,KAAKmwE,eAAe2C,cAAczuC,KAAK0pC,GAAuC,OAA7BA,EAAOG,oBAAsD,OAAvBH,EAAOgE,cAAyB/xE,KAAKmwE,eAAe+J,mBAAoB,CAC7L,MAAMn5B,EAAO/gD,KAAKmwE,eAAe+J,mBACjC9gE,OAAO+d,KAAK4pB,EAAM,SACnB,MAAO,GAAG/gD,KAAKmwE,eAAe2C,cAAczuC,KAAK0pC,GAAuC,OAA7BA,EAAOG,oBAAsD,OAAvBH,EAAOgE,cAAyB/xE,KAAKmwE,eAAegK,mBAAoB,CACxK,IAMO,UANEn6E,KAAKu7B,UAAUlE,QAAQ,CAC/BoE,QAASz7B,KAAK+X,GAAGC,EAAE,wCACnBmoB,YAAangC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCACxCooB,YAAa,iBACbC,YAAargC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wBACxCsoB,YAAa,8BAEb,OAAO,EAGR,MAAMygB,EAAO/gD,KAAKmwE,eAAegK,mBACjC/gE,OAAO+d,KAAK4pB,EAAM,SACnB,MAEC,IAMO,UANE/gD,KAAKu7B,UAAUlE,QAAQ,CAC/BoE,QAASz7B,KAAK+X,GAAGC,EAAE,qCACnBmoB,YAAangC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCACxCooB,YAAa,iBACbC,YAAargC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wBACxCsoB,YAAa,8BAEb,OAAO,CAGV,EACAqxC,UAAAA,CAAWC,GAEV,MAAM7tD,EAAO,IAAItI,KAAKm2D,GAEhBC,EAAWC,GAAQhzE,OAAOgzE,GAAKjlE,SAAS,EAAG,KAE3CuhC,EAAQyjC,EAAQ9tD,EAAK+iD,WAAa,GAIxC,MAAO,GAHK+K,EAAQ9tD,EAAK8iD,cAGRz4B,KAFJrqB,EAAKgjD,eAGnB,EACAgR,wBAAAA,GACC,GAA6C,oBAA1C/3E,KAAKmwE,eAAeqG,mBAAvB,CAOA,IAAIx2E,KAAKo4E,UAAW,CACnB,MAAM1kD,EAAM1zB,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAkC,aAA3BA,EAAI/C,oBACnDluE,KAAKo4E,UAAY,CAChBnK,aAAe,EACfT,iBAAoBxtE,KAAKmwE,cAAc3C,iBACvCc,WAAa,EACbkK,mBAAqB,EACrBlX,OAAU,GACV/tC,OAAS,IAAI9X,MAAOgrD,cAAc3hC,MAAM,KAAK,GAC7CrY,KAAQzsB,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAmB,GAAZA,EAAIxkD,MACjD4hD,kBAAqB,GACrBD,eAAkB16C,EAAI0mD,uBACtBlM,mBAAsB,GACtB/tB,YAAezsB,EACfq+C,YAAe,KACfxD,UAAavuE,KAAK4a,UAAUC,KAAO,GAErC,CACA7a,KAAKS,MAAMw4E,8BAA8B94E,MApBzC,MAFCH,KAAKu7B,UAAUuE,aAAa,wBAuB9B,EACAu6C,eAAetM,IAGP,EAER,yBAAMuM,CAAoBvM,GAEzB,IAAI/tE,KAAKq6E,eAAetM,GAGvB,OAFA/tE,KAAKu7B,UAAUuE,aAAa,mBAErB,QAGF9/B,KAAKu4E,WAAWxK,GAEtB/tE,KAAKS,MAAMw4E,8BAA8B/4E,OACzCF,KAAKo4E,UAAY,CAChBnK,aAAe,EACfT,iBAAoBxtE,KAAKmwE,cAAc3C,iBACvCc,WAAa,EACbkK,mBAAqB,EACrBlX,OAAU,GACV/tC,OAAS,IAAI9X,MAAOgrD,cAAc3hC,MAAM,KAAK,GAC7CrY,KAAQzsB,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAmB,GAAZA,EAAIxkD,MACjD4hD,kBAAqB,GACrBD,gBAAkB,EAClBF,mBAAsB,GACtB/tB,YAAengD,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAkC,aAA3BA,EAAI/C,oBACtD6D,YAAe,KACfxD,UAAavuE,KAAK4a,UAAUC,KAAO,GAGrC,EACA0/D,qBAAAA,CAAsBxM,GAGyB,cAA3CA,EAAO5tB,aAAa+tB,oBAAiF,cAA3CH,EAAO5tB,aAAa+tB,mBAChFH,EAAOzM,OAASyM,EAAO5tB,YAAYA,YAEnC4tB,EAAOzM,OAAS,EAElB,GAEDh9D,SAAU,CACT0zE,2BAAAA,GACC,GAAGh4E,KAAK23E,cAAe,OAAO,EAC9B,GAA6C,oBAA1C33E,KAAKmwE,eAAeqG,mBAA0C,OAAO,EACxE,QAAgCt1E,IAA7BlB,KAAKmwE,eAAe1jD,MAAkD,OAA5BzsB,KAAKmwE,cAAc1jD,KAAe,CAI9E,QAFYzsB,KAAKw6E,qBAAqBn2C,KAAK4sC,GAAOA,EAAIxkD,KAKvD,CAGA,OAAO,CACR,EACAimD,wBAAAA,GACE,OAAO1yE,KAAK2lB,KAAK+qD,cAAcvqE,OAAS,GAAKnG,KAAK2lB,KAAKgrD,iBAAiBxqE,OAAS,GAAKnG,KAAK2lB,KAAK6qD,SAASrqE,OAAS,GAAKnG,KAAK2lB,KAAK8qD,YAAYtqE,OAAS,GAAKnG,KAAK2lB,KAAKkrD,aAAe,CACtL,EACA4J,2BAAAA,GACC,OAAGz6E,KAAK23E,cACA33E,KAAKq0E,kBAELr0E,KAAKq0E,kBAAkB5qE,OAAOwnE,GAAOjxE,KAAK06E,oBAAoBx7E,SAAS+xE,EAAI/C,oBAEpF,EACAoE,kBAAiBA,KAET,CACNv1C,KAAM,CACLrtB,MAAO,CACN6iE,OAAQ,QAGVpwE,QAAS,CACRuN,MAAO,CACN8iE,QAAS,UAKbC,MAAAA,GACC,OAAOzyE,KAAK+X,GAAGC,EAAE,yCAClB,EACA2iE,mBAAAA,GACC,OAAQ36E,KAAKqwE,aACd,EACA4J,mBAAAA,GACC,OAAOj6E,KAAKmwE,eAAeyK,YAAa,CACzC,EACAC,kBAAAA,GACC,OAAO76E,KAAKmwE,eAAe2C,cAAczuC,KAAK0uC,GAAwC,QAA9BA,EAAO7E,oBAAuD,OAAvB6E,EAAOhB,YACvG,EACAa,0BAAAA,GACC,IAAIC,GAAa,EAOjB,OANA7yE,KAAKmwE,eAAe2C,cAAclsE,QAAQmsE,IACI,aAA1CA,EAAO5yB,aAAa+tB,oBACwB,aAA3C6E,GAAQ5yB,aAAa+tB,qBACxB2E,GAAa,KAGRA,CACR,EACAiI,kBAAiBA,IACT,+BAERC,yBAAwBA,IAEhB,gEAER/H,oBAAAA,GACC,MAAO,CACN/zE,MAAOe,KAAK+X,GAAGC,EAAE,kCACjBnW,MAAO,iBAET,EACAoxE,kBAAAA,GACC,MAAO,CACNh0E,MAAOe,KAAK+X,GAAGC,EAAE,gCACjBnW,MAAO,iBAET,EACAqxE,mBAAAA,GACC,MAAO,CACNj0E,MAAOe,KAAK+X,GAAGC,EAAE,iCACjBnW,MAAO,iBAET,EACAsxE,kBAAAA,GACC,MAAO,CACNl0E,MAAOe,KAAK+X,GAAGC,EAAE,kCACjBnW,MAAO,iBAET,EACA4xE,iCAAAA,GACC,MAAO,CACNx0E,MAAOe,KAAK+X,GAAGC,EAAE,+CACjBnW,MAAO,iBAET,EACAuxE,mBAAAA,GACC,MAAO,CACNn0E,MAAOe,KAAK+X,GAAGC,EAAE,iCACjBnW,MAAO,iBAET,EACAwxE,mBAAAA,GACC,MAAO,CACNp0E,MAAOe,KAAK+X,GAAGC,EAAE,iCACjBnW,MAAO,iBAET,EACAyxE,wBAAAA,GACC,MAAO,CACNr0E,MAAOe,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uCAClCnW,MAAO,iBAET,EACAm5E,0BAAAA,GACC,MAAO,CACN/7E,MAAOe,KAAK+X,GAAGC,EAAE,6CACjBnW,MAAO,iBAET,EACAo5E,4BAAAA,GACC,MAAO,CACNh8E,MAAOe,KAAK+X,GAAGC,EAAE,+CACjBnW,MAAO,iBAET,EACA6xE,mBAAAA,GACC,MAAO,CACNz0E,MAAOe,KAAK+X,GAAGC,EAAE,iCACjBnW,MAAO,iBAET,EACA8xE,wBAAAA,GACC,MAAO,CACN10E,MAAOe,KAAK+X,GAAGC,EAAE,sCACjBnW,MAAO,iBAET,EACAq5E,qBAAAA,GACC,OAAGl7E,KAAKmwE,eAAepsB,MAAc/jD,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uBAAyB,KAAOhY,KAAKmwE,cAAcpsB,MAE5G,EACR,EACAo3B,uBAAAA,GACC,OAAGn7E,KAAKmwE,eAAevoC,QAAgB5nC,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mBAAqB,KAAOhY,KAAKmwE,cAAcvoC,QAE1G,EACR,GAED55B,MAAO,CACN,wBAAwBoyD,GACW,cAA/BA,GAAQ8N,oBAAqE,cAA/B9N,GAAQ8N,qBACxDluE,KAAKo4E,UAAU9W,OAASlB,EAAOjgB,aAGhCngD,KAAKo4E,UAAUhK,eAAiBhO,EAAOga,sBACxC,EACA,cAAgBha,GAIf,MAAM1sC,EAAM1zB,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAkC,aAA3BA,EAAI/C,oBACnDluE,KAAKo4E,UAAY,CAChBnK,aAAe,EACfT,iBAAoBpN,EAAOoN,iBAC3Bc,WAAa,EACbkK,mBAAqB,EACrBlX,OAAU,GACV/tC,OAAS,IAAI9X,MAAOgrD,cAAc3hC,MAAM,KAAK,GAC7CrY,KAAQzsB,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAmB,GAAZA,EAAIxkD,MACjD4hD,kBAAqB,GACrBD,eAAkB16C,EAAI0mD,uBACtBlM,mBAAsB,GACtB/tB,YAAezsB,EACfq+C,YAAe,KACfxD,UAAavuE,KAAK4a,UAAUC,KAAO,IAGpCulD,GAAQ0S,eAAelsE,QAAQmnE,GAAUA,EAAOyK,mBAAqBzK,EAAOO,WAG5EtuE,KAAK2lB,KAAKsO,QAAUmsC,EAAOnsC,QAAUj0B,KAAKuwE,mBAAmBlsC,KAAKgB,GAAQA,EAAKpR,SAAWmsC,EAAOnsC,SAAWj0B,KAAKuwE,mBAAmBlsC,KAAKgB,GAAwB,UAAhBA,EAAKpR,SACtJj0B,KAAK2lB,KAAK6qD,SAAWpQ,EAAOoQ,UAAY,GACxCxwE,KAAK2lB,KAAK8qD,YAAcrQ,EAAOqQ,aAAe,GAC9CzwE,KAAK2lB,KAAK+qD,cAAgBtQ,EAAOsQ,eAAiB,GAClD1wE,KAAK2lB,KAAKgrD,iBAAmBvQ,EAAOuQ,kBAAoB,GACxD3wE,KAAK2lB,KAAKirD,sBAAwBxQ,EAAOwQ,uBAAyB,GAClE5wE,KAAK2lB,KAAKkrD,aAAezQ,EAAOyQ,cAAgB,CACjD,GAEDj6D,OAAAA,GAEA,EACApW,OAAAA,GAEA,EACAyC,SAAU,s2nBC7mBJo/B,eAAe+4C,GAAiBC,EAAOp2E,EAAOq2E,EAASC,EAAgBC,GAC7E,IACIC,EAAWJ,EAAM5+C,KADL,KAEZi/C,EAAS,GAEb,MAAMC,EAAgBL,GAA8B,iBAAZA,EAAuBA,EAAQn1E,OAAS,EAAI,EACpF,GAAIs1E,EAASt1E,OAAS,OAEwE,UAAnFo1E,EAAelkD,QAAQ,CAACoE,QAAS+/C,EAAiBxjE,EAAE,MAAO,mBACpE,OAGF,IAAI4jE,GAAW,EACXC,EAAS52E,GAAO62E,SAAW72E,GAAO82E,QACtC,KAAON,EAASt1E,OAAS,GACzB,CACC,GAAIs1E,EAASt1E,OAASw1E,EAAgB,KACtC,CACC,IAAIK,EAAgBP,EAASQ,YAjBf,IAiBsC,MACpDP,EAASD,EAAS90C,UAAU,EAAGq1C,GAC/BP,EAAWA,EAAS90C,UAAUq1C,EAAgB,EAC/C,MAGCN,EAASD,EACTA,EAAW,GAGZ,IAAIS,EAAWL,EAAS,eAAeH,IAAW,UAAUA,IACzDJ,GAA8B,iBAAZA,IAAsBY,GAAY,YAAYZ,KAC/DM,GAEHxiE,OAAOwsC,SAAS7f,KAAOm2C,EACvBN,GAAW,IAIgF,UAAjFL,EAAelkD,QAAQ,CAACoE,QAAS+/C,EAAiBxjE,EAAE,MAAO,oBAEpEoB,OAAOwsC,SAAS7f,KAAOm2C,EAI1B,CACD,CClCO,MAAMC,GAAwB,CACpC79E,KAAM,wBACN6E,WAAY,CACX9E,UACA0uD,+BACAmnB,GACA5E,SAAUluE,SAASmuE,SACnBC,SAAUpuE,SAASquE,SACnBC,SAAUtuE,SAASuuE,SACnByM,WAAYh7E,SAASi7E,yBACrBtuC,EACAqhC,eAED53D,OAAAA,GACC,MAAO,CACN68D,kBAAmB5yE,IAAI6C,SAAS,IAAMtE,KAAKq0E,mBAC3CqG,oBAAqBj5E,IAAI6C,SAAS,IAAMtE,KAAK06E,qBAC7CpD,oBAAqB71E,IAAI6C,SAAS,IAAMtE,KAAKs3E,qBAC7CkD,qBAAsB/4E,IAAI6C,SAAS,IAAMtE,KAAKw6E,sBAC9CR,cAAev4E,IAAI6C,SAAS,IAAMtE,KAAKg6E,eACvCsC,4BAA6B76E,IAAI6C,SAAS,IAAMtE,KAAKs8E,6BAEvD,EACA59E,MAAO,CACNkc,SAAU,CACThc,KAAMY,OACNyX,UAAU,EACVlY,QAASA,KAAAA,CAAQT,KAAM,GAAIuc,IAAK,KAChC7b,UAAUC,GACFA,GAASA,EAAM4b,MAIzBtc,IAAAA,GACC,MAAO,CACNg+E,UAAW,KACX7B,oBAAqB,KACrB8B,oBAAoB,EACpBxY,eAAgB,KAChBC,iBAAiB,EACjB+V,cAAe,KACfsC,4BAA6B,KAC7BG,mCAAoC,KACpCC,QAAQ,EACR/gE,SAAS,EACT04D,kBAAmB,KACnBrD,aAAc,KACdsG,oBAAqB,KACrBkD,qBAAsB,KACtBmC,aAAcl7E,IAAIuiC,SAAS,CAC1BzQ,MAAO,IAAI9X,KACX0kC,YAAa,CACZ+tB,mBAAoB,WACpB/tB,YAAa,kBAEdmhB,OAAQ,GACR8M,gBAAgB,IAEjBwO,SAAS,EACT1Y,cAAeziE,IAAIK,IAAI,GACvBktD,aAAc,GACd6tB,OAAQ,GACRrwD,YAAa,KACbuS,OAAQ,KACR+9C,aAAc,EACdxI,gBAAiB,KACjBC,sBAAuB,KACvBpQ,kBAAmB,KACnBC,kBAAmB,KACnB2Y,mBAAoB,CACnB1nE,UAAW,IACXvO,MAAO,mBACPypD,OAAQ,iBACR5jD,YAAalL,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,2BAC1C24C,YAAY,EACZqsB,gBAAiBh9E,KAAKi9E,eACtBC,UAAW,GACXp0B,QAAS,CACR,CACC2B,UAAW,SAAU0R,EAAMkC,EAAiBjC,GAE3C,IAAID,EAAKghB,SAASr/C,UAAU6yB,WAAY,OACxC,IAAI4e,EAAWjtE,SAASC,cAAc,SACtCgtE,EAAS3wE,KAAO,WAGhB2wE,EAASh2D,iBAAiB,QAAUrD,IACnCA,EAAEu7B,kBAGE4sB,GAAmBA,EAAgB+e,aACtC/e,EAAgB+e,YAAYlnE,EAAGimD,KAIjCA,EAAKghB,SAASr/C,UAAUyxC,SAAWA,EAEnC,IAAIptE,EAAUG,SAASC,cAAc,OAKrC,OAJAJ,EAAQuN,MAAM2tE,QAAU,0FAExBl7E,EAAQa,YAAYusE,GAEbptE,CACR,EACAm7E,eAAgB,SAAUnhB,EAAMkC,EAAiBjC,GAEhD,IAAImT,EAAWjtE,SAASC,cAAc,SAatC,OAZAgtE,EAAS3wE,KAAO,WAGhB2wE,EAASh2D,iBAAiB,QAAUrD,IACnCA,EAAEu7B,kBAGE4sB,GAAmBA,EAAgB+e,aACtC/e,EAAgB+e,YAAYlnE,EAAGimD,KAI1BoT,CACR,EACAgO,SAAU,SACVzf,YAAY,EACZO,gBAAiB,CAChB+e,YAAap9E,KAAKw9E,eAEnBC,qBAAsB,CACrBL,YAAap9E,KAAK09E,kBAEnBpuE,MAAO,GACPquE,SAAU,cAEX,CAAC58E,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,0BAA2BwqB,MAAO,UAAWioB,UAAWzqD,KAAKg2E,gBAAiB9mB,cAAc,EAAO4O,YAAY,EAAOwH,UAAW,EAAG5U,SAAS,EAAOitB,SAAU,cACpN,CAAC58E,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sCAAuCk3C,cAAc,EAAM1sB,MAAO,MAAOioB,UAAWzqD,KAAK49E,iBAAkBtY,UAAW,EAAG5U,SAAS,GACxL,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,0BAA2BwqB,MAAO,UAAW0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAsBzQ,UAAW,GACxK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,2BAA4BwqB,MAAO,WAAY0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAC3K,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,6BAA8BwqB,MAAO,oBAAqBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAClK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,MAAO0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACjK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,yBAA0B0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACpL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wBAAyBwqB,MAAO,QAAS0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuB9gE,SAAU,IAAKqwD,UAAW,GACpL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,gCAAiCwqB,MAAO,2BAA2BioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAC3K,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mCAAoCwqB,MAAO,aAChG0sB,aAAcgN,GACdkC,iBAAkBp+D,KAAK69E,sBACvBC,OAAQ99E,KAAK+9E,kBACbtzB,UAAWzqD,KAAKg+E,qBAAsB1Y,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,GAC1E,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mCAAoCwqB,MAAO,aAChG0sB,aAAcgN,GACdkC,iBAAkBp+D,KAAK69E,sBACvBC,OAAQ99E,KAAK+9E,kBACbtzB,UAAWzqD,KAAKg+E,qBAAsB1Y,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,GAC1E,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,+BACrDk3C,aAAc,OACd+uB,mBAAoB,CAAEC,aAAcl+E,KAAKm+E,oBACzC37C,MAAO,eAAgBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,GAClG,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,+BACrDk3C,aAAc,OACd+uB,mBAAoB,CAAEC,aAAcl+E,KAAKm+E,oBACzC37C,MAAO,eAAgBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,IAEnGzB,aAAa,EACbuO,cAAe,iCAEhB4gB,yBAA0B,CAAC,CAC1Bn5E,MAAO,aACPiJ,QAASm0B,UACRriC,KAAKmkE,sBAGP,CACCl/D,MAAO,YACPiJ,QAASm0B,MAAOnsB,EAAGimD,KACiB,YAAhCA,EAAKkiB,YAAYzuB,YACnB5vD,KAAKo1E,mBAAmBjZ,EAAKI,YAC7Bv8D,KAAKs+E,cAAcniB,IACuB,SAAhCA,EAAKkiB,YAAYzuB,YAC3B5vD,KAAKs+E,cAAcniB,KAItB,CACCl3D,MAAO,sBACPiJ,QAASm0B,UACRriC,KAAKgvD,aAAavlD,OAAO80E,IAAOhgF,EAAKW,SAASq/E,IAAK33E,QAAQ43E,IACvDA,EAAIjP,WAAUiP,EAAIjP,SAAStY,SAAU,KAGzC14D,EAAKqI,QAAQy2C,IACTA,EAAEkyB,WAAUlyB,EAAEkyB,SAAStY,SAAU,KAGrCj3D,KAAKgvD,aAAezwD,KAIxB,EACAuB,QAAS,CACR2+E,eAAAA,CAAgBtO,GACfnwE,KAAK0+E,gCAAgCvO,GACrCnwE,KAAKS,MAAMk+E,YAAYv0B,UAAUw0B,QAAO,EACzC,EACAC,iBAAAA,CAAkBC,GAEjB,MAAMC,EAAgB,GACtB/+E,KAAKgvD,aAAapoD,QAAQy2C,IACzB0hC,EAAcz4E,KAAK,GAAG+2C,EAAE7wB,eAAexsB,KAAK68E,YAI7CzB,GAFyB,IAAI,IAAI9iB,IAAIymB,IAEFD,EAAM9zC,cADzB,GACiDhrC,KAAKu7B,UAAWv7B,KAAK+X,GACvF,EACAomE,kBAAAA,GACC,MAAO,CACNn+E,KAAK+X,GAAGC,EAAE,oCACVhY,KAAK+X,GAAGC,EAAE,+BACVhY,KAAK+X,GAAGC,EAAE,+BACVhY,KAAK+X,GAAGC,EAAE,6BACVhY,KAAK+X,GAAGC,EAAE,6BACVhY,KAAK+X,GAAGC,EAAE,+BAEZ,EACA+lE,kBAAiBA,CAAC12E,EAAGC,EAAG03E,EAAMC,EAAMhzB,EAAQ3iD,EAAKuK,IAC5CxM,QAA+C,EAC/CC,SAA+C,EAIxB,cAAxB2kD,EAAOoW,QAAQ7/B,MACVp8B,KAAK6gD,IAAI3/C,EAAE43E,QAAU94E,KAAK6gD,IAAI5/C,EAAE63E,QACL,cAAxBjzB,EAAOoW,QAAQ7/B,MAClBp8B,KAAK6gD,IAAI5/C,EAAE63E,QAAU94E,KAAK6gD,IAAI3/C,EAAE43E,QAIjC94E,KAAK6gD,IAAI3/C,EAAE43E,QAAU94E,KAAK6gD,IAAI5/C,EAAE63E,QAExCrB,qBAAAA,CAAsBsB,EAAWC,GAChC,IAAKA,IAAWA,EAAOC,YAAcD,EAAOC,UAAUnsC,QACrD,OAAO,EAGR,MAAM2pB,EAAUuiB,EAAOC,UAEjBC,EAAWv6C,IAChB,IAAKA,EAAK,OAAO,KACjB,IAAIkwB,EASJ,OAPCA,EADGlwB,aAAetpB,KACb0xB,MAAMC,SAASmC,WAAWxK,GACN,iBAARA,EACZoI,MAAMC,SAASC,QAAQtI,GAEvBoI,MAAMC,SAASuF,WAAWxoC,OAAO46B,IAGhCkwB,EAAG/hB,QAAU+hB,EAAK,MAGpBzhC,EAAM8rD,EAAQH,EAAU,IACxB1rD,EAAM6rD,EAAQH,EAAU,IAG9B,OAAI3rD,IAAQC,EACJopC,EAAQ1pB,QAAQ3f,EAAK,UAIzBA,IAAOC,KACHopC,GAAWrpC,EAAI8a,QAAQ,QAAUuuB,GAAWppC,EAAIkb,MAAM,OAI/D,EACA4wC,SAAAA,GACC,OAAOlkE,KAAKC,MAAM0qB,aAAaI,QAAQpmC,KAAK+8E,mBAAmBvf,gBAAkB,OAClF,EACAgiB,SAAAA,CAAU3zB,GAET,IAAI7rD,KAAKy/E,cAAe,OACxB,MACMhlB,EAAQ,CACb3R,QAFiB+C,EAAM6zB,kBAEJp3E,IAAIgnD,IAAG,CACzB9sB,MAAO8sB,EAAI9sB,MACX+pB,QAAS+C,EAAI/C,QACbj9C,MAAOggD,EAAIhgD,SAEZlI,KAAMykD,EAAM8zB,aAAar3E,IAAIo/C,IAAC,CAC7BllB,MAAOklB,EAAEllB,MACTl5B,IAAKo+C,EAAEp+C,OAERu/C,QAASgD,EAAM+zB,aACfC,cAAeh0B,EAAM0F,oBAGtBvrB,aAAaC,QAAQjmC,KAAK+8E,mBAAmBvf,cAAeniD,KAAK6f,UAAUu/B,GAC5E,EACAqlB,gBAAAA,GACC,MAAMj0B,EAAQ7rD,KAAKS,MAAMk+E,YAAYv0B,UAErCpqD,KAAKmkE,oBAELtY,EAAMgF,GAAG,cAAe,KACvB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,gBAAiB,KACzB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,0BAA2B,KACnC7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,gBAAiB,KACzB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,sBAAuB,KAC/B7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,aAAc,KACtB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,eAAgB,KACxB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,iBAAkB,KAC1B7wD,KAAKw/E,UAAU3zB,KAGhB,MAAMk0B,EAAQ//E,KAAKu/E,YAEnB1zB,EAAMgF,GAAG,iBAAkB,KAC1B,IAAI7wD,KAAKy/E,cAAe,CAEvB,GAAIM,GAAOj3B,UAAY9oD,KAAKggF,kBAAmB,CAC9C,MAAMzvB,EAASwvB,EAAMj3B,QAAQxgD,IAAIgnD,IAAG,CACnC9sB,MAAO8sB,EAAI9sB,MACXlzB,MAAOggD,EAAIhgD,MACXi9C,QAAS+C,EAAI/C,WAIdV,EAAMo0B,gBAAgB1vB,GAEtBvwD,KAAKggF,mBAAoB,CAC1B,CAMA,GAJID,GAAOl3B,UAAY7oD,KAAKkgF,kBAC3BlgF,KAAKkgF,iBAAkB,EACvBr0B,EAAMs0B,UAAUJ,EAAMl3B,UAEnBk3B,GAAOF,gBAAkB7/E,KAAKogF,sBAAuB,CACxDpgF,KAAKogF,uBAAwB,EAC7B,IAAK,IAAIC,KAAMN,EAAMF,cACpBh0B,EAAM2F,qBAAqB6uB,EAAG79C,MAAO69C,EAAGphF,MAE1C,CAEI8gF,GAAO34E,MAAMjB,SAAWnG,KAAKsgF,eAChCtgF,KAAKsgF,cAAe,EAEpBnvE,WAAW,KACV,MAAMovE,EAAWR,EAAM34E,KAAKkB,IAAIo/C,IAC/B,MAAM4H,EAAMzD,EAAM20B,cAAcC,WAAW/4B,EAAEllB,OAC7C,OAAK8sB,EAGE,CAAErD,OAAQqD,EAAKhmD,IAAKo+C,EAAEp+C,KAFrB,OAGNG,OAAO5K,SAEVgtD,EAAM60B,QAAQH,IACZ,MAEJvgF,KAAKy/E,eAAgB,CAEtB,GAGF,EACAkB,sBAAAA,CAAuB9uD,GACtB,MAAM+uD,EAAgB,GAChBC,EAAgB,GAEtBhvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,oCACjC6Z,EAAQkvD,iBAAmB,EAC3BlvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,oCACjC6Z,EAAQovD,iBAAmB,EAE3BpvD,EAAQihD,cAAclsE,QAAQmnE,IACG,aAA7BA,EAAOG,oBAAmC0S,EAAct6E,KAAKynE,GAChC,aAA7BA,EAAOG,oBAAmC2S,EAAcv6E,KAAKynE,KAOjE6S,EAAch6E,QAAQs6E,IACrB,GAAiB,MAAdA,EAAMz0D,MAAgBoF,EAAQkvD,kBAAoB,EAAG,EACjB,iBAAfG,EAAMz0D,KAAoBzsB,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQy0D,EAAMz0D,MAAQy0D,EAAMz0D,MACpGu4B,SACVnzB,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQkvD,iBAAmB,IAE3BlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQkvD,iBAAmB,EAE7B,MAAyB,MAAdG,EAAMz0D,MAAgBoF,EAAQkvD,kBAAoB,GAC5DlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQkvD,iBAAmB,GACM,GAAxBG,EAAM9S,gBAA+C,MAArB8S,EAAMnP,aAAuBlgD,EAAQkvD,kBAAoB,GAClGlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQkvD,iBAAmB,GACO,GAAxBG,EAAM9S,gBAA2B8S,EAAMhC,QAAU,GAAKrtD,EAAQkvD,kBAAoB,IAC5FlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQkvD,iBAAmB,KAI7BF,EAAcj6E,QAAQs6E,IACrB,GAAiB,MAAdA,EAAMz0D,MAAgBoF,EAAQkvD,kBAAoB,EAAG,EACjB,iBAAfG,EAAMz0D,KAAoBzsB,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQy0D,EAAMz0D,MAAQy0D,EAAMz0D,MACpGu4B,SACVnzB,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQovD,iBAAmB,IAE3BpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQovD,iBAAmB,EAE7B,MAAyB,MAAdC,EAAMz0D,MAAgBoF,EAAQovD,kBAAoB,GAC5DpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQovD,iBAAmB,GACM,GAAxBC,EAAM9S,gBAA+C,MAArB8S,EAAMnP,aAAuBlgD,EAAQovD,kBAAoB,GAClGpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQovD,iBAAmB,GACO,GAAxBC,EAAM9S,gBAA2B8S,EAAMhC,QAAU,GAAKrtD,EAAQovD,kBAAoB,IAC5FpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQovD,iBAAmB,IAG9B,EACAvC,+BAAAA,CAAgC7sD,GAC/B,MAAMqgB,EAAM/E,MAAMC,SAAS8E,MAE3BrgB,EAAQihD,cAAclsE,QAAQmnE,IAG7BA,EAAO4H,UAAY9B,GAAkB9F,EAAQ/tE,KAAKgxE,cAElD,MAAMjtD,EAAOopB,MAAMC,SAASC,QAAQ0gC,EAAOx6C,OAAOob,MAAM,OACxDo/B,EAAOsR,UAAYt7D,EACnBgqD,EAAOmR,OAASn7D,EAAKuxB,WAAapD,EAAIoD,WAElCy4B,EAAOmR,OAAS,IACdrtD,EAAQsvD,YACZpT,EAAOmR,OAASrtD,EAAQsvD,WAAWjC,UAEnCrtD,EAAQsvD,WAAapT,GAEZA,EAAOmR,OAAS,KACrBrtD,EAAQuvD,YACZrT,EAAOmR,OAASrtD,EAAQuvD,WAAWlC,UAEnCrtD,EAAQuvD,WAAarT,KAMxB/tE,KAAK2gF,uBAAuB9uD,EAC7B,EACAmsD,oBAAAA,CAAqB7hB,GACpB,MAAMp3B,EAAMo3B,EAAKI,WAEjB,GAAGx3B,EAAK,CACP,IAAIoE,EAAO,GACX,OAAOpE,EAAI4wC,WACV,IAAK,aACJxsC,EAAO,mDACP,MACD,IAAK,WACJA,EAAO,6CACP,MACD,IAAK,YACJA,EAAO,6CACP,MACD,IAAK,WACJA,EAAO,oCACP,MACD,IAAK,YACJA,EAAO,wCACP,MACD,IAAK,0BACJA,EAAO,yCACP,MACD,IAAK,YACJA,EAAO,oCACP,MACD,IAAK,iBACJA,EAAO,iDAIT,MAAMgX,EAAcpb,EAAIob,aAAaA,aAAepb,EAAIob,YAExD,MAAO,uDACUpb,EAAI4wC,UADd,wHAENxsC,EAFM,gHAKqEgX,EAAY,MAAOngD,KAAK2xE,WAAW5sC,EAAIxR,OAL5G,kBASR,CACC,MAAO,EAGT,EACAiqD,aAAAA,CAActnE,EAAGimD,GAChB,MAAM33B,EAAM23B,EAAKghB,SAUjB,OARG34C,EAAI68C,aACN78C,EAAI88C,WAEJ98C,EAAIu1B,SAIL7jD,EAAEu7B,mBACK,CACR,EACAisC,gBAAAA,CAAiBxnE,EAAGimD,GACnB,MAIMx4B,EAJQw4B,EAAKolB,WACAC,UAGE/3E,OAAO29B,GAAKA,EAAEtJ,UAAU6yB,YAW7C,OAViBhtB,EAAQjJ,MAAM0M,GAAKA,EAAEi6C,cAGrC19C,EAAQ/8B,QAAQwgC,GAAKA,EAAEk6C,YAEvB39C,EAAQ/8B,QAAQwgC,GAAKA,EAAE2yB,UAIxB7jD,EAAEu7B,mBACK,CACR,EACAgwC,4BAAAA,GACCzhF,KAAKw8E,oBAAsBx8E,KAAKw8E,kBACjC,EACA5C,wBAAwBlnB,GAChBA,EAAOvS,YAEfwxB,UAAAA,CAAWC,GACV,MAAM7tD,EAAO,IAAItI,KAAKm2D,GAEhBC,EAAWC,GAAQhzE,OAAOgzE,GAAKjlE,SAAS,EAAG,KAE3CuhC,EAAQyjC,EAAQ9tD,EAAK+iD,WAAa,GAIxC,MAAO,GAHK+K,EAAQ9tD,EAAK8iD,cAGRz4B,KAFJrqB,EAAKgjD,eAGnB,EACAuX,aAAAA,CAAcniB,GAIb,MAAM33B,EAAM23B,EAAKghB,SACd34C,EAAI68C,cACN78C,EAAI88C,UAEN,EACArE,cAAAA,CAAez4C,GACd,MAAMjmC,EAAOimC,EAAI1G,UACjB,MAA+B,oBAA5Bv/B,GAAMi4E,kBAEV,EACAkL,aAAAA,GACC,MAAM3gC,EAAOztC,2BAA2BC,SAAWD,2BAA2BE,UAC3E,4BACH4F,OAAO+d,KAAK4pB,EAAM,SACnB,EACA4gC,aAAAA,CAAc9T,GACb7tE,KAAK48E,QAAU/O,EACf7tE,KAAK2b,SAAU,EACf3b,KAAKi3E,oBAAoBpJ,EAAS,KACjC7tE,KAAKS,MAAMk+E,aAAav0B,UAAUw0B,QAAO,GACzC5+E,KAAKS,MAAMk+E,aAAav0B,UAAUs2B,QAAQ,IAC1C1gF,KAAK2b,SAAU,GAEjB,EACAimE,kBAAAA,GACC5hF,KAAKS,MAAMohF,wBAAwB1hF,MACpC,EACA2hF,SAAAA,GACC9hF,KAAK08E,QAAS,EACd18E,KAAK+c,KAAK3H,KAAK+3D,GAAUuB,iBACxB1uE,KAAK28E,aAAappD,MAAMkzC,cACxBzmE,KAAK28E,aAAax8B,YAAY+tB,mBAC9BluE,KAAK28E,aAAax8B,YAAYA,YAC9BngD,KAAK28E,aAAarb,OAClBthE,KAAK28E,aAAavO,eAClBpuE,KAAKgvD,cAAc1mD,IAAIupB,GAAWA,EAAQ27C,mBAC1C,IACE5qE,KAAK2G,IACP,GAAwB,YAApBA,EAAI4wB,KAAK9Q,QAAwB9f,EAAIhL,KAAM,CAC9CyB,KAAKu7B,UAAUkE,aAAaz/B,KAAK+X,GAAGC,EAAE,uCAEtC,MAAM+pE,EAAgB/hF,KAAKS,MAAMk+E,aAAav0B,UAAU0B,WAAW1gB,WAC7D42C,EAAehiF,KAAKS,MAAMk+E,aAAav0B,UAAU0B,WAAWxgB,UAClEtrC,KAAK2b,SAAU,EACf3b,KAAKi3E,oBAAoBj3E,KAAK48E,QAAS,KACtC58E,KAAKS,MAAMk+E,aAAav0B,UAAUw0B,QAAO,GACzC5+E,KAAKS,MAAMk+E,aAAav0B,UAAUs2B,QAAQ,IAC1C1gF,KAAK2b,SAAU,EAEfla,IAAIokD,SAAS,KACZ,MAAMgG,EAAQ7rD,KAAKS,MAAMk+E,aAAav0B,UAAUvjB,QAAQv1B,cAAc,0BACnEu6C,IACFA,EAAMzgB,WAAa22C,EACnBl2B,EAAMvgB,UAAY02C,MAKtB,MACChiF,KAAKu7B,UAAUI,WAAW37B,KAAK+X,GAAGC,EAAE,4CAEnCwwC,QAAQ,KACVxoD,KAAK08E,QAAS,IAGf18E,KAAKS,MAAMohF,wBAAwB3hF,MACpC,EACA+hF,gBAAAA,CAAiB1jF,GAChB,IAAI2jF,EAAM,GAOV,OALA3jF,EAAKqI,QAAQtI,IACZ4jF,GAAO5jF,EACP4jF,GAAO,OAGDA,CACR,EACAhN,UAAAA,CAAWnxD,GACV,MAAMoxD,EAAWhoC,MAAMC,SAASC,QAAQtpB,EAAM,CAAE6uB,KAAM,kBAAmBjE,MAAM,OAE/E,OADoBxB,MAAMC,SAAS8E,MAAM5E,QAAQ,iBAC5B6nC,CACtB,EACAC,kBAAAA,CAAmBprD,GAClBhqB,KAAK2b,SAAQ,EAEb,MAAM25D,EAAKt1E,KAAKs0E,iBAAiBxgE,QAAQuwB,KAAKkxC,GAAgBA,EAAa/H,kBAAoBxjD,EAAQwjD,kBAEvG,IAAIgI,GAAc,EAClB,QAAet0E,IAAZo0E,EAAG7oD,MAAkC,OAAZ6oD,EAAG7oD,KAAe,CAEjCzsB,KAAKw6E,qBAAqBn2C,KAAK4sC,GAAOA,EAAIxkD,QAE9C+oD,GAAc,GAEtBA,GAAc,CACf,CAEGF,GAAIxC,eAAe3sE,QACrBnG,KAAK+c,KAAK3H,KAAK+3D,GAAU+B,yCAAyCoG,EAAGxC,cAAcxqE,IAAIylE,GAAUA,EAAOE,aAAcqH,EAAG9oD,cACvH5pB,KAAK2G,IACkB,YAApBA,EAAI4wB,KAAK9Q,QACX9f,EAAIhL,KAAKqI,QAAQu7E,IAChB,MAAMpU,EAASuH,EAAGxC,cAAczuC,KAAK0uC,GAAUA,EAAO9E,aAAekU,EAASlU,aAC3EF,QAAgC7sE,IAAtBihF,EAASnQ,WAAwBjE,EAAOiE,SAAWmQ,EAASnQ,cAM9EsD,EAAGxC,cAAclsE,QAAQmnE,IACxB,MAAMgD,EAAU/wE,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAOA,EAAIxkD,MAAQshD,EAAOthD,MACrEskD,IAAShD,EAAOthD,KAAQskD,GAC3BhD,EAAOj3D,KAAO,IAGVi3D,EAAOsK,aAAetH,IACzBhD,EAAOsK,YAActH,GAOtBhD,EAAO2K,eAAgBlD,EAGvBzH,EAAO4K,gBAAkB5K,EAAO2K,gBAAkB3K,EAAOgE,YAEzDhE,EAAO5tB,YAAcngD,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,qBAAuBH,EAAOG,sBAI3FoH,EAAG9oD,YAAcxC,EAAQwC,YACzB8oD,EAAG1tC,QAAU,GAAG0tC,EAAGxzB,WAAWwzB,EAAGvzB,WAEjC/hD,KAAKu0E,sBAAwBe,EAC7Bt1E,KAAKS,MAAMq1E,2BAA2B31E,OAGtCH,KAAK2b,SAAU,CAEhB,EACAo6D,qBAAAA,CAAsB5Z,GACrB,MAAMp3B,EAAMo3B,EAAKI,WACjB,GAAIx3B,EAEJ,MAAO,2OAC8IA,EAAI,YAC1J,EACAixC,gBAAgB7Z,GACR,8JAGR+Z,qBAAqB/Z,GACRA,EAAKI,WAET,2JAEM,IAEfqhB,iBAAiBzhB,GAGT,kKAFKA,EAAKI,WAG+D,aAEjFkJ,YAAAA,CAAankE,GACZtB,KAAKmkE,kBAAoB7iE,CAC1B,EACA60E,eAAAA,CAAgBpD,GACf,MAAO,UAAYA,EAAOl4D,IAAK,IAAK7a,KAAK68E,MAC1C,EACAuF,SAASvwD,GACD,GAAGA,EAAQhX,SAASgX,EAAQwwD,aAEpCC,SAASzwD,IACAA,EAAQ6B,IAAM7B,EAAQyvC,SAASvgC,cAExCglC,SAAAA,CAAUxnE,GAGTyB,KAAKs0E,gBAAkB/1E,EAAK,GAC5ByB,KAAK68E,OAASt+E,EAAK,GAEnByB,KAAKu8E,UAAYh+E,EAAK,IAAIuV,QAAQxL,IAAIupB,IACrC7xB,KAAK0+E,gCAAgC7sD,GACrCA,EAAQ8+B,WAA4C,qBAA/B9+B,EAAQ2kD,mBAEtB,IACH3kD,EACH7H,QAAS,CACRwC,YAAaqF,EAAQhX,IACrB2yD,iBAAkB37C,EAAQ27C,kBAE3B+U,IAAKviF,KAAKoiF,SAASvwD,GACnB2wD,YAAa3wD,EAAQ4wD,iBAAmB,KACxCz7B,IAAKn1B,EAAQvN,uBACbuyD,IAAK72E,KAAKsiF,SAASzwD,GACnBklD,KAAM/2E,KAAKm2E,gBAAgBtkD,GAC3B6B,IAAK7B,EAAQ6wD,kBACb3+B,MAAOlyB,EAAQkyB,SAIjB/jD,KAAKS,MAAMk+E,YAAYv0B,UAAUiH,WAAWrxD,KAAK+8E,mBAAmBj0B,SACpE9oD,KAAKS,MAAMk+E,YAAYv0B,UAAUzgB,QAAQ3pC,KAAKu8E,UAC/C,EACAtF,mBAAAA,CAAoB7/C,GAAM,EAAOurD,GAChC3iF,KAAK+c,KAAK3H,KAAK+3D,GAAUS,8BAA8Bx2C,IACrDx0B,KAAK2G,IACFA,GAAKhL,MAAMyB,KAAK+lE,UAAUx8D,EAAIhL,QAC/BiqD,QAAQ,KACPm6B,GACFA,KAGJ,EACAtN,WAAAA,CAAYrrD,GACX,OAAO,IAAI3oB,QAASC,IACnBtB,KAAK+c,KAAK3H,KAAK+3D,GAAUI,yBAAyBvjD,IAChDpnB,KAAK2G,IACLjI,EAAQiI,MAGZ,EACAm9D,iBAAAA,CAAkBxY,GACjBluD,KAAKkkE,cAAgBhW,CACtB,EACA00B,kBAAAA,GACC,MAAM1b,EAAUlnE,KAAKkkE,cAAiB,IAAMlkE,KAAKkkE,cAAiB,GAC5DiD,EAAe7kE,SAASwP,eAAe,qBAAuBo1D,GACpE,IAAIC,EAAc,OAClB,MAAM52D,EAAO42D,EAAat4D,wBAE1B7O,KAAK+8E,mBAAmB5tE,OAASiK,OAAOguD,eAAej4D,OAASoB,EAAKZ,IAAM,GAC3E3P,KAAKS,MAAMk+E,YAAYv0B,UAAUy4B,UAAU7iF,KAAK+8E,mBAAmB5tE,OACpE,EACA,kBAAM83D,GACLjnE,KAAKokE,kBAAoB,IAAI/iE,QAAQrB,KAAKylE,oBACpCzlE,KAAKokE,kBAEXpkE,KAAKi3E,sBAELj3E,KAAK4iF,oBAEN,GAED50E,MAAO,CACN,2BAA2BoyD,GACQ,cAA/BA,GAAQ8N,oBAAqE,cAA/B9N,GAAQ8N,qBACxDluE,KAAK28E,aAAarb,OAASlB,EAAOjgB,aAGnCngD,KAAK28E,aAAavO,eAAiBhO,EAAOga,sBAC3C,GAED91E,SAAU,CACTw+E,UAAAA,GACC,MAAMrrD,EAAO,GASb,OAPGz3B,KAAKy8E,oCACPhlD,EAAKnxB,KAAK,CACT8iC,MAAOppC,KAAK+X,GAAGC,EAAE,sCAAuC,CAAChY,KAAK+iF,0BAC9DjL,QAAS93E,KAAK6+E,oBAITpnD,CACR,EACAsrD,uBAAAA,GACC,MAAMphB,EAAS,IAAIrJ,IAQnB,OANAt4D,KAAKgvD,aAAapoD,QAAQ49B,IACrBA,EAAIhY,aACPm1C,EAAOp7D,IAAIi+B,EAAIhY,eAIVm1C,EAAOxsC,IACf,EACAslD,2BAAAA,GACC,OAAOz6E,KAAKq0E,kBAAkB5qE,OAAOwnE,GAAOjxE,KAAK06E,oBAAoBx7E,SAAS+xE,EAAI/C,oBACnF,GAEDt3D,OAAAA,GACC5W,KAAKgkE,eAAiBhkE,KAAK+X,GAAG4E,aAAa,CAAC,aAAc,WAC1D3c,KAAKgkE,eAAephE,KAAK,KAAM5C,KAAKikE,iBAAkB,IAEtDjkE,KAAK+c,KAAK3H,KAAK+3D,GAAUC,aAAaxqE,KAAK2G,IAC1CvJ,KAAKg6E,cAAgBzwE,EAAIhL,MAAMy7E,cAC/Bh6E,KAAKs8E,4BAA8B/yE,EAAIhL,MAAM+9E,4BAC7Ct8E,KAAK06E,oBAAsBnxE,EAAIhL,MAAMm8E,oBACrC16E,KAAKy8E,mCAAqClzE,EAAIhL,MAAMk+E,qCAClD1oE,MAAMmC,IACRlW,KAAK2b,SAAU,IAKhB3b,KAAK+c,KAAK3H,KAAK+3D,GAAUtiD,YAAYjoB,KAAK2G,IACnB,WAAnBA,EAAI4wB,KAAK9Q,SACXrpB,KAAKgxE,aAAeznE,EAAIhL,KAAK,GAE7ByB,KAAKs3E,oBAAsBt3E,KAAKgxE,aAAavnE,OAC5CwnE,GAAO1nE,EAAIhL,KAAK,GAAGW,SAAS+xE,EAAIxkD,OAGjCzsB,KAAKw6E,qBAAuBx6E,KAAKgxE,aAAavnE,OAC7CwnE,GAAO1nE,EAAIhL,KAAK,GAAGW,SAAS+xE,EAAIxkD,UAIhC1Y,MAAMmC,IACRlW,KAAK2b,SAAU,IAIhB3b,KAAK+c,KAAK3H,KAAK+3D,GAAU0B,oBAAoBjsE,KAAK2G,IACjDvJ,KAAKq0E,kBAAoB9qE,EAAIhL,OAC3BwV,MAAMmC,IACRlW,KAAK2b,SAAU,GAEjB,EACAnb,OAAAA,GACCR,KAAKinE,cACN,EACAhkE,SAAU,27JC94BX,IAAA+/E,GAAe,CACd1kF,KAAM,qBACNC,KAAMA,KAAAA,CACL0kF,UAAW,OAEZvkF,MAAO,CACNC,SAAU,CACTC,KAAM,CAACC,QAASC,QAChBC,SAAS,EACTC,UAAUC,GACF,CAAC,UAAU,GAAM,GAAOC,SAASD,IAG1CG,SAAU,CACTR,KAAMC,QACNE,SAAS,GAEVmkF,OAAQ,CACPtkF,KAAMC,QACNE,SAAS,GAEVokF,UAAW,CACVvkF,KAAME,OACNC,QAAS,QACTC,UAAUC,GACF,CAAC,QAAS,MAAO,MAAO,UAAUC,SAASD,IAGpDI,WAAYR,QACZY,YAAa,CACZb,KAAM,CAACE,OAAQS,MAAOC,QACtBT,QAAS,IAEVW,UAAW,CACVd,KAAM,CAACE,OAAQS,MAAOC,QACtBT,QAAS,OAEVY,YAAa,CACZf,KAAM,CAACE,OAAQS,MAAOC,QACtBT,QAAS,IAEVO,YAAa,CAACR,OAAQS,MAAOC,SAE9BK,MAAO,CACN,kBACA,oBACA,2BACA,kBACA,oBAEDC,QAAS,CACRC,OAAAA,GACC,OAAOC,KAAKijF,WAAWljF,SACxB,EACAG,IAAAA,GACC,OAAOF,KAAKijF,WAAW/iF,MACxB,EACAC,IAAAA,CAAKC,GACJ,OAAOJ,KAAKijF,WAAW9iF,KAAKC,EAC7B,EACAC,MAAAA,GACC,OAAOL,KAAKijF,WAAW5iF,QACxB,EACAO,KAAAA,CAAMC,EAAMC,EAASC,EAAOC,GAC3B,MAAMgiF,EAAchjF,KACnBiB,EAAQ,CAAA,OAEIC,IAATL,IACHI,EAAMlC,QAAU,IAAM8B,QACTK,IAAVH,IACHE,EAAMF,MAAQ,IAAMA,QACNG,IAAXF,IACHC,EAAMD,OAAS,IAAMA,GAEtB,IAAIG,GAAmB,EAIvB,MAHwB,oBAAbC,WACVD,GAAmB,GAEb,IAAIE,QAAQ,CAACC,EAASC,KAC5B,MAAMC,EAAWC,IAAIC,UAAU,CAC9BpD,KAAM,kBACNqD,MAAKA,IACG,IACNF,IAAIG,EAAEohF,EAAa,CAClBnhF,MAAO,oBACPC,IAAK,eACFhB,GACDG,GAELT,OAAAA,GACCR,KAAKS,MAAMwiF,UAAU9iF,MACtB,EACA6B,aAAAA,GACKhC,KAAKS,MAAMwiF,aACkB,IAAhCjjF,KAAKS,MAAMwiF,UAAUhhF,OAAmBX,EAAQtB,KAAKS,MAAMwiF,UAAUhhF,QAAUV,IACjF,EACAW,SAAAA,GACCC,EAAQC,cAAcC,YAAYF,EACnC,IAEKA,EAAUG,SAASC,cAAc,OAEnCpB,GACHK,EAASgB,IAAIpB,SAASqB,OAAO1D,QAAS,CAAE2D,OAAQ,CAAEC,QAAS,QAG5DtB,QAAAC,UAAAsB,KAAA,WAAA,OAAAC,EAAA,GAAmCD,KAAME,IACxCtB,EAASgB,IAAIM,EAAQ/D,SACrByC,EAASuB,MAAMZ,GACfG,SAASzB,KAAKmC,YAAYb,MAG7B,GAED3B,OAAAA,GACKR,KAAKS,MAAMwiF,YACdjjF,KAAKijF,UAAY,IAAIviF,UAAU0iF,UAAUpjF,KAAKS,MAAMwiF,UAAW,CAC9DtkF,SAAUqB,KAAKrB,SACfS,SAAUY,KAAKZ,SACf8jF,OAAQljF,KAAKkjF,SAGhB,EACAjgF,SAAU,mhCC1GXogF,GAAe,CACdC,kCAAiCA,KACzB,CACN9oE,OAAQ,MACRC,IAAK,oFAGP4e,OAAMA,CAACkqD,EAAQ,KAAM52C,EAAQ,QAErB,CACNnyB,OAAQ,MACRC,IAAK,sDACL5G,OAAQ,CAAE0vE,QAAO52C,YC7Bb,MCaM62C,GAAsB,CAClCllF,KAAM,sBACN6E,WAAY,CACXsgF,0BDhBuC,CACxCnlF,KAAM,4BACN2E,SAAU,q/HCeT5E,UACA2kF,eACAj2B,+BACAmnB,GACA5E,SAAUluE,SAASmuE,SACnBC,SAAUpuE,SAASquE,SACnBQ,QAAS7uE,SAAS8uE,QAClBR,SAAUtuE,SAASuuE,SACnB+T,SAAUtiF,SAASuiF,SACnBvH,WAAYh7E,SAASi7E,yBACrBtuC,EACAqhC,eAED53D,OAAAA,GACC,MAAO,CACN68D,kBAAmB5yE,IAAI6C,SAAS,IAAMtE,KAAKq0E,mBAC3CiD,oBAAqB71E,IAAI6C,SAAS,IAAMtE,KAAKs3E,qBAC7CkD,qBAAsB/4E,IAAI6C,SAAS,IAAMtE,KAAKw6E,sBAC9CR,cAAev4E,IAAI6C,SAAS,IAAMtE,KAAKg6E,eACvCsC,4BAA6B76E,IAAI6C,SAAS,IAAMtE,KAAKs8E,6BACrD5B,oBAAqBj5E,IAAI6C,SAAS,IAAMtE,KAAKq0E,mBAE/C,EACA31E,MAAO,CACNklF,YAAa,CACZ7kF,QAAS,MAEV6b,SAAU,CACThc,KAAMY,OACNyX,UAAU,EACVlY,QAASA,KAAAA,CAAQT,KAAM,GAAIuc,IAAK,KAChC7b,UAAUC,GACFA,GAASA,EAAM4b,MAIzBtc,IAAAA,GACC,MAAO,CACNg+E,UAAW,KACXsH,uBAAwB,KACxBC,OAAQ,KACRC,OAAQ,KACRC,kBAAmB,KACnBC,eAAe,EACf7D,uBAAuB,EACvBF,iBAAiB,EACjBF,mBAAmB,EACnBM,cAAc,EACdb,eAAe,EACfyE,gBAAiB,KACjBC,0BAA2B,KAC3BC,qBAAsB,KACtB5H,oBAAoB,EACpB6H,iBAAkB,KAClBrgB,eAAgB,KAChBC,iBAAiB,EACjB+V,cAAe,KACfsC,4BAA6B,KAC7BgI,oCAAqC,KACrCC,qCAAsC,KACtC7H,QAAQ,EACR/gE,SAAS,EACT04D,kBAAmB,KACnBrD,aAAc,KACdwT,0BAA2B,KAC3BlN,oBAAqB,KACrBkD,qBAAsB,KACtBmC,aAAcl7E,IAAIuiC,SAAS,CAC1BzQ,MAAO,IAAI9X,KACX0kC,YAAa,CACZ+tB,mBAAoB,WACpB/tB,YAAa,kBAEdmhB,OAAQ,GACRgN,WAAW,EACXkK,mBAAmB,EACnBpK,gBAAgB,IAEjBwO,SAAS,EACT1Y,cAAeziE,IAAIK,IAAI,GACvBktD,aAAc,GACd6tB,OAAQ,GACRrwD,YAAa,KACbuS,OAAQ,KACR+9C,aAAc,EACdxI,gBAAiB,KACjBC,sBAAuB,KACvBpQ,kBAAmB,KACnBC,kBAAmB,KACnB2Y,mBAAoB,CACnB1nE,UAAW,IACXvO,MAAO,mBACPypD,OAAQ,UACR5jD,YAAalL,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,4BAC3D24C,YAAY,EACZqsB,gBAAiBh9E,KAAKi9E,eACtBC,UAAW,GACXuH,qBAAsB,IACtB37B,QAAS,CACR,CACC2B,UAAW,SAAU0R,EAAMkC,EAAiBjC,GAE3C,IAAID,EAAKghB,SAASr/C,UAAU6yB,WAAY,OACxC,IAAI4e,EAAWjtE,SAASC,cAAc,SACtCgtE,EAAS3wE,KAAO,WAGhB2wE,EAASh2D,iBAAiB,QAAUrD,IACnCA,EAAEu7B,kBAGE4sB,GAAmBA,EAAgB+e,aACtC/e,EAAgB+e,YAAYlnE,EAAGimD,KAIjCA,EAAKghB,SAASr/C,UAAUyxC,SAAWA,EAEnC,IAAIptE,EAAUG,SAASC,cAAc,OAKrC,OAJAJ,EAAQuN,MAAM2tE,QAAU,0FAExBl7E,EAAQa,YAAYusE,GAEbptE,CACR,EACAm7E,eAAgB,SAAUnhB,EAAMkC,EAAiBjC,GAEhD,IAAImT,EAAWjtE,SAASC,cAAc,SAatC,OAZAgtE,EAAS3wE,KAAO,WAGhB2wE,EAASh2D,iBAAiB,QAAUrD,IACnCA,EAAEu7B,kBAGE4sB,GAAmBA,EAAgB+e,aACtC/e,EAAgB+e,YAAYlnE,EAAGimD,KAI1BoT,CACR,EACAgO,SAAU,SACVzf,YAAY,EACZO,gBAAiB,CAChB+e,YAAap9E,KAAKw9E,eAEnBC,qBAAsB,CACrBL,YAAap9E,KAAK09E,kBAEnBpuE,MAAO,GACPquE,SAAU,cAcX,CAAC58E,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,0BAA2BwqB,MAAO,UAAW0sB,cAAc,EAAO4O,YAAY,EAAOrT,UAAWzqD,KAAK0kF,WAAYh0B,SAAQ,EAAOp7C,SAAU,IAAKqoE,SAAU,cAC/M,CAAC58E,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sCAAuCk3C,cAAc,EAAM1sB,MAAO,MAAOioB,UAAWzqD,KAAK49E,iBAAkBtY,UAAW,EAAG5U,SAAS,GACxL,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,0BAA2BwqB,MAAO,kBAAmB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAsBzQ,UAAW,GAChL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,2BAA4BwqB,MAAO,mBAAoB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACnL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,6BAA8BwqB,MAAO,gBAAiB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAsBzQ,UAAW,GACjL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,0BAA2BwqB,MAAO,UAAW0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAsBzQ,UAAW,GACxK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,6BAA8BwqB,MAAO,oBAAqBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAClK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,MAAO0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACjK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uBAAwBwqB,MAAO,WAAY0sB,cAAc,EAC7GzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACpD,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,yBAA0B0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACpL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wBAAyBwqB,MAAO,QAAS0sB,cAAc,EAAOzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACtK,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,iCAAkCwqB,MAAO,eAAgB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAErL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uCAAwCwqB,MAAO,oBAAqB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAC5M,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sCAAuCwqB,MAAO,mBAAoB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAC1M,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uCAAwCwqB,MAAO,oBAAqB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAC5M,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wCAAyCwqB,MAAO,qBAAsB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAE9M,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,kCAAmCwqB,MAAO,gBAAiB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAEvL,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wCAAyCwqB,MAAO,yBAA0B0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAClN,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,uCAAwCwqB,MAAO,wBAAyB0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAChN,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,wCAAyCwqB,MAAO,yBAA0B0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAClN,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,yCAA0CwqB,MAAO,0BAA2B0sB,cAAc,EAAMzE,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG/Y,SAAS,GAEpN,CAACxrD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mCACrDk3C,aAAcgN,GACdkC,iBAAkBp+D,KAAK69E,sBACvBC,OAAQ99E,KAAK+9E,kBACbv7C,MAAO,aAAcioB,UAAWzqD,KAAKg+E,qBAAsB1Y,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,GAC/F,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,mCAAoCwqB,MAAO,aAChG0sB,aAAcgN,GACdkC,iBAAkBp+D,KAAK69E,sBACvBC,OAAQ99E,KAAK+9E,kBACbtzB,UAAWzqD,KAAKg+E,qBAAsB1Y,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,GAC1E,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,+BACrDk3C,aAAc,OACd+uB,mBAAoB,CAAEC,aAAcl+E,KAAKm+E,oBACzC37C,MAAO,eAAgBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,GAClG,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,+BACrDk3C,aAAc,OACd+uB,mBAAoB,CAAEC,aAAcl+E,KAAKm+E,oBACzC37C,MAAO,eAAgBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAGh2D,MAAO,IAAKohD,SAAS,IAEnGzB,aAAa,EACbuO,cAAe,yBAEhB4gB,yBAA0B,CAC1B,CACCn5E,MAAO,sBACPiJ,QAASm0B,UAERriC,KAAKgvD,aAAavlD,OAAO80E,IAAOhgF,EAAKW,SAASq/E,IAAK33E,QAAQ43E,IACvDA,EAAIjP,WAAUiP,EAAIjP,SAAStY,SAAU,KAGzC14D,EAAKqI,QAAQy2C,IACTA,EAAEkyB,WAAUlyB,EAAEkyB,SAAStY,SAAU,KAGrCj3D,KAAKgvD,aAAezwD,KAIxB,EACAuB,QAAS,CACR2+E,eAAAA,CAAgBtO,GACfnwE,KAAK0+E,gCAAgCvO,GACrCnwE,KAAKS,MAAMk+E,YAAYv0B,UAAUw0B,QAAO,EACzC,EACAT,kBAAAA,GACC,MAAO,CACNn+E,KAAK+X,GAAGC,EAAE,oCACVhY,KAAK+X,GAAGC,EAAE,+BACVhY,KAAK+X,GAAGC,EAAE,+BACVhY,KAAK+X,GAAGC,EAAE,6BACVhY,KAAK+X,GAAGC,EAAE,6BACVhY,KAAK+X,GAAGC,EAAE,+BAEZ,EACA+lE,kBAAiBA,CAAC12E,EAAGC,EAAG03E,EAAMC,EAAMhzB,EAAQ3iD,EAAKuK,IAC5CxM,QAA+C,EAC/CC,SAA+C,EAIxB,cAAxB2kD,EAAOoW,QAAQ7/B,MACVp8B,KAAK6gD,IAAI3/C,EAAE43E,QAAU94E,KAAK6gD,IAAI5/C,EAAE63E,QACL,cAAxBjzB,EAAOoW,QAAQ7/B,MAClBp8B,KAAK6gD,IAAI5/C,EAAE63E,QAAU94E,KAAK6gD,IAAI3/C,EAAE43E,QAIjC94E,KAAK6gD,IAAI3/C,EAAE43E,QAAU94E,KAAK6gD,IAAI5/C,EAAE63E,QAExCrB,qBAAAA,CAAsBsB,EAAWC,GAChC,IAAKA,IAAWA,EAAOC,YAAcD,EAAOC,UAAUnsC,QACrD,OAAO,EAGR,MAAM2pB,EAAUuiB,EAAOC,UAEjBC,EAAWv6C,IAChB,IAAKA,EAAK,OAAO,KACjB,IAAIkwB,EASJ,OAPCA,EADGlwB,aAAetpB,KACb0xB,MAAMC,SAASmC,WAAWxK,GACN,iBAARA,EACZoI,MAAMC,SAASC,QAAQtI,GAEvBoI,MAAMC,SAASuF,WAAWxoC,OAAO46B,IAGhCkwB,EAAG/hB,QAAU+hB,EAAK,MAGpBzhC,EAAM8rD,EAAQH,EAAU,IACxB1rD,EAAM6rD,EAAQH,EAAU,IAG9B,OAAI3rD,IAAQC,EACJopC,EAAQ1pB,QAAQ3f,EAAK,UAIzBA,IAAOC,KACHopC,GAAWrpC,EAAI8a,QAAQ,QAAUuuB,GAAWppC,EAAIkb,MAAM,OAI/D,EACAkwC,iBAAAA,CAAkBC,GAEjB,MAAMC,EAAgB,GACtB/+E,KAAKgvD,aAAapoD,QAAQy2C,IACzB0hC,EAAcz4E,KAAK,GAAG+2C,EAAE7wB,eAAexsB,KAAK68E,YAG7C,MAAM8H,EAAmB,IAAI,IAAIrsB,IAAIymB,IAC/BzD,EAAUt7E,KAAK+X,GAAGC,EAAE,wCAAyC,CAAChY,KAAKmkF,2BAA2BhkC,cACpGi7B,GAAiBuJ,EAAkB7F,EAAM9zC,cAAeswC,EAASt7E,KAAKu7B,UAAWv7B,KAAK+X,GACvF,EACA6sE,kBAAAA,CAAmB9F,GAElB,MAAMC,EAAgB,GACtB/+E,KAAKgvD,aAAapoD,QAAQ49B,IACrBA,EAAIqgD,eAAe9F,EAAcz4E,KAAKk+B,EAAIqgD,eAC1CrgD,EAAIsgD,oBAAoB/F,EAAcz4E,KAAKk+B,EAAIsgD,sBAIpD,MAAMH,EAAmB,IAAI,IAAIrsB,IAAIymB,IAC/BzD,EAAUt7E,KAAK+X,GAAGC,EAAE,yCAA0C,CAAChY,KAAKmkF,2BAA2BhkC,cACrGi7B,GAAiBuJ,EAAkB7F,EAAM9zC,cAAeswC,EAASt7E,KAAKu7B,UAAWv7B,KAAK+X,GACvF,EACAylE,aAAAA,CAActnE,EAAGimD,GAChB,MAAM33B,EAAM23B,EAAKghB,SAUjB,OARG34C,EAAI68C,aACN78C,EAAI88C,WAEJ98C,EAAIu1B,SAIL7jD,EAAEu7B,mBACK,CACR,EACAisC,gBAAAA,CAAiBxnE,EAAGimD,GACnB,MAIMx4B,EAJQw4B,EAAKolB,WACAC,UAGE/3E,OAAO29B,GAAKA,EAAEtJ,UAAU6yB,YAW7C,OAViBhtB,EAAQjJ,MAAM0M,GAAKA,EAAEi6C,cAGrC19C,EAAQ/8B,QAAQwgC,GAAKA,EAAEk6C,YAEvB39C,EAAQ/8B,QAAQwgC,GAAKA,EAAE2yB,UAIxB7jD,EAAEu7B,mBACK,CACR,EACAkvC,sBAAAA,CAAuB9uD,GACtB,MAAM+uD,EAAgB,GAChBC,EAAgB,GAEtBhvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,oCACjC6Z,EAAQkvD,iBAAmB,EAC3BlvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,oCACjC6Z,EAAQovD,iBAAmB,EAE3BpvD,EAAQihD,cAAclsE,QAAQmnE,IACG,aAA7BA,EAAOG,oBAAmC0S,EAAct6E,KAAKynE,GAChC,aAA7BA,EAAOG,oBAAmC2S,EAAcv6E,KAAKynE,KAOjE6S,EAAch6E,QAAQs6E,IACrB,GAAiB,MAAdA,EAAMz0D,MAAgBoF,EAAQkvD,kBAAoB,EAAG,EACjB,iBAAfG,EAAMz0D,KAAoBzsB,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQy0D,EAAMz0D,MAAQy0D,EAAMz0D,MACpGu4B,SACVnzB,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQkvD,iBAAmB,IAE3BlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQkvD,iBAAmB,EAE7B,MAAyB,MAAdG,EAAMz0D,MAAgBoF,EAAQkvD,kBAAoB,GAC5DlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQkvD,iBAAmB,GACM,GAAxBG,EAAM9S,gBAA+C,MAArB8S,EAAMnP,aAAuBlgD,EAAQkvD,kBAAoB,GAClGlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQkvD,iBAAmB,GACO,GAAxBG,EAAM9S,gBAA2B8S,EAAMhC,QAAU,GAAKrtD,EAAQkvD,kBAAoB,IAC5FlvD,EAAQivD,aAAe9gF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQkvD,iBAAmB,KAI7BF,EAAcj6E,QAAQs6E,IACrB,GAAiB,MAAdA,EAAMz0D,MAAgBoF,EAAQkvD,kBAAoB,EAAG,EACjB,iBAAfG,EAAMz0D,KAAoBzsB,KAAKgxE,aAAa3sC,KAAK4sC,GAAOA,EAAIxkD,MAAQy0D,EAAMz0D,MAAQy0D,EAAMz0D,MACpGu4B,SACVnzB,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQovD,iBAAmB,IAE3BpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQovD,iBAAmB,EAE7B,MAAyB,MAAdC,EAAMz0D,MAAgBoF,EAAQovD,kBAAoB,GAC5DpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQovD,iBAAmB,GACM,GAAxBC,EAAM9S,gBAA+C,MAArB8S,EAAMnP,aAAuBlgD,EAAQovD,kBAAoB,GAClGpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,6BACjC6Z,EAAQovD,iBAAmB,GACO,GAAxBC,EAAM9S,gBAA2B8S,EAAMhC,QAAU,GAAKrtD,EAAQovD,kBAAoB,IAC5FpvD,EAAQmvD,aAAehhF,KAAK+X,GAAGC,EAAE,+BACjC6Z,EAAQovD,iBAAmB,IAG9B,EACA8D,mBAAmB7gF,GACdA,EAAKi8C,YAEFj8C,GAAMi8C,aAAaA,aAAej8C,GAAMi8C,YAFlB,GAI9B6kC,WAAAA,CAAY9gF,GAGX,IAAIA,GAAMuoB,KAAM,MAAO,GACvB,GAAGvoB,EAAKuoB,MAAM0zB,YAAa,OAAOj8C,EAAKuoB,KAAK0zB,YAE5C,MAAM8kC,EAAcjlF,KAAKgxE,aAAa3sC,KAAK5X,GAAQA,EAAKA,MAAQvoB,EAAKuoB,MACrE,OAAIw4D,EAEGA,EAAY9kC,YAFKj8C,EAAKuoB,IAG9B,EACAy4D,iCAAAA,CAAkCnX,GAGa,cAA3CA,EAAO5tB,aAAa+tB,oBAAiF,cAA3CH,EAAO5tB,aAAa+tB,mBAChFH,EAAOzM,OAASyM,EAAO5tB,YAAYA,YAEnC4tB,EAAOzM,OAAS,EAElB,EACA6jB,eAAAA,CAAgBjvE,GACf,GAAGlW,KAAKS,MAAMk+E,YAAYv0B,UAAW,CACpC,MAAMyB,EAAQ7rD,KAAKS,MAAMk+E,YAAYv0B,UAG/Bg7B,EAAWv5B,EAAM+zB,aAAan2E,OAAO5C,GAAgB,0BAAXA,EAAE27B,OAE5C6iD,EAAUnvE,EAAEjX,MAAMqlB,wBAA0BtkB,KAAK+X,GAAGC,EAAE,oBAAsB,GAAK9B,EAAEjX,MAAMqlB,uBAEzFghE,EAAY,CAAE9iD,MAAO,yBAA0B5jC,KADpCsX,EAAEjX,MAAMqlB,wBAA0BtkB,KAAK+X,GAAGC,EAAE,oBAAsB,KAAO,IACrB/Y,MAAOomF,GAG5Ex5B,EAAMs0B,UAAU,IAAIiF,EAAUE,GAC/B,CAED,EACA5G,+BAAAA,CAAgC7sD,GAC/B,MAAMqgB,EAAM/E,MAAMC,SAAS8E,MAG3BrgB,EAAQihD,cAAclsE,QAAQmnE,IAE7BA,EAAO5tB,YAAcngD,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,qBAAuBH,EAAOG,oBAG1FH,EAAO4H,UAAY9B,GAAkB9F,EAAQ/tE,KAAKgxE,cAElD,MAAMjtD,EAAOopB,MAAMC,SAASC,QAAQ0gC,EAAOx6C,OAAOob,MAAM,OACxDo/B,EAAOsR,UAAYt7D,EACnBgqD,EAAOmR,OAASn7D,EAAKuxB,WAAapD,EAAIoD,WAElCy4B,EAAOmR,OAAS,IACdrtD,EAAQsvD,YACZpT,EAAOmR,OAASrtD,EAAQsvD,WAAWjC,UAEnCrtD,EAAQsvD,WAAapT,GAEZA,EAAOmR,OAAS,KACrBrtD,EAAQuvD,YACZrT,EAAOmR,OAASrtD,EAAQuvD,WAAWlC,UAEnCrtD,EAAQuvD,WAAarT,KAMxB/tE,KAAK2gF,uBAAuB9uD,EAC7B,EACA0tD,SAAAA,GACC,OAAOlkE,KAAKC,MAAM0qB,aAAaI,QAAQpmC,KAAK+8E,mBAAmBvf,gBAAkB,OAClF,EACAgiB,SAAAA,CAAU3zB,GAET,IAAI7rD,KAAKy/E,cAAe,OACxB,MACMhlB,EAAQ,CACb3R,QAFiB+C,EAAM6zB,kBAEJp3E,IAAIgnD,IAAG,CACzB9sB,MAAO8sB,EAAI9sB,MACX+pB,QAAS+C,EAAI/C,QACbj9C,MAAOggD,EAAIhgD,SAEZlI,KAAMykD,EAAM8zB,aAAar3E,IAAIo/C,IAAC,CAC7BllB,MAAOklB,EAAEllB,MACTl5B,IAAKo+C,EAAEp+C,OAERu/C,QAASgD,EAAM+zB,aACfC,cAAeh0B,EAAM0F,oBAGtBvrB,aAAaC,QAAQjmC,KAAK+8E,mBAAmBvf,cAAeniD,KAAK6f,UAAUu/B,GAC5E,EACAqlB,gBAAAA,GACC,MAAMj0B,EAAQ7rD,KAAKS,MAAMk+E,YAAYv0B,UAErCpqD,KAAKmkE,oBAELtY,EAAMgF,GAAG,cAAe,KACvB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,gBAAiB,KACzB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,0BAA2B,KACnC7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,gBAAiB,KACzB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,sBAAuB,KAC/B7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,aAAc,KACtB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,eAAgB,KACxB7wD,KAAKw/E,UAAU3zB,KAGhBA,EAAMgF,GAAG,iBAAkB,KAC1B7wD,KAAKw/E,UAAU3zB,KAGhB,MAAMk0B,EAAQ//E,KAAKu/E,YAEnB1zB,EAAMgF,GAAG,iBAAkB,KAC1B,IAAI7wD,KAAKy/E,cAAe,CAEvB,GAAIM,GAAOj3B,UAAY9oD,KAAKggF,kBAAmB,CAC9C,MAAMzvB,EAASwvB,EAAMj3B,QAAQxgD,IAAIgnD,IAAG,CACnC9sB,MAAO8sB,EAAI9sB,MACXlzB,MAAOggD,EAAIhgD,MACXi9C,QAAS+C,EAAI/C,WAIdV,EAAMo0B,gBAAgB1vB,GAEtBvwD,KAAKggF,mBAAoB,CAC1B,CAMA,GAJID,GAAOl3B,UAAY7oD,KAAKkgF,kBAC3BlgF,KAAKkgF,iBAAkB,EACvBr0B,EAAMs0B,UAAUJ,EAAMl3B,UAEnBk3B,GAAOF,gBAAkB7/E,KAAKogF,sBAAuB,CACxDpgF,KAAKogF,uBAAwB,EAC7B,IAAK,IAAIC,KAAMN,EAAMF,cACpBh0B,EAAM2F,qBAAqB6uB,EAAG79C,MAAO69C,EAAGphF,MAE1C,CAEI8gF,GAAO34E,MAAMjB,SAAWnG,KAAKsgF,eAChCtgF,KAAKsgF,cAAe,EAEpBnvE,WAAW,KACV,MAAMovE,EAAWR,EAAM34E,KAAKkB,IAAIo/C,IAC/B,MAAM4H,EAAMzD,EAAM20B,cAAcC,WAAW/4B,EAAEllB,OAC7C,OAAK8sB,EAGE,CAAErD,OAAQqD,EAAKhmD,IAAKo+C,EAAEp+C,KAFrB,OAGNG,OAAO5K,SAEVgtD,EAAM60B,QAAQH,IACZ,MAEJvgF,KAAKy/E,eAAgB,CAEtB,GAGF,EACAgC,4BAAAA,GACCzhF,KAAKw8E,oBAAsBx8E,KAAKw8E,kBACjC,EACA5C,wBAAwBlnB,GAChBA,EAAOvS,YAEfolC,kBAAkB7yB,GACVA,EAAOokB,WAAa,IAAMpkB,EAAOvS,YAEzCqlC,8BAA8B9yB,GACtBA,EAAOpuC,uBAEfmhE,0BAA0B/yB,GAClBA,EAAOvS,YAEfwxB,UAAAA,CAAWC,GACV,GAAiB,OAAdA,EAAoB,MAAO,GAC9B,MAAM7tD,EAAO,IAAItI,KAAKm2D,GAEhBC,EAAWC,GAAQhzE,OAAOgzE,GAAKjlE,SAAS,EAAG,KAE3CuhC,EAAQyjC,EAAQ9tD,EAAK+iD,WAAa,GAIxC,MAAO,GAHK+K,EAAQ9tD,EAAK8iD,cAGRz4B,KAFJrqB,EAAKgjD,eAGnB,EACA2d,UAAAA,CAAWvoB,GACV,MAAMupB,EAAgBpjF,SAASC,cAAc,OAC7CmjF,EAAcp8C,UAAY,eAC1Bo8C,EAAch2E,MAAMmhC,QAAU,OAC9B60C,EAAch2E,MAAMi2E,WAAa,UACjCD,EAAch2E,MAAMk2E,eAAiB,SACrCF,EAAch2E,MAAMP,OAAS,OAE7B,MAAM41B,EAAMo3B,EAAKI,WAEXspB,EAAeA,CAACx7B,EAAWy7B,EAAUC,KAC1C,MAAMC,EAAM1jF,SAASC,cAAc,UAgBnC,OAfAyjF,EAAI18C,UAAY,4BAChB08C,EAAIt2E,MAAMmhC,QAAU,OACpBm1C,EAAIt2E,MAAMi2E,WAAa,SACvBK,EAAIt2E,MAAMk2E,eAAiB,SAC3BI,EAAIt2E,MAAMP,OAAS,OACnB62E,EAAIt2E,MAAMu2E,YAAc,QACxBD,EAAIt2E,MAAM8iE,QAAU,IACJ,kBAAbnoB,IAA+B27B,EAAIt2E,MAAMw2E,UAAY,iBACxDF,EAAIjkB,UAAY,aAAa1X,mDAC7B27B,EAAIjlF,MAAQf,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE8tE,IACvCE,EAAIzsE,iBAAiB,QAAUrD,IAC9BA,EAAEu7B,kBACFv7B,EAAEiwE,2BACFJ,MAEMC,GAQR,OALAN,EAAc1qD,OACb6qD,EAAa,oBAAqB,uBAAwB,IAAM7lF,KAAKo1E,mBAAmBrwC,IACxF8gD,EAAa,iBAAkB,+BAAgC,IAAM7lF,KAAKomF,aAAarhD,KAGjF2gD,CACR,EAEApH,aAAAA,CAAcniB,GAIb,MAAM33B,EAAM23B,EAAKghB,SACd34C,EAAI68C,cACN78C,EAAI88C,UAEN,EACArE,cAAAA,CAAez4C,GACd,MAAMjmC,EAAOimC,EAAI1G,UACjB,MAA+B,oBAA5Bv/B,GAAMi4E,kBAEV,EACAkL,aAAAA,GACC,MAAM3gC,EAAOztC,2BAA2BC,SAAWD,2BAA2BE,UAC3E,4BACH4F,OAAO+d,KAAK4pB,EAAM,SACnB,EACA6gC,kBAAAA,GACC5hF,KAAKS,MAAMohF,wBAAwB1hF,MACpC,EACA2hF,SAAAA,GACC,MAAMuE,EAAOrmF,KAAKgvD,cAAc1mD,IAAIupB,GAAWA,EAAQ27C,kBAEjD8Y,EAAmB,IAAItmF,KAAKgvD,cAElChvD,KAAK08E,QAAS,EACd18E,KAAK28E,aAAarO,WAAatuE,KAAK28E,aAAanE,kBACjDx4E,KAAK+c,KAAK3H,KAAK+3D,GAAUuB,iBACxB1uE,KAAK28E,aAAappD,MAAMkzC,cACxBzmE,KAAK28E,aAAax8B,YAAY+tB,mBAC9BluE,KAAK28E,aAAax8B,YAAYA,YAC9BngD,KAAK28E,aAAarb,OAClBthE,KAAK28E,aAAavO,eAClBiY,EACArmF,KAAK28E,aAAarO,YAChB1rE,KAAK2G,IAEiB,YAApBA,EAAI4wB,KAAK9Q,QAAwB9f,EAAIhL,KACxCyB,KAAKu7B,UAAUkE,aAAaz/B,KAAK+X,GAAGC,EAAE,uCAEtChY,KAAKu7B,UAAUI,WAAW37B,KAAK+X,GAAGC,EAAE,0CAIrC,MAAMuuE,EAAah9E,EAAIhL,KACvB8nF,EAAKz/E,QAAQ4/E,IACZ,MAAMzT,EAASwT,EAAWliD,KAAK0uC,GAAUA,EAAOvF,kBAAoBgZ,GAE9DlR,EAAKt1E,KAAKs0E,gBAAgBjwC,KAAKixC,GAAMA,EAAG9H,kBAAoBgZ,GAElEzT,EAAO5yB,YAAcngD,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,oBAAsB6E,EAAO7E,oBAEzFoH,EAAGxC,cAAcxsE,KAAKysE,GACtBuC,EAAGxC,cAAc1rE,KAAK,CAACC,EAAGC,IAAM,IAAImU,KAAKpU,EAAEksB,OAAS,IAAI9X,KAAKnU,EAAEisB,UAKhE,MAAMs4B,EAAQ7rD,KAAKS,MAAMk+E,YAAYv0B,UAC/Bq8B,EAAU56B,EAAMC,WAAW1gB,WAC3Bs7C,EAAU76B,EAAMC,WAAWxgB,UAE3Bq7C,EAAa3mF,KAAK4mF,uBAAuB5mF,KAAKs0E,iBAEpDzoB,EAAMliB,QAAQg9C,GACd96B,EAAM+yB,QAAO,GAEbn9E,IAAIokD,SAAS,KACZ,MAAMgG,EAAQ7rD,KAAKS,MAAMk+E,aAAav0B,UAAUvjB,QAAQv1B,cAAc,0BACnEu6C,IACFA,EAAMzgB,WAAaq7C,EACnB56B,EAAMvgB,UAAYo7C,OAIlBl+B,QAAQ,KACVxoD,KAAK08E,QAAS,EACd18E,KAAKgvD,aAAes3B,IAGrBtmF,KAAKS,MAAMohF,wBAAwB3hF,MACpC,EACA0mF,sBAAAA,CAAuBC,GAEtB,OAAOA,EAASv+E,IAAIupB,IAUnB,GAPAA,EAAQ8+B,YAAa,EAErB9+B,EAAQsvD,WAAa,KACrBtvD,EAAQuvD,WAAa,KAErBphF,KAAK0+E,gCAAgC7sD,GAElC7xB,KAAKgxE,cAAgBn/C,EAAQpF,KAAM,CACrC,MAAMwkD,EAAMjxE,KAAKgxE,aAAa3sC,KAAK1B,GAAKA,EAAElW,MAAQoF,EAAQpF,MAG1DoF,EAAQi1D,SAAW7V,EAAI9wB,WACxB,CAEA,MAAO,IACHtuB,EACHihD,cAAejhD,EAAQihD,cACvB9oD,QAAS,CACRwC,YAAaqF,EAAQrF,YACrBghD,iBAAkB37C,EAAQ27C,kBAE3B+U,IAAKviF,KAAKoiF,SAASvwD,GACnB2wD,YAAa3wD,EAAQ4wD,iBAAmB,KACxCz7B,IAAKn1B,EAAQvN,uBACbuyD,IAAK72E,KAAKsiF,SAASzwD,GACnBklD,KAAM/2E,KAAKm2E,gBAAgBtkD,GAC3Bk1D,aAAc/mF,KAAKgnF,kBAAkBn1D,GACrCo1D,cAAejnF,KAAKknF,mBAAmBr1D,GACvC6B,IAAK7B,EAAQ6wD,kBACb3+B,MAAOlyB,EAAQkyB,QAGlB,EACAk+B,gBAAAA,CAAiB1jF,GAChB,IAAI2jF,EAAM,GAOV,OALA3jF,EAAKqI,QAAQtI,IACZ4jF,GAAO5jF,EACP4jF,GAAO,OAGDA,CACR,EACAhN,UAAAA,CAAWnxD,GACV,MAAMoxD,EAAWhoC,MAAMC,SAASC,QAAQtpB,EAAM,CAAE6uB,KAAM,kBAAmBjE,MAAM,OAE/E,OADoBxB,MAAMC,SAAS8E,MAAM5E,QAAQ,iBAC5B6nC,CACtB,EACAC,kBAAAA,CAAmBprD,GAClB,MAAMsrD,EAAKt1E,KAAKs0E,gBAAgBjwC,KAAK8rC,GAAiBA,EAAc3C,kBAAoBxjD,EAAQwjD,kBAE7F8H,GAAIxC,eAAe3sE,QACrBnG,KAAK+c,KAAK3H,KAAK+3D,GAAU+B,yCAAyCoG,EAAGxC,cAAcxqE,IAAIylE,GAAUA,EAAOE,aAAcqH,EAAG9oD,cACvH5pB,KAAK2G,IACkB,YAApBA,EAAI4wB,KAAK9Q,QACX9f,EAAIhL,KAAKqI,QAAQu7E,IAChB,MAAMpU,EAASuH,EAAGxC,cAAczuC,KAAK0uC,GAAUA,EAAO9E,aAAekU,EAASlU,aAC3EF,QAAgC7sE,IAAtBihF,EAASnQ,WAAwBjE,EAAOiE,SAAWmQ,EAASnQ,cAM9E,MAAMwD,EAA0B,OAAZF,EAAG7oD,KAEvB6oD,EAAGxC,cAAclsE,QAAQmnE,IACE,iBAAhBA,EAAOthD,OAChBshD,EAAOthD,KAAOzsB,KAAKs3E,oBAAoBjzC,KAAK4sC,GAAOA,EAAIxkD,MAAQshD,EAAOthD,QAInEshD,EAAOsK,aAAetK,EAAOthD,OAChCshD,EAAOsK,YAActK,EAAOthD,MAG7BshD,EAAOj3D,KAAO,GAIdi3D,EAAO2K,eAAgBlD,EAGvBzH,EAAO4K,iBAAkBnD,IAAuBzH,EAAOgE,cAIxD,MAAMjwB,EAAUwzB,EAAGxzB,SAAWwzB,EAAG6R,gBAC3BplC,EAAWuzB,EAAGvzB,UAAYuzB,EAAG8R,iBACnC9R,EAAG1tC,QAAU,GAAGka,KAAWC,IAE3B/hD,KAAKu0E,sBAAwBe,EAC7Bt1E,KAAKS,MAAMq1E,2BAA2B31E,MACvC,EACAimF,YAAAA,CAAarhD,GACZ,MAAMlT,EAAU7xB,KAAKs0E,gBAAgBjwC,KAAKl7B,GAAKA,EAAEqkE,kBAAoBzoC,EAAIyoC,kBACrE37C,GAMJA,EAAQihD,cAAclsE,QAAQmnE,IAE7B,MAAMsZ,EAAernF,KAAKq0E,kBAAkBhwC,KAAK4sC,GAAOA,EAAI/C,oBAAsBH,EAAOG,oBACzFH,EAAOoD,SAAWkW,EAAalW,WAEhCnxE,KAAKkkF,gBAAkBryD,EACvB7xB,KAAKS,MAAM6mF,OAAOnnF,QAVjBH,KAAKu7B,UAAUsE,UAAU,+BAW3B,EACAk2C,qBAAAA,CAAsB5Z,GACrB,MAAMp3B,EAAMo3B,EAAKI,WACjB,GAAIx3B,EAEJ,MAAO,8NACiIA,EAAI,YAC7I,EACAixC,gBAAgB7Z,GACR,8JAGR8Z,cAAc9Z,GAEN,kGADKA,EAAKI,WAED,kEAEjBgrB,kBAAiBA,IACT,2JAGRrR,qBAAqB/Z,GACRA,EAAKI,WAET,2JAEM,IAEfqhB,iBAAiBzhB,GAGT,kKAFKA,EAAKI,WAG+D,aAEjFyhB,oBAAAA,CAAqB7hB,GACpB,MAAMp3B,EAAMo3B,EAAKI,WAEjB,GAAGx3B,EAAK,CACP,IAAIoE,EAAO,GACX,OAAOpE,EAAI4wC,WACV,IAAK,aACJxsC,EAAO,mDACP,MACD,IAAK,WACJA,EAAO,6CACP,MACD,IAAK,YACJA,EAAO,6CACP,MACD,IAAK,WACJA,EAAO,oCACP,MACD,IAAK,YACJA,EAAO,wCACP,MACD,IAAK,0BACJA,EAAO,yCACP,MACD,IAAK,YACJA,EAAO,oCACP,MACD,IAAK,iBACJA,EAAO,iDAIT,MAAMgX,EAAcpb,EAAIob,aAAaA,aAAepb,EAAIob,YAExD,MAAO,uDACUpb,EAAI4wC,UADd,wHAELxsC,EAFK,gHAKsEgX,EAAY,MAAOngD,KAAK2xE,WAAW5sC,EAAIxR,OAL7G,kBASR,CACC,MAAO,EAGT,EACAkyC,YAAAA,CAAankE,GACZtB,KAAKmkE,kBAAoB7iE,CAC1B,EACA60E,eAAAA,CAAgBtkD,GACf,MAAO,UAAYA,EAAQrF,YAAa,IAAKxsB,KAAK68E,MACnD,EACAuF,SAASvwD,GACD,GAAGA,EAAQrF,iBAAiBqF,EAAQwwD,aAE5CC,SAASzwD,IACAA,EAAQ6B,IAAM7B,EAAQyvC,SAASvgC,cAExCimD,kBAAkBn1D,GACdA,EAAQ21D,uBAA+B31D,EAAQ21D,uBAC3C31D,EAAQ41D,iBAAmB,IAAM51D,EAAQ61D,kBAEjDR,mBAAmBr1D,GACXA,EAAQ81D,yBAA2B,GAE3C,eAAM5hB,CAAUxnE,GACfyB,KAAKs0E,gBAAkB/1E,EAAK,GAC5ByB,KAAK68E,OAASt+E,EAAK,GAEnByB,KAAKu8E,UAAYv8E,KAAK4mF,uBAAuB5mF,KAAKs0E,uBAE5Ct0E,KAAKokE,kBAEXpkE,KAAKS,MAAMk+E,YAAYv0B,UAAUzgB,QAAQ3pC,KAAKu8E,UAC/C,EACAtF,mBAAAA,CAAoB7/C,GAAM,EAAOurD,GAChC3iF,KAAK2b,SAAU,EACf3b,KAAK+c,KAAK3H,KAAK+3D,GAAU2B,iCACxB9uE,KAAKmkF,0BAA0Bp/D,eAC/B/kB,KAAKgkF,mBAAmBjV,SAAW,IAElCnsE,KAAK2G,IACFA,GAAKhL,MAAMyB,KAAK+lE,UAAUx8D,EAAIhL,QAC/BiqD,QAAQ,KACRm6B,GACFA,MAECn6B,QAAQ,KACVxoD,KAAK2b,SAAQ,GAEf,EACA05D,WAAAA,CAAYrrD,GACX,OAAO,IAAI3oB,QAASC,IACnBtB,KAAK+c,KAAK3H,KAAK+3D,GAAUI,yBAAyBvjD,IAChDpnB,KAAK2G,IACLjI,EAAQiI,MAGZ,EACAm9D,iBAAAA,CAAkBxY,GACjBluD,KAAKkkE,cAAgBhW,CACtB,EACA00B,kBAAAA,GACC,MAAM1b,EAAUlnE,KAAKkkE,cAAiB,IAAMlkE,KAAKkkE,cAAiB,GAC5DiD,EAAe7kE,SAASwP,eAAe,qBAAuBo1D,GACpE,IAAIC,EAAc,OAClB,MAAM52D,EAAO42D,EAAat4D,wBAE1B7O,KAAK+8E,mBAAmB5tE,OAASiK,OAAOguD,eAAej4D,OAASoB,EAAKZ,IAAM,GAC3E3P,KAAKS,MAAMk+E,YAAYv0B,UAAUy4B,UAAU7iF,KAAK+8E,mBAAmB5tE,OACpE,EACA,kBAAM83D,GACLjnE,KAAKokE,kBAAoB,IAAI/iE,QAAQrB,KAAKylE,oBACpCzlE,KAAKokE,wBAELpkE,KAAKqkF,iBAKXrkF,KAAK4iF,oBACN,EACA/I,kBAAkBnnB,IACTA,EAAOonB,OAGjBx1E,SAAU,CACTw+E,UAAAA,GACC,MAAMrrD,EAAO,GAgBb,OAdGz3B,KAAKskF,qCACP7sD,EAAKnxB,KAAK,CACT8iC,MAAOppC,KAAK+X,GAAGC,EAAE,sCAAuC,CAAChY,KAAK+iF,0BAC9DjL,QAAS93E,KAAK6+E,oBAIb7+E,KAAKukF,sCACP9sD,EAAKnxB,KAAK,CACT8iC,MAAOppC,KAAK+X,GAAGC,EAAE,mCAAoC,CAAChY,KAAK4nF,2BAC3D9P,QAAS93E,KAAK4kF,qBAITntD,CACR,EACAmwD,wBAAAA,GACC,MAAMjmB,EAAS,IAAIrJ,IAOnB,OALAt4D,KAAKgvD,aAAapoD,QAAQ49B,IACrBA,EAAIqgD,eAAeljB,EAAOp7D,IAAIi+B,EAAIqgD,eAClCrgD,EAAIsgD,oBAAoBnjB,EAAOp7D,IAAIi+B,EAAIsgD,sBAGrCnjB,EAAOxsC,IACf,EACA4tD,uBAAAA,GACC,MAAMphB,EAAS,IAAIrJ,IAQnB,OANAt4D,KAAKgvD,aAAapoD,QAAQ49B,IACrBA,EAAIhY,aACPm1C,EAAOp7D,IAAIi+B,EAAIhY,eAIVm1C,EAAOxsC,IACf,GAEDnnB,MAAO,CACN,2BAA2BoyD,GACQ,cAA/BA,GAAQ8N,oBAAqE,cAA/B9N,GAAQ8N,qBACxDluE,KAAK28E,aAAarb,OAASlB,EAAOjgB,aAGnCngD,KAAK28E,aAAavO,eAAiBhO,EAAOga,sBAC3C,EACA+J,yBAAAA,CAA0B/jB,EAAQuD,GAGH,OAA3B3jE,KAAKgkF,mBAAiE,OAAnChkF,KAAKmkF,2BAC1CnkF,KAAKi3E,qBAEP,EACA+M,iBAAAA,CAAkB5jB,GAGa,OAA3BpgE,KAAKgkF,mBAAiE,OAAnChkF,KAAKmkF,2BAC1CnkF,KAAKi3E,qBAEP,EACAjoB,YAAAA,CAAaoR,GACZ,MAAMvU,EAAQ7rD,KAAKS,MAAMk+E,aAAav0B,UACtC,IAAIyB,EAAO,OAEX,MAAMg8B,EAAUh8B,EAAM21B,UAEtBphB,EAAOx5D,QAAQ6iD,IACd,MAAMjlB,EAAMqjD,EAAQxjD,KAAK+C,IAExB,GADaA,EAAEtJ,UACN0vC,kBAAoB/jB,EAAS+jB,iBAAkB,OAAOpmC,IAGhE5C,EAAIu1B,SACJ,MAAM+tB,EAAKtjD,EAAIujD,aAAat1B,SAAS,IAAIA,SAAS,IAAIA,SAAS,GAC5Dq1B,IAAIA,EAAG7wB,SAAU,IAGtB,GAEDrgD,OAAAA,GACC5W,KAAK2b,SAAU,EACf3b,KAAKgkE,eAAiBhkE,KAAK+X,GAAG4E,aAAa,CAAC,aAAc,WAC1D3c,KAAKgkE,eAAephE,KAAK,KAAM5C,KAAKikE,iBAAkB,IAGtD,MAAM+jB,EAAW,CAChBhoF,KAAK+c,KAAK3H,KAAK+3D,GAAUC,aACzBptE,KAAK+c,KAAK3H,KAAK+3D,GAAU6B,oBACzBhvE,KAAK+c,KAAK3H,KAAKiuE,GAAmBC,qCAClCtjF,KAAK+c,KAAK3H,KAAK+3D,GAAUtiD,YACzB7qB,KAAK+c,KAAK3H,KAAK+3D,GAAU0B,qBAG1B7uE,KAAKqkF,iBAAmBhjF,QAAQqe,WAAWsoE,GACzCplF,KAAMs8C,IAIN,GAA0B,cAAtBA,EAAQ,GAAG71B,OAAwB,CACtC,MAAM9f,EAAM21C,EAAQ,GAAGjgD,MACvBe,KAAKg6E,cAAgBzwE,EAAIhL,MAAMy7E,cAC/Bh6E,KAAKs8E,4BAA8B/yE,EAAIhL,MAAM+9E,4BAC7Ct8E,KAAKskF,oCAAsC/6E,EAAIhL,MAAM+lF,oCACrDtkF,KAAKukF,qCAAuCh7E,EAAIhL,MAAMgmF,oCACvD,CAGA,GAA0B,cAAtBrlC,EAAQ,GAAG71B,OAAwB,CACtC,MAAM9f,EAAM21C,EAAQ,GAAGjgD,MACvBe,KAAKokF,qBAAuB76E,EAAIhL,KAC5ByB,KAAKokF,sBAAsBj+E,SAC9BnG,KAAKmkF,0BAA4BnkF,KAAK4jF,YACnCr6E,EAAIhL,KAAK8lC,KAAK4jD,GAAUA,EAAOljE,gBAAkB/kB,KAAK4jF,aACtDr6E,EAAIhL,KAAK,GAEd,CAGA,GAA0B,cAAtB2gD,EAAQ,GAAG71B,OAAwB,CACtC,MAAM9f,EAAM21C,EAAQ,GAAGjgD,MACvBe,KAAK8jF,OAASv6E,EAAIhL,KAAK,GACvB,MAAM64B,EAAM,CAAE9S,uBAAwBtkB,KAAK+X,GAAGC,EAAE,qBAChDhY,KAAK+jF,OAAS3sD,EACdp3B,KAAK6jF,uBAAyB,CAACzsD,KAAQp3B,KAAK8jF,OAC7C,CAGA,GAA0B,cAAtB5kC,EAAQ,GAAG71B,OAAwB,CACtC,MAAM9f,EAAM21C,EAAQ,GAAGjgD,MACE,YAArBsK,EAAI4wB,MAAM9Q,SACbrpB,KAAKgxE,aAAeznE,EAAIhL,KAAK,GAC7ByB,KAAKs3E,oBAAsBt3E,KAAKgxE,aAAavnE,OAC5CwnE,GAAO1nE,EAAIhL,KAAK,GAAGW,SAAS+xE,EAAIxkD,OAGjCzsB,KAAKw6E,qBAAuBx6E,KAAKgxE,aAAavnE,OAC7CwnE,GAAO1nE,EAAIhL,KAAK,GAAGW,SAAS+xE,EAAIxkD,QAIlCzsB,KAAKwkF,0BAA4B,CAChC,CAAErkC,YAAa1+C,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,oCAAqC+2D,QAAS,GAC1F,CAAE5uB,YAAa1+C,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,yBAA0B+2D,QAAS,GAC/E,CAAE5uB,YAAa1+C,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,uBAAwB+2D,SAAS,IAE9E/uE,KAAKgkF,kBAAoBhkF,KAAKwkF,0BAA0B,EACzD,CAGA,GAA0B,cAAtBtlC,EAAQ,GAAG71B,OAAwB,CACtC,MAAM9f,EAAM21C,EAAQ,GAAGjgD,MACvBe,KAAKq0E,kBAAoB9qE,EAAIhL,IAC9B,IAEAiqD,QAAQ,KACRxoD,KAAK2b,SAAU,GAElB,EACAnb,OAAAA,GACCR,KAAKinE,cACN,EACAhkE,SAAU,2uVCjrCEilF,GAAmB,CAC/B5pF,KAAM,mBACN6E,WAAY,CACX4pD,mBAEDruD,MAAO,CACNypF,gBAAiB,CAChBppF,QAAS,MAEV6b,SAAU,CACThc,KAAMY,OACNyX,UAAU,EACVlY,QAASA,KAAAA,CAAQT,KAAM,GAAIuc,IAAK,KAChC7b,UAAUC,GACFA,GAASA,EAAMX,MAAQW,EAAM4b,MAIvCtc,IAAAA,GACC,MAAO,CACN6pF,SAAU,KACVC,UAAW,KACXnkB,cAAeziE,IAAIK,IAAI,GACvBqiE,kBAAmB,KACnBC,kBAAmB,KACnBJ,eAAgB,KAChBC,iBAAiB,EACjBqkB,qBAAsB,CACrBn5E,OAAQ,IACRrI,MAAO,mBACPypD,OAAQ,aACR5jD,YAAalL,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGC,EAAE,2BAC1C8wC,QAAS,CACR,CAAC/nD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,8BAA+BwqB,MAAO,QAASioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG5U,SAAS,GACnK,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,8BAA+BwqB,MAAO,kBAAmBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,EAAG5U,SAAS,GAC7K,CAAC3vD,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,4BAA6BwqB,MAAO,kBAAmBioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAC/J,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,iCAAkCwqB,MAAO,SAAUioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GAC3J,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,UAAWioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,GACjJ,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,MAAOioB,UAAWzqD,KAAK+1E,sBAAsBzQ,UAAW,GAC5I,CAACvkE,MAAOU,IAAI6C,SAAS,IAAMtE,KAAKkxE,YAAYlxE,KAAK+X,GAAGC,EAAE,sBAAuBwqB,MAAO,WAAYioB,UAAWzqD,KAAK+1E,sBAAuBzQ,UAAW,IAEnJrW,aAAa,GAEds5B,2BAA4B,CAAC,CAC5BtjF,MAAO,aACPiJ,QAASm0B,UACRriC,KAAKmkE,sBAGN,CACCl/D,MAAO,YACPiJ,QAASm0B,MAAOnsB,EAAGimD,KAElB,GAAmC,YAAhCA,EAAKkiB,YAAYzuB,WAA0B,CAC7C,MAAM7qB,EAAMo3B,EAAKI,WAEjB,GAAgB,kBAAbx3B,EAAIp6B,KACN3K,KAAKo1E,mBAAmBjZ,EAAKI,iBACvB,GAAiB,wBAAbx3B,EAAIp6B,KAAgC,CAC9C,MAAM69E,EAAgBl1E,2BAA2BC,SAAW,6GAA6GwxB,EAAIyxC,mBAAmB,qBAAqBzxC,EAAIyoC,iBAAiB,cAAgBzoC,EAAIypC,mBAE9Pp1D,OAAO+d,KAAKqxD,EAAe,SAC5B,CAED,MAAO,GAAoC,gBAAhCrsB,EAAKkiB,YAAYzuB,WAA8B,CACzD,MAAM7qB,EAAMo3B,EAAKI,WAEP,KAAPx3B,GAAY3rB,OAAO+d,KAAK4N,EAAK,SACjC,CACA7uB,EAAEu7B,qBAKP,EACA3xC,QAAS,CACRi2E,sBAAsB5Z,GAGd,kKAFKA,EAAKI,WAG+D,aAEjFkJ,YAAAA,CAAankE,GACZtB,KAAKmkE,kBAAoB7iE,CAC1B,EACAmnF,aAAAA,GACCzoF,KAAK+c,KAAK3H,KAAK+3D,GAAUyB,eAAe5uE,KAAKmoF,iBAAoB,OAC/DvlF,KAAK2G,IACFA,GAAKhL,MAAMyB,KAAK+lE,UAAUx8D,EAAIhL,OAEpC,EACAwnE,SAAAA,CAAUxnE,GACTyB,KAAKqoF,UAAY9pF,EAEjByB,KAAKqoF,UAAUzhF,QAAQ8hF,IACtBA,EAAG9gD,SAAW8gD,EAAGC,cAAiBD,EAAGC,cAAgB,IAAM,IAAMD,EAAGE,aAAe,IAAMF,EAAGG,eAAiBH,EAAGI,eAAkB,IAAMJ,EAAGI,eAAiB,IAC5JJ,EAAGK,gBAAkBL,EAAGpa,UAAYtuE,KAAK+X,GAAGC,EAAE,oBAAsBhY,KAAK+X,GAAGC,EAAE,qBAG/EhY,KAAKS,MAAMuoF,cAAc5+B,UAAUiH,WAAWrxD,KAAKsoF,qBAAqBx/B,SACxE9oD,KAAKS,MAAMuoF,cAAc5+B,UAAUzgB,QAAQ3pC,KAAKqoF,UACjD,EACA3hB,iBAAAA,CAAkBxY,GACjBluD,KAAKkkE,cAAgBhW,CACtB,EACA00B,kBAAAA,GACC,MAAM1b,EAAUlnE,KAAKkkE,cAAiB,IAAMlkE,KAAKkkE,cAAiB,GAC5DiD,EAAe7kE,SAASwP,eAAe,qBAAuBo1D,GACpE,IAAIC,EAAc,OAClB,MAAM52D,EAAO42D,EAAat4D,wBAE1B7O,KAAKsoF,qBAAqBn5E,OAASiK,OAAOguD,eAAej4D,OAASoB,EAAKZ,IAAM,GAC7E3P,KAAKS,MAAMuoF,cAAc5+B,UAAUy4B,UAAU7iF,KAAKsoF,qBAAqBn5E,OACxE,EACA,kBAAM83D,GACLjnE,KAAKokE,kBAAoB,IAAI/iE,QAAQrB,KAAKylE,oBACpCzlE,KAAKokE,kBAEXpkE,KAAKyoF,gBACLzoF,KAAK4iF,oBACN,GAED50E,MAAO,CAAA,EAGP1J,SAAU,CAAA,EAGVsS,OAAAA,GACC5W,KAAKgkE,eAAiBhkE,KAAK+X,GAAG4E,aAAa,CAAC,aAAc,WAC1D3c,KAAKgkE,eAAephE,KAAK,KAAM5C,KAAKikE,iBAAkB,GACvD,EACAzjE,OAAAA,GACCR,KAAKinE,cACN,EACAhkE,SAAU,2YCvIX,IAAAgmF,GAAe,CACd1qF,KAAIA,KACI,CACN2qF,gBAAiB,GACjBC,wBAAyB,KACzB3iC,cAAc,GACd4iC,oBAAoB,KACpBC,eAAgB,GAChBC,uBAAwB,KACxB5+D,SAAS,GACT6+D,iBAAiB,KACjBjjC,oBAAqB,GACrBkjC,0BAA2B,KAC3B/xD,KAAK,OAGPjgB,OAAAA,GACC,MAAO,CACNiyE,oBAAsBhoF,IAAI6C,SAAS,IAAKtE,KAAKopF,qBAC7C/kC,wBAAyB5iD,IAAI6C,SAAS,IAAMtE,KAAKmpF,yBACjDO,iBAAkBjoF,IAAI6C,SAAS,IAAMtE,KAAKupF,kBAC1CI,uBAAwBloF,IAAI6C,SAAS,IAAMtE,KAAKspF,wBAGlD,EACAnmF,WAAY,CACX2gD,iBAED91C,MAAM,CACLm7E,wBAAyB,SAAS/oB,EAAQuD,GACzC,GAAGvD,GAAUA,GAAUuD,EAAO,CAC7B,MAAMpkD,EAAiBvf,KAAK4pF,wBAAwB,kBAChDxpB,KAAY7gD,GAAoBA,GAAmBA,GAAmB6gD,IACzEpgE,KAAK6pF,wBAAwB,iBAAkBzpB,EAEjD,CACD,EACAmpB,iBAAkB,SAAUnpB,EAAQuD,GACnC,GAAIvD,GAAUA,GAAUuD,EAAQ,CAC/B,MAAMj5C,EAAW1qB,KAAK4pF,wBAAwB,cACzCl/D,GAAaA,GAAYA,GAAY01C,IACzCpgE,KAAK6pF,wBAAwB,WAAYzpB,EAE3C,CACD,EACAgpB,oBAAqB,SAAUhpB,EAAQuD,GACtC,GAAIvD,GAAUA,GAAUuD,EAAQ,CAC/B,MAAMrtC,EAAct2B,KAAK4pF,wBAAwB,iBAC5CtzD,GAAgBA,GAAeA,GAAe8pC,IAClDpgE,KAAK6pF,wBAAwB,cAAexuE,KAAK6f,UAAUklC,GAE7D,CACD,EACAkpB,uBAAwB,SAAUlpB,EAAQuD,GACzC,GAAIvD,GAAUA,GAAUuD,EAAQ,CAC/B,MAAMmmB,EAAiB9pF,KAAK4pF,wBAAwB,oBAC/CE,GAAmBA,GAAkBA,GAAkB1pB,IAC3DpgE,KAAK6pF,wBAAwB,iBAAkBxuE,KAAK6f,UAAUklC,GAEhE,CACD,GAEDtgE,QAAQ,CACPiqF,qBAAAA,CAAsB9qF,GACrB,IAAIsgB,EAAkBvf,KAAKS,MAAM8e,gBACjCA,EAAgB8nC,eAAiB9nC,EAAgB8nC,cAAgBpoD,EAAQsgB,EAAgBze,QAAQqF,QAAUoZ,EAAgBze,QAAQqF,OACnInG,KAAKgqF,8BAA8BzqE,EAAgBtgB,MACpD,EACAgrF,iBAAAA,CAAkBhrF,GACjB,IAAIq3B,EAAct2B,KAAKS,MAAM+lD,cAC7BlwB,EAAY+wB,eAAiB/wB,EAAY+wB,cAAgBpoD,EAAQq3B,EAAYx1B,QAAQqF,QAAUmwB,EAAYx1B,QAAQqF,OACnHnG,KAAKkqF,0BAA0B5zD,EAAYr3B,MAC5C,EACAkrF,cAAAA,CAAelrF,GACd,IAAIyrB,EAAW1qB,KAAKS,MAAMiqB,SAC1BA,EAAS28B,eAAiB38B,EAAS28B,cAAgBpoD,EAAQyrB,EAAS5pB,QAAQqF,QAAUukB,EAAS5pB,QAAQqF,OACvGnG,KAAKoqF,uBAAuB1/D,EAASzrB,MACtC,EACAorF,oBAAAA,CAAqBprF,GACpB,IAAI6qF,EAAiB9pF,KAAKS,MAAMqpF,eAC5BQ,GAAkBR,EAAeziC,cAAgBpoD,EAAQ6qF,EAAehpF,QAAQqF,QAAU2jF,EAAehpF,QAAQqF,OAClH2jF,EAAehpF,QAAQwpF,GAAgB31B,WACzC21B,GAAkBA,EAAiBrrF,EAAQ6qF,EAAehpF,QAAQqF,QAAU2jF,EAAehpF,QAAQqF,QAEpG2jF,EAAeziC,cAAgBijC,EAC/BtqF,KAAKuqF,0BAA0BT,EAAe7qF,MAC/C,EAEA4qF,uBAAAA,CAAwB3vE,EAAIjb,GAC3B+mC,aAAaC,QAAQ/rB,EAAKjb,EAC3B,EACA2qF,wBAAwB1vE,GACT8rB,aAAaI,QAAQlsB,GAGpC8vE,6BAAAA,CAA8B1lE,GAC7BtkB,KAAKkd,QAAQwc,QAAQtD,QAAQC,sBAAsB/R,EAAwBtkB,KAAKopF,oBAAqBppF,KAAKupF,iBAAkBvpF,KAAKspF,wBAC/H1mF,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACLvJ,KAAKwqF,sBAAsBjhF,IAE9B,EACA2gF,yBAAAA,CAA0BnlE,GACzB/kB,KAAKkd,QAAQwc,QAAQtD,QAAQC,sBAAsBr2B,KAAKmpF,wBAAyBpkE,EAAgB/kB,KAAKupF,iBAAkBvpF,KAAKspF,wBAC3H1mF,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACLvJ,KAAKwqF,sBAAsBjhF,IAE9B,EACA6gF,sBAAAA,CAAuB1/D,GACtB1qB,KAAKkd,QAAQwc,QAAQtD,QAAQC,sBAAsBr2B,KAAKmpF,wBAAyBnpF,KAAKopF,oBAAqB1+D,EAAU1qB,KAAKspF,wBACxH1mF,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACLvJ,KAAKwqF,sBAAsBjhF,IAE9B,EACAghF,yBAAAA,CAA0BE,GACzBzqF,KAAKkd,QAAQwc,QAAQtD,QAAQC,sBAAsBr2B,KAAKmpF,wBAAyBnpF,KAAKopF,oBAAqBppF,KAAKupF,iBAAkBkB,GAChI7nF,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACLvJ,KAAKwqF,sBAAsBjhF,IAE9B,EACAmhF,gBAAAA,CAAiBC,GAChB3qF,KAAKwpF,0BAA4BmB,EAEjC3qF,KAAKwpF,0BAA0B5qF,KAAM,cACrCoB,KAAKwpF,0BAA0B3lE,eAAiB7jB,KAAKwpF,0BAA0Bj9D,qBAC5EvsB,KAAKwpF,2BACP/nF,IAAIokD,SAAS,KACZ7lD,KAAKS,MAAMqlD,aAAa3lD,QAI3B,EACAyqF,mBAAAA,CAAoB1B,GACnB,IAAItd,EAAQ,IAAI1kC,OAAO,sBACvBgiD,EAAgB9hF,KAAK,CAACyjF,EAAKC,KAC1B,IAAKC,EAAWC,EAAcC,GAAYJ,EAAKvmE,uBAAuB0gB,MAAM4mC,IACvEsf,EAAWC,EAAcC,GAAYN,EAAKxmE,uBAAuB0gB,MAAM4mC,GAC5E,OAAGqf,GAAYG,EACPJ,EAAeG,GAAc,EAAG,EAEjCF,EAAWG,GAAU,EAAG,GAEjC,EACAC,OAAAA,CAAQtmD,GAEP6gB,SAASuK,KAAOprB,CACjB,EACAylD,qBAAAA,CAAsBjhF,GACrB,IAAI2/E,gBAAEA,EAAe5yD,YAAEA,EAAW5L,SAAEA,EAAQ6L,YAAEA,EAAW+vB,oBAAEA,GAAwB/8C,EACnFvJ,KAAK4qF,oBAAoB1B,EAAgB9xD,KACzCp3B,KAAKkpF,gBAAkBA,EAAgB9xD,IACvCp3B,KAAKmpF,wBAA0BD,EAAgBoC,YAAYhnE,uBAE3DtkB,KAAKwmD,cAAgBlwB,EAAYc,IACjCp3B,KAAKopF,oBAAsB9yD,EAAYg1D,aAAavmE,eAEpD/kB,KAAK0qB,SAAWA,EAAS0M,IACzBp3B,KAAKupF,iBAAmB7+D,GAAU4gE,YAElCtrF,KAAKqpF,eAAiB9yD,EAAYa,IAClCp3B,KAAKspF,uBAAyB/yD,EAAY+0D,aAAab,eAEvDzqF,KAAKsmD,oBAAsBA,EAC3BtmD,KAAKsmD,oBAAoBl/C,KAAK,CAACmkF,EAAKC,IAC/BD,EAAIprC,YAAYtf,cAAgB2qD,EAAIrrC,YAAYtf,cAC5C,EACG0qD,EAAIprC,YAAYtf,cAAgB2qD,EAAIrrC,YAAYtf,eACnD,EAEA,GAIT7gC,KAAKsmD,oBAAoB1/C,QAAS+jF,IACjCA,EAAkBrkC,oBAAoBl/C,KAAK,CAACmkF,EAAIC,IAC3CD,EAAIprC,YAAYtf,cAAgB2qD,EAAIrrC,YAAYtf,cAC5C,EACG0qD,EAAIprC,YAAYtf,cAAgB2qD,EAAIrrC,YAAYtf,eACnD,EAEA,IAIX,EACA4qD,oBAAoB3B,GACfA,EACG,GAAGA,GAAgB3pC,eAAe2pC,GAAgBxoC,oBAAoBwoC,GAAgB4B,wBAAwB5B,GAAgB71D,YAD1G,GAG5B03D,iBAAiBr1D,GACXA,EACE,GAAGA,GAAawgD,eAAexgD,GAAa6pB,eAD1B,GAG1ByrC,oBAAAA,CAAqBrsE,GACpB,IAAKA,EAAiB,MAAO,GAC7B,IAAIssE,EAAwB,IAAI3kD,OAAO,sBACnClC,EAAQzlB,EAAgBylB,MAAM6mD,GAClC,OAAO7mD,EAAM,IACZ,IAAK,KACJ,MAAO,kBAAkBA,EAAM,KAChC,IAAK,KACJ,MAAO,kBAAkBA,EAAM,KAChC,QACC,MAAO,GAAGzlB,IAEb,GAGDjb,SAAS,CACRwnF,8BAAAA,GACC,MAAMx1D,EAAct2B,KAAKwmD,cAAcniB,KAAM/N,GAAgBA,EAAYvR,gBAAkB/kB,KAAKopF,qBAChG,MAAO,GAAGppF,KAAKwpF,2BAA2BrpC,eAAengD,KAAKwpF,2BAA2BuC,qBAAqBz1D,EAAYwgD,cAAc92E,KAAKupF,oBAAoBvpF,KAAKwpF,2BAA2BloC,mBAAmBthD,KAAKmpF,0BAC1N,EACA6C,sBAAAA,GACC,OAAIhsF,KAAKqpF,eACF7pF,OAAOi7B,OAAOz6B,KAAKqpF,gBAAgBxjF,OAAO,CAAComF,EAAO/nF,KACpD+nF,EAAM/nF,EAAKi8C,eACd8rC,EAAM/nF,EAAKi8C,aAAe,IAE3B8rC,EAAM/nF,EAAKi8C,aAAa75C,KAAKpC,GACtB+nF,GACN,CAAA,GAP8B,IAQjC,EACAC,kCAAAA,GACC,IAAKlsF,KAAKgsF,uBAAwB,OAAO,KACzC,IAAI/pF,EAAS,GAeb,OAdAzC,OAAOs7B,QAAQ96B,KAAKgsF,wBAAwBplF,QAAQ,EAAEsT,EAAIjb,MACzDgD,EAAOqE,KAAK,CACX65C,YAAa,mBAAmBjmC,IAChCy6C,UAAU,IAEX11D,EAAM2H,QAAS2vB,IACdt0B,EAAOqE,KAAK,CACXiwB,YAAYA,EACZ41D,SAAS,EACThsC,YAAa,GAAG5pB,GAAa4pB,eAAe5pB,GAAa+qB,oBAAoB/qB,GAAam1D,wBAAwBn1D,GAAatC,kBAK3HhyB,CACR,GAGD2U,OAAAA,GAEC,MAAM2I,EAAkBvf,KAAK4pF,wBAAwB,wBAAqB1oF,EACpEo1B,EAAcjb,KAAKC,MAAMtb,KAAK4pF,wBAAwB,sBAAmB1oF,EACzEwpB,EAAW1qB,KAAK4pF,wBAAwB,kBAAe1oF,EACvD4oF,EAAiBzuE,KAAKC,MAAMtb,KAAK4pF,wBAAwB,yBAAsB1oF,EAIrFlB,KAAKkd,QAAQwc,QAAQtD,QAAQC,sBAAsB9W,EAAiB+W,EAAa5L,EAAUo/D,GAC1FlnF,KAAKrE,GAAQA,EAAKA,MAClBqE,KAAK2G,IACLvJ,KAAKwqF,sBAAsBjhF,IAG7B,EACAtG,SAAU,4uLCzQXmpF,GAAe,CAEdC,cAAaA,KACL,CACN7xE,OAAQ,MACRC,IAAK,+CACL5G,OAAQ,CAAA,KCUXy4E,GAAe,CACd7qC,KAAIA,CAACjoB,EAAKtlB,KACF,CACNsG,OAAQ,OACRC,IAAK,kCACL5G,OAAQ,CACP2lB,IAAKA,EACLtlB,KAAMA,MCAV,MAAMq4E,GAASj5E,2BAA2BC,SAASoP,QAAQ,4BAA6B,IAAMrP,2BAA2BE,UAEnHg5E,GAASC,UAAUC,aAAa,CACrCC,QAASF,UAAUG,iBAAiB,IAAIL,MACxCM,OAAQ,CACP,CACC34E,KAAM,eACN5V,KAAM,UACNoW,UAAWu0E,GACXvqF,OAAO,GAER,CACCwV,KAAM,wBACN5V,KAAM,aACNoW,UAAWstD,GACXtjE,OAAO,GAER,CACCwV,KAAM,cACN5V,KAAM,SACNoW,UAAWstD,GACXtjE,OAAO,GAER,CACCwV,KAAM,6CACN5V,KAAM,oBACNoW,UAAWu/D,GACXv1E,OAAO,GAER,CACCwV,KAAM,8BACN5V,KAAM,wBACNoW,UAAWynE,GACXz9E,OAAO,GAER,CACCwV,KAAM,0CACN5V,KAAM,sBACNoW,UAAW8uE,GACX9kF,OAAO,GAER,CACCwV,KAAM,8CACN5V,KAAM,mBACNoW,UAAWwzE,GACXxpF,OAAO,GAER,CACCwV,KAAM,iBACN5V,KAAM,YACNoW,UAAWmvD,GACXnlE,OAAO,GAGR,CACCwV,KAAM,6CACN5V,KAAM,qBACNoW,UAAWw4D,GACX4f,SAAWllC,IACH,CACNtpD,KAAM,kBACNuV,OAAQ,CACPyP,WAAYskC,EAAG/zC,OAAOyP,WACtB3Y,KAAMsiE,GACNptB,YAAY,IAAIpkC,MAAOgrD,cAAc3hC,MAAM,KAAK,OAKpD,CACC5wB,KAAM,+DACN5V,KAAM,kBACNoW,UAAWw4D,GACXxuE,MAAQquF,IACP,MAGMpiF,EAAOoiF,EAAMl5E,OAAOlJ,MAHP,CAAC,QAAS,OAAQ,OAI1BzL,SAAS6tF,EAAMl5E,OAAOlJ,KAAKqiF,OAAO,GAAGjsD,cAAgBgsD,EAAMl5E,OAAOlJ,KAAK2rC,MAAM,GAAGzV,eACxFksD,EAAMl5E,OAAOlJ,KAAKqiF,OAAO,GAAGjsD,cAAgBgsD,EAAMl5E,OAAOlJ,KAAK2rC,MAAM,GAAGzV,cACvEosC,GAGG5vB,EAAI,IAAI5hC,KAAKsxE,EAAMl5E,OAAOgsC,YAKhC,MAAO,CACNF,cAAe,CACdh1C,OACAk1C,WAPkBC,MAAMzC,IAA+B,IAAI5hC,MAAOgrD,cAAc3hC,MAAM,KAAK,GAA9DioD,EAAMl5E,OAAOgsC,WAQ1Cv8B,WAAYypE,EAAMl5E,OAAOyP,cAI5B2pE,YAAaA,CAACrlC,EAAI71C,EAAM81C,KAElBD,EAAG/zC,OAAOlJ,MAASi9C,EAAG/zC,OAAOgsC,WAUjCgI,IATAA,EAAK,CACJvpD,KAAM,kBACNuV,OAAQ,CACPlJ,KAAMi9C,EAAG/zC,OAAOlJ,MAAQsiE,GACxBptB,WAAY+H,EAAG/zC,OAAOgsC,aAAc,IAAIpkC,MAAOgrD,cAAc3hC,MAAM,KAAK,GACxExhB,WAAYypE,MAAMl5E,OAAOyP,gBAQ9B,CACCpP,KAAM,kCACN5V,KAAM,UACNoW,UAAW63D,GACX7tE,OAAO,GAER,CACCwV,KAAM,mBACN5V,KAAM,OACNoW,UAAW+0D,GACX/qE,OAAO,GAER,CACCwV,KAAM,8BACN5V,KAAM,OACNoW,UAAWiyC,GACXjoD,OAAO,GAER,CACCwV,KAAM,yDACN5V,KAAM,SACNoW,UAAWw6B,GACXxwC,OAAO,GAGR,CAECwV,KAAM,2BACN5V,KAAM,YACNoW,UAAWgrC,GACXotC,QAAAA,CAASllC,GACR,MAAMmlC,EAAQtrF,IAAIyhD,MAAMspC,GAAOU,eACzBviF,KAAEA,EAAIk1C,WAAEA,GAAektC,EAAMl5E,OACnC,MAAO,CACNvV,KAAM,SACNuV,OAAQ,CACPlJ,OACAk1C,aACA57B,MAAO2jC,EAAG/zC,OAAOoQ,OAGpB,GAED,CACC/P,KAAM,0CACN5V,KAAM,SACNoW,UAAWgrC,GACXhhD,MAAMquF,IACE,CACNptC,cAAeotC,EAAMl5E,UAIxB,CACCK,KAAM,oCACN5V,KAAM,WACNoW,UAAW8rC,GACX9hD,MAAMquF,IACE,CACNptC,cAAeotC,EAAMl5E,UAIxB,CACCK,KAAM,QACN5V,KAAM,OACNoW,UAAWgG,EACXhc,MAAO,CAACic,UAAW,QAEpB,CACCzG,KAAM,IACN5V,KAAM,eACNoW,UAAWgG,EACXhc,MAAO,CAACic,UAAW,QAEpB,CACCzG,KAAM,mBACN5V,KAAM,WACNoW,UAAWgG,EACXhc,MAAO,CAACic,UAAW,OACnBmyE,SAAUA,KACF,CACNxuF,KAAM,OACNuV,OAAQ,CACP8G,UAAW,aAQX6e,GAAM/3B,IAAIC,UAAU,CACzBpD,KAAM,SACNC,KAAMA,KAAAA,CACL4uF,mBAAoB,CAAA,EACpBC,UAAW,OAEZjqF,WAAY,CAAA,EACZmB,SAAU,CACT+oF,SAAQA,IACaj0E,OAAOk0E,WAAW,sBAAsB10C,SAK9DphC,OAAAA,GACC,MAAO,CACNiG,SAAUhc,IAAI6C,SAAS,IAAMtE,KAAK+X,GAAGmsB,eACrCkpD,UAAW3rF,IAAI6C,SAAS,IAAMtE,KAAKotF,WACnCC,SAAUrtF,KAAKqtF,SAEjB,EACAvtF,QAAS,CACRytF,eAAAA,CAAgBxnD,GACf,MAAMynD,EAAep0E,OAAOwsC,SAAS6nC,OACrC,OAAO1nD,EAAK2nD,WAAWF,EACxB,EACApQ,WAAAA,CAAYn4E,GACX,MAAMR,EAASQ,EAAMR,OAAOI,QAAQ,KAEpC,GAAiB,YAAdJ,GAAQmI,IACPnI,GAAUzE,KAAKutF,gBAAgB9oF,EAAOshC,MAAO,CAChD,MAEM7xB,EAFM,IAAIy5E,IAAIlpF,EAAOshC,MAEV6nD,SACX16D,EAAOlzB,KAAKugD,QAAQz/C,QAAQ6rF,QAAQz5D,KACpC65D,EAAQ74E,EAAKyO,QAAQuQ,EAAM,KAAO,IAGlC3pB,EAAMvJ,KAAKugD,QAAQj/C,QAAQyrF,GACjC,IAAIxjF,GAAKskF,SAAS1nF,QAAuB,aAAboD,EAAIjL,KAAqB,OAIrD,GAFA2G,EAAME,iBAEHnF,KAAKqtF,SAAU,CACD/qF,SAASwP,eAAe,YAE7BpD,UAAU6D,SAAS,SAC7BjQ,SAASwP,eAAe,gBAAgBywD,OAE1C,CAEAviE,KAAKugD,QAAQj6C,KAAKymF,EAEnB,CACD,GAED,aAAMn2E,SAEC5W,KAAK+c,KACT3H,KAAKg3E,GAAaC,iBAClBzpF,KAAK2G,GAAOA,EAAIhL,MAChBqE,KAAKrE,IACL,IAAK,IAAIuvF,KAActuF,OAAO6M,KAAK9N,GAAO,CACzC,IAAIwvF,EAAa,KACbC,EAAe,KACfC,EAAgB,KAQpB,GAPI1vF,EAAKuvF,GAAYC,aACpBA,EAAatsF,IAAIm8C,QAAQn8C,IAAIysF,qBAAqB,IAAMr3E,OAAOtY,EAAKuvF,GAAYC,eAC7ExvF,EAAKuvF,GAAYE,eACpBA,EAAevsF,IAAIm8C,QAAQn8C,IAAIysF,qBAAqB,IAAMr3E,OAAOtY,EAAKuvF,GAAYE,iBAC/EzvF,EAAKuvF,GAAYG,gBACpBA,EAAgBxsF,IAAIm8C,QAAQn8C,IAAIysF,qBAAqB,IAAMr3E,OAAOtY,EAAKuvF,GAAYG,kBAEhF1vF,EAAKuvF,GAAYK,oBAAoB,CACxC,IAAIC,EAAO9rF,SAAS8rF,KACpB,IAAIA,EAAK98E,cAAc,cAAc/S,EAAKuvF,GAAYK,yBAAyB,CAC9E,IAAIptC,EAAOz+C,SAASC,cAAc,QAClCw+C,EAAKniD,KAAO,WACZmiD,EAAKstC,IAAM,aACXttC,EAAKhb,KAAOxnC,EAAKuvF,GAAYK,oBAC7BC,EAAKprF,YAAY+9C,EAClB,CACD,CAEsB,OAAnB/gD,KAAKotF,YACPptF,KAAKotF,UAAY,CAAA,GAEbptF,KAAKotF,UAAUU,KACnB9tF,KAAKotF,UAAUU,GAAc,CAAA,GAE9B9tF,KAAKotF,UAAUU,GAAYC,WAAaA,EACxC/tF,KAAKotF,UAAUU,GAAYE,aAAeA,EAC1ChuF,KAAKotF,UAAUU,GAAYG,cAAgBA,CAC5C,GAEH,EACAztF,OAAAA,GACC8B,SAASiX,iBAAiB,QAASvZ,KAAKo9E,YAEzC,EACAp7E,aAAAA,GACCM,SAAS8nC,oBAAoB,QAASpqC,KAAKo9E,YAC5C,KCxTM,WACN,MAAMkR,EAAa,SAASC,KAAKC,UAAUC,WACrCC,EAAY,UAAUH,KAAKC,UAAUC,WAE3C,GAAIH,EAAY,CACf,MAAMh/E,EAtBR,WACC,MAAM+sD,EAAM/5D,SAASC,cAAc,OAEnC85D,EAAI3sD,MAAMghC,SAAW,WACrB2rB,EAAI3sD,MAAMC,IAAM,UAChB0sD,EAAI3sD,MAAMJ,MAAQ,QAClB+sD,EAAI3sD,MAAMP,OAAS,QACnBktD,EAAI3sD,MAAMi/E,SAAW,SAErBrsF,SAASzB,KAAKmC,YAAYq5D,GAC1B,MAAMuyB,EAAiBvyB,EAAIxxB,YAAcwxB,EAAI3rD,YAG7C,OAFApO,SAASzB,KAAKwB,YAAYg6D,GAEnBuyB,CACR,CAQgBC,GAAsB,KACpCvsF,SAASzB,KAAK6O,MAAM23D,YAAY,oBAAqB/3D,EACtD,MAAWo/E,GACVpsF,SAASzB,KAAK6O,MAAM23D,YAAY,oBAAqB,MAEvD,CDkTAynB,GACAt1D,GAAI/2B,OAAOg3B,iBAAiBy3C,YE/UrB,SAAoB6d,GAC1B,OAAKA,EACEA,EAAO,GAAGhuD,cAAgBguD,EAAOz4C,MAAM,GAD1B,EAErB,EF8UA04C,QAAQxC,OAAOyC,eAAezC,IAC9BwC,QAAQC,eAAez1D,IAEvBA,GAAIh3B,IAAIgqF,IACRhzD,GAAIh3B,IAAIpB,SAASqB,OAAO1D,QAAS,CAChC2D,OAAQ,CACPC,QAAS,IACT+tD,QAAS,OAGXl3B,GAAI01D,UAAU,UAAW9tF,SAASsvD,SAClCl3B,GAAIh3B,IAAI2iC,IACR3L,GAAIh3B,IAAI0jC,IACR1M,GAAI01D,UAAU,WAAYtoD,IAC1BpN,GAAIz2B,MAAM,eAEVypF,GAAO2C,UAAU,CAACvnC,EAAI71C,EAAMq9E,KAC3B51D,GAAI/2B,OAAOg3B,iBAAiB1c,KAAK3H,KAAKk3E,GAAa7qC,KAAK,OAAQmG,EAAGynC"} \ No newline at end of file +{"version":3,"file":"Fhc.js","sources":["../../../../js/components/Bootstrap/Modal.js","../../../../js/components/Bootstrap/Alert.js","../../../../js/components/Bootstrap/Confirm.js","../../../../js/components/Drop/Grid/Item.js","../../../../js/composables/GridLogic.js","../../../../js/components/Drop/Grid.js","../../../../js/composables/Dashboard/CachedWidgetLoader.js","../../../../js/components/Dashboard/Item.js","../../../../js/components/Tranistion/HeightTransition.js","../../../../js/components/Dashboard/Widget/WidgetIcon.js","../../../../js/components/Dashboard/Section.js","../../../../js/components/Dashboard/Widget/Picker.js","../../../../js/helpers/ObjectUtils.js","../../../../js/api/factory/cis/dashboard.js","../../../../js/components/Dashboard/Dashboard.js","../../../../js/api/search.js","../../../../js/api/phrasen.js","../../../../js/api/navigation.js","../../../../js/api/filter.js","../../../../js/api/studstatus.js","../../../../js/api/profil.js","../../../../js/api/profilUpdate.js","../../../../js/api/lvPlan.js","../../../../js/api/stv.js","../../../../js/api/stv/verband.js","../../../../js/api/stv/students.js","../../../../js/api/stv/filter.js","../../../../js/api/stv/konto.js","../../../../js/api/stv/group.js","../../../../js/api/stv/kontakt.js","../../../../js/api/stv/prestudent.js","../../../../js/api/stv/status.js","../../../../js/api/stv/details.js","../../../../js/api/stv/exam.js","../../../../js/api/stv/abschlusspruefung.js","../../../../js/api/stv/grades.js","../../../../js/api/stv/mobility.js","../../../../js/api/stv/archiv.js","../../../../js/api/stv/documents.js","../../../../js/api/stv/exemptions.js","../../../../js/api/stv/jointstudies.js","../../../../js/api/stv/courselist.js","../../../../js/api/notiz/person.js","../../../../js/api/notiz/prestudent.js","../../../../js/api/notiz/mitarbeiter.js","../../../../js/api/notiz/projekt.js","../../../../js/api/notiz.js","../../../../js/api/notiz/anrechnung.js","../../../../js/api/notiz/bestellung.js","../../../../js/api/notiz/lehreinheit.js","../../../../js/api/notiz/projektphase.js","../../../../js/api/notiz/projekttask.js","../../../../js/api/betriebsmittel.js","../../../../js/api/betriebsmittel/person.js","../../../../js/api/checkperson.js","../../../../js/api/ort.js","../../../../js/api/cms.js","../../../../js/api/lehre.js","../../../../js/api/addons.js","../../../../js/api/messages.js","../../../../js/api/messages/person.js","../../../../js/api/vorlagen.js","../../../../js/api/studium.js","../../../../js/api/fhcapifactory.js","../../../../js/api/dashboard.js","../../../../js/api/bookmark.js","../../../../js/api/ampeln.js","../../../../js/api/studiengang.js","../../../../js/api/menu.js","../../../../js/api/authinfo.js","../../../../js/api/vertraege.js","../../../../js/api/vertraege/person.js","../../../../js/api/language.js","../../../../js/plugin/OldFhcApi.js","../../../../js/RESTClient.js","../../../../js/plugins/FhcAlert.js","../../../../js/plugins/Api.js","../../../../js/api/factory/phrasen.js","../../../../js/plugins/Phrasen.js","../../../../js/plugins/Theme.js","../../../../js/directives/contrast.js","../../../../js/helpers/DragAndDrop.js","../../../../js/directives/Calendar/DragAndDrop.js","../../../../js/components/Calendar/Base/DragAndDrop.js","../../../../js/components/Calendar/Base/Header.js","../../../../js/components/Calendar/Base/Header/Datepicker.js","../../../../js/components/Calendar/Base/Slider.js","../../../../js/directives/Calendar/Click.js","../../../../js/components/Calendar/Base.js","../../../../js/api/factory/lvPlan.js","../../../../js/components/Calendar/Base/Grid/Line/Event.js","../../../../js/components/Calendar/Base/Grid.js","../../../../js/components/Calendar/Base/Grid/Line.js","../../../../js/components/Calendar/Base/Grid/Line/Background.js","../../../../js/components/Calendar/Base/Label/Day.js","../../../../js/components/Calendar/Base/Label/Dow.js","../../../../js/components/Calendar/Base/Label/Time.js","../../../../js/components/Calendar/Mode/Day/View.js","../../../../js/components/Calendar/Mode/Day.js","../../../../js/composables/Responsive.js","../../../../js/components/Calendar/Mode/Week.js","../../../../js/components/Calendar/Mode/Week/View.js","../../../../js/components/Calendar/Mode/Month.js","../../../../js/components/Calendar/Mode/Month/View.js","../../../../js/components/Calendar/Base/Label/Week.js","../../../../js/components/Calendar/LvPlan.js","../../../../js/composables/EventLoader.js","../../../../js/api/factory/authinfo.js","../../../../js/components/Cis/LvPlan/Lehrveranstaltung.js","../../../../js/components/Cis/LvPlan/Personal.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Pruefungen.js","../../../../js/api/factory/lehre.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv/Info.js","../../../../js/mixins/Phrasen.js","../../../../js/components/Cis/Mylv/LvMenu.js","../../../../js/api/factory/addons.js","../../../../js/components/Cis/Mylv/LvUebersicht.js","../../../../js/components/Cis/Mylv/Semester.js","../../../../js/components/Cis/Mylv/Semester/Studiengang.js","../../../../js/components/Cis/Mylv/Semester/Studiengang/Lv.js","../../../../js/components/Cis/Mylv/Student.js","../../../../js/components/Fetch.js","../../../../js/components/filter/Filter/Config.js","../../../../js/components/filter/Filter/Columns.js","../../../../js/components/filter/Table/Download.js","../../../../js/directives/collapseAutoClose.js","../../../../js/tabulator/layouts/fitDataStretchFrozen.js","../../../../js/api/factory/filter.js","../../../../js/components/filter/Filter.js","../../../../js/components/Cis/Profil/ProfilComponents/Mailverteiler.js","../../../../js/components/Cis/Profil/ProfilComponents/FhAusweisStatus.js","../../../../js/components/Cis/Profil/ProfilComponents/QuickLinks.js","../../../../js/components/Cis/Profil/ProfilComponents/Adresse.js","../../../../js/components/Cis/Profil/ProfilComponents/Kontakt.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilEmails.js","../../../../js/components/Cis/Profil/ProfilComponents/RoleInformation.js","../../../../js/api/factory/profil.js","../../../../js/components/Form/Upload/Dms.js","../../../../js/components/Form/Upload/Dms/Item.js","../../../../js/api/factory/profilUpdate.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/ImageUpload.js","../../../../js/components/Cis/Profil/ProfilComponents/ProfilInformation.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilSelect.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditKontakt.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/EditAdresse.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/Status.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfilComponents/TextInputDokument.js","../../../../js/components/Loader.js","../../../../js/components/Cis/Profil/ProfilModal/EditProfil.js","../../../../js/components/Cis/Profil/ProfilComponents/FetchProfilUpdates.js","../../../../js/tabulator/filters/Dates.js","../../../../js/components/Cis/Profil/StudentProfil.js","../../../../js/components/Cis/Profil/MitarbeiterProfil.js","../../../../js/components/Cis/Profil/StudentViewProfil.js","../../../../js/components/Cis/Profil/MitarbeiterViewProfil.js","../../../../js/components/Cis/Profil/Profil.js","../../../../js/api/factory/ort.js","../../../../js/components/Cis/Raumsuche/Raumsuche.js","../../../../js/components/Pagination/Pagination.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangPerson.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangVertretung.js","../../../../js/api/factory/studiengang.js","../../../../js/components/Cis/Cms/StudiengangInformation/StudiengangInformation.js","../../../../js/api/factory/cms.js","../../../../js/components/Cis/Cms/News.js","../../../../js/components/Cis/Cms/Content_types/Raum_contentmittitel.js","../../../../js/helpers/LegacyLinkReplaceHelper.js","../../../../js/components/Cis/Cms/Content_types/General.js","../../../../js/components/Cis/Cms/Content.js","../../../../js/components/Cis/Cms/Content_types/News_content.js","../../../../js/components/Cis/Cms/Content_types/Iframe_content.js","../../../../js/components/Cis/Mylv/RoomInformation.js","../../../../js/api/factory/abgabe.js","../../../../js/components/Overlay/FhcOverlay.js","../../../../js/components/Cis/Abgabetool/AbgabeStudentDetail.js","../../../../js/components/Cis/Abgabetool/getDateStyleClass.js","../../../../js/components/Cis/Abgabetool/AbgabetoolStudent.js","../../../../js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js","../../../../js/helpers/EmailHelpers.js","../../../../js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js","../../../../js/components/Bootstrap/Offcanvas.js","../../../../js/api/factory/studiensemester.js","../../../../js/components/Cis/Abgabetool/StatusLegende.js","../../../../js/components/Cis/Abgabetool/AbgabetoolAssistenz.js","../../../../js/components/Cis/Abgabetool/DeadlineOverview.js","../../../../js/components/Cis/Studium/Studium.js","../../../../js/api/factory/renderers.js","../../../../js/api/factory/routeinfo.js","../../../../js/apps/Dashboard/Fhc.js","../../../../js/helpers/CssVarCalcHelpers.js","../../../../js/helpers/StringHelpers.js"],"sourcesContent":["//import Phrasen from '../../plugin/Phrasen.js';\n\nexport default {\n\tname: 'BootstrapModal',\n\tdata: () => ({\n\t\tmodal: null,\n\t\tfullscreen: false\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean,String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tfocus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\tdialogClass: [String,Array,Object],\n\t\theaderClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'px-4 py-5'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tallowFullscreenExpand: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\temits: [\n\t\t\"hideBsModal\",\n\t\t\"hiddenBsModal\",\n\t\t\"hidePreventedBsModal\",\n\t\t\"showBsModal\",\n\t\t\"shownBsModal\",\n\t\t\"toggleFullscreen\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.modal.dispose();\n\t\t},\n\t\thandleUpdate() {\n\t\t\treturn this.modal.handleUpdate();\n\t\t},\n\t\thide() {\n\t\t\treturn this.modal.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.modal.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.modal.toggle();\n\t\t},\n\t\ttoggleFullscreen() {\n\t\t\tthis.fullscreen = !this.fullscreen\n\t\t\tthis.$emit('toggleFullscreen')\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.modal)\n\t\t\tthis.modal = new bootstrap.Modal(this.$refs.modal, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tfocus: this.focus,\n\t\t\t\tkeyboard: this.keyboard\n\t\t\t});\n\t},\n\tpopup(body, options, title, footer) {\n\t\tconst BsModal = this,\n\t\t\tslots = {};\n\t\tif (body !== undefined)\n\t\t\tslots.default = () => body;\n\t\tif (title !== undefined)\n\t\t\tslots.title = () => title;\n\t\tif (footer !== undefined)\n\t\t\tslots.footer = () => footer;\n\n\t\t// little hack to check whether primevue is included in the app or not\n\t\tlet includedPrimevue = false;\n\t\tif(typeof primevue !== 'undefined'){\n\t\t\tincludedPrimevue = true;\n\t\t}\n\n\t\treturn new Promise((resolve,reject) => {\n\t\t\tconst instance = Vue.createApp({\n\t\t\t\tname: 'ModalTmpApp',\n\t\t\t\tsetup() {\n\t\t\t\t\treturn () => Vue.h(BsModal, {...{\n\t\t\t\t\t\tclass: 'fade'\n\t\t\t\t\t},...options, ...{\n\t\t\t\t\t\tref: 'modal',\n\t\t\t\t\t\t'onHidden.bs.modal': instance.unmount\n\t\t\t\t\t}}, slots);\n\t\t\t\t},\n\t\t\t\tmounted() {\n\t\t\t\t\tthis.$refs.modal.show();\n\t\t\t\t\t\n\t\t\t\t},\n\t\t\t\tbeforeUnmount() {\n\t\t\t\t\tif (this.$refs.modal)\n\t\t\t\t\t\tthis.$refs.modal.result !== false ? resolve(this.$refs.modal.result) : reject();\n\t\t\t\t},\n\t\t\t\tunmounted() {\n\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst wrapper = document.createElement(\"div\");\n\t\t\t\n\t\t\t// if(primevue) --> won't work because primevue is not defined in this scope and promise would be rejected\n\t\t\tif (includedPrimevue){\n\t\t\t\tinstance.use(primevue.config.default, {zIndex: {overlay: 9999}})\n\t\t\t}\n\t\t\t\t \n\t\t\t//instance.use(Phrasen); // TODO(chris): find a more dynamic way\n\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\tinstance.mount(wrapper);\n\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t});\n\t\t});\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n}\n","import BsModal from './Modal.js';\n\nexport default {\n\tname: 'BootstrapAlert',\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tdialogClass: {\n\t\t\ttype: [String,Array,Object],\n\t\t\tdefault: 'modal-dialog-centered'\n\t\t},\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(msg, options) {\n\t\treturn BsModal.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","import BsAlert from './Alert.js';\n\nexport default {\n\tname: 'BootstrapConfirm',\n\tmixins: [\n\t\tBsAlert\n\t],\n\tdata: () => ({\n\t\tresult: false\n\t}),\n\tpopup(msg, options) {\n\t\treturn BsAlert.popup.bind(this)(msg, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","export default {\n\tname:'GridItem',\n\tcomponents: {\n\t},\n\tinject: {\n\t},\n\tprops: {\n\t\titem: Object,\n\t\tactive: Boolean\n\t},\n\temits: [\n\t\t\"mouseDown\",\n\t\t\"mouseUp\",\n\t\t\"startMove\",\n\t\t\"startResize\",\n\t\t\"dragging\",\n\t\t\"endDrag\",\n\t\t\"dropDrag\",\n\t\t\"item\",\n\t\t\"touchStart\",\n\t\t\"touchEnd\",\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragAction: '',\n\t\t\tdragging: false\n\t\t}\n\t},\n\tcomputed: {\n\t},\n\tmethods: {\n\t\tregisterDragAction(evt) {\n\t\t\tthis.$emit('mouseDown', evt);\n\t\t\tif (evt.target.hasAttribute('drag-action')) {\n\t\t\t\tthis.dragAction = evt.target.getAttribute('drag-action');\n\t\t\t} else {\n\t\t\t\tlet parent = evt.target.closest('[drag-action]');\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.dragAction = parent.getAttribute('drag-action');\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragAction = '';\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttryDragStart(evt, item) {\n\t\t\tlet dragAction = this.dragAction || evt.target.getAttribute('drag-action');\n\t\t\tif (dragAction) {\n\t\t\t\tthis.dragging = true;\n\t\t\t\tif (dragAction == 'move')\n\t\t\t\t\treturn this.$emit('startMove', evt, item);\n\t\t\t\telse if (dragAction == 'resize')\n\t\t\t\t\treturn this.$emit('startResize', evt, item);\n\t\t\t}\n\t\t\t//evt.preventDefault();\n\t\t},\n\t\ttouchDragEnd(evt) {\n\t\t\tif (!this.dragging)\n\t\t\t\treturn;\n\t\t\tthis.dragging = false;\n\t\t\tthis.$emit('touchEnd', evt);\n\t\t},\n\t\ttouchStart(event){\n\t\t\tthis.$emit('touchStart', event); \n\t\t\tthis.registerDragAction(event); \n\t\t\tthis.tryDragStart(event, this.item);\n\t\t},\n\t\ttouchMove(event){\n\t\t\tif(this.dragging){\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.$emit('dragging', event);\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t
    `\n}\n","// TODO(chris): Comments\n\nconst DIR_UP = 0;\nconst DIR_LEFT = 1;\nconst DIR_RIGHT = 2;\nconst DIR_DOWN = 3;\n\nclass GridLogic {\n\tconstructor(w) {\n\t\tif (w.w) {\n\t\t\tthis.w = w.w;\n\t\t\tthis.h = w.h;\n\t\t\tthis.data = [...w.data];\n\t\t\tthis.grid = [...w.grid];\n\t\t} else {\n\t\t\tthis.w = w;\n\t\t\tthis.h = 1;\n\t\t\tthis.data = [];\n\t\t\tthis.grid = [];\n\t\t}\n\t}\n\tisFreeSlot(x, y) {\n\t\tconst i = y*this.w + x;\n\t\treturn !this.grid[i] && this.grid[i] !== 0;\n\t}\n\tgetMaxY(){\n\t\treturn this.data.reduce((acc, item) => { \n\t\t\tif (item?.y > acc) {\n\t\t\t\t acc = item.y; \n\t\t\t} \n\t\t\treturn acc; \n\t\t}, 0);\n\t}\n\tgetFreeSlots() {\n\t\tconst freeSlots = [];\n\t\tlet biggestY = this.getMaxY();\n\t\tlet totalSpaces = this.w * (biggestY+1);\n\t\tfor(let i=0; i < totalSpaces; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tthis.grid[i] = undefined;\n\t\t\t}\n\t\t}\n\t\tfor(let i =0; i < this.grid.length; i++){\n\t\t\tif (!this.grid[i] && this.grid[i] !== 0){\n\t\t\t\tlet x = i % this.w;\n\t\t\t\tlet y = Math.floor(i / this.w);\n\t\t\t\tfreeSlots.push({x, y});\n\t\t\t}\n\t\t}\n\t\treturn freeSlots;\n\t}\n\tadd(item, prefer) {\n\t\tlet occupiers = this.getItemsInFrame(item.frame);\n\t\tif (!occupiers.length) {\n\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\tthis.data[item.index] = item;\n\t\t\tthis.h = Math.max(this.h, item.y + item.h);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tconst intermGrid = new GridLogic(this);\n\t\t\t\n\t\t\titem.frame.forEach(f => intermGrid.grid[f] = -1);\n\n\t\t\tconst possiblities = intermGrid.tryMoving(occupiers, prefer);\n\t\t\tif (possiblities.length) {\n\t\t\t\tconst bestOption = possiblities.sort((a,b) => {\n\t\t\t\t\tif (a.cost === undefined)\n\t\t\t\t\t\ta.cost = a.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\tif (b.cost === undefined)\n\t\t\t\t\t\tb.cost = b.moves.reduce((a, v) => a * v.cost, 1);\n\t\t\t\t\treturn a.cost > b.cost;\n\t\t\t\t});\n\t\t\t\tconst result = [];\n\t\t\t\tbestOption[0].moves.forEach(move => {\n\t\t\t\t\tconst currItem = {...this.data[move.index]};\n\t\t\t\t\tcurrItem.x += move.x;\n\t\t\t\t\tcurrItem.y += move.y;\n\t\t\t\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\t\t\tthis.h = Math.max(this.h, currItem.y + currItem.h);\n\t\t\t\t\tthis.remove(currItem);\n\t\t\t\t\tcurrItem.frame.forEach(f => this.grid[f] = currItem.index);\n\t\t\t\t\tthis.data[move.index] = currItem;\n\t\t\t\t\tresult[move.index] = {\n\t\t\t\t\t\tindex: currItem.index,\n\t\t\t\t\t\tx: currItem.x,\n\t\t\t\t\t\ty: currItem.y\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\titem.frame.forEach(f => this.grid[f] = item.index);\n\t\t\t\tthis.data[item.index] = item;\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tconsole.error('FATAL', \"can't arrange item on grid\");\n\t\t\t}\n\t\t}\n\t}\n\tmove(item, x, y) {\n\t\tif (item.data.place[this.w]?.pinned)\n\t\t\treturn [];\n\t\tif (item.x == x && item.y == y)\n\t\t\treturn [];\n\t\t\n\t\tthis.remove(item);\n\n\t\tlet prefer = undefined;\n\t\tif (item.x == x) {\n\t\t\tif (y-item.y > 0)\n\t\t\t\tprefer = DIR_UP;\n\t\t\telse\n\t\t\t\tprefer = DIR_DOWN;\n\t\t} else if (item.y == y) {\n\t\t\tif (x-item.x > 0)\n\t\t\t\tprefer = DIR_LEFT;\n\t\t\telse\n\t\t\t\tprefer = DIR_RIGHT;\n\t\t}\n\n\t\tconst originalFrame = Array.isArray(item.frame) ? [...item.frame] : [item.frame];\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.x = x;\n\t\tcurrItem.y = y;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\tlet occupiers = this.getItemsInFrame(currItem.frame);\n\t\t\n\t\t// does not update if the target conatins pinned widgets\n\t\tif (occupiers.some(frame => this.data[frame]?.data.place[this.w]?.pinned)) {\n\t\t\treturn [];\n\t\t}\n\t\t\n\t\t// checks if target contains widget with the same high and width\n\t\tlet occupiersData = occupiers.map(occupier => this.data[occupier]);\n\t\tlet occupiersFrame = occupiersData.map(occupier => occupier.frame).flat();\n\t\tif (!occupiersFrame.some(frame => !currItem.frame.includes(frame)) && !occupiersFrame.some(frame => originalFrame.includes(frame))){\n\t\t\tlet replaceUpdate = [];\n\t\t\tlet newOccupierFrames = [];\n\t\t\tfor(let f of originalFrame){\n\t\t\t\tif(newOccupierFrames.includes(f)){\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet occ = occupiersData.shift();\n\t\t\t\tif(occ){\n\t\t\t\t\tnewOccupierFrames = [...newOccupierFrames, ...this.getItemFrame({ ...occ, ...this.getSingleFramePosition(f) })];\n\t\t\t\t\treplaceUpdate[occ.index] = { index: occ.index, ...this.getSingleFramePosition(f)}\n\t\t\t\t}\n\t\t\t}\n\t\t\treplaceUpdate[item.index] = { index: item.index, x, y };\n\t\t\t\n\t\t\treturn replaceUpdate;\n\t\t}\n\t\t\n\t\tconst updates = this.add(currItem, prefer);\n\t\tupdates[item.index] = {index: item.index, x, y};\n\t\treturn updates;\n\t}\n\tresize(item, w, h) {\n\t\tif (item.w == w && item.h == h)\n\t\t\treturn [];\n\t\tthis.remove(item);\n\n\t\tconst currItem = {...item};\n\t\tcurrItem.w = w;\n\t\tcurrItem.h = h;\n\t\tcurrItem.frame = this.getItemFrame(currItem);\n\t\t\n\t\tconst updates = this.add(currItem);\n\t\tif(updates)\n\t\t\tupdates[item.index] = {index: item.index, w, h, x:item.x, y:item.y, resize:true};\n\n\t\treturn updates;\n\t}\n\ttryMoving(index, prefer) {\n\t\tif (Array.isArray(index)) {\n\t\t\tindex.forEach(i => this.remove({index:i}));\n\t\t\tlet possiblities = [{grid: this, moves: []}];\n\t\t\tindex.forEach(i => {\n\t\t\t\tlet newPoss = [];\n\t\t\t\tpossiblities.forEach(possiblity => {\n\t\t\t\t\tpossiblity.grid.tryMoving(i, prefer).forEach(p => {\n\t\t\t\t\t\tpossiblity.moves\n\t\t\t\t\t\tp.moves = [...p.moves, ...possiblity.moves];\n\t\t\t\t\t\tnewPoss.push(p)\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tpossiblities = newPoss;\n\t\t\t});\n\t\t\treturn possiblities;\n\t\t}\n\t\tconst directions = [DIR_UP, DIR_DOWN, DIR_LEFT, DIR_RIGHT];\n\n\t\tthis.remove({index});\n\n\t\tconst weight = 1 + .2*(this.data[index].weight || 0);\n\n\t\treturn directions.reduce((result, dir) => {\n\t\t\tlet res = this.tryMovingInDirection(dir, index, 1, (prefer === dir ? .5 : 1 + dir*.1) * weight);\n\t\t\tif (!res)\n\t\t\t\treturn result;\n\t\t\treturn [...result, ...res];\n\t\t}, []).filter(p => p);\n\t}\n\ttryMovingInDirection(dir, index, amount, cost) {\n\t\tconst move = {index, x:0, y: 0, cost: cost};\n\t\tlet targetframe;\n\t\tswitch(dir) {\n\t\t\tcase DIR_UP:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].y - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-this.w*amount);\n\t\t\t\tmove.y = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_DOWN:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned)\n\t\t\t\t\treturn false;\n\t\t\t\tif (this.data[index].y + this.data[index].h + amount > this.h)\n\t\t\t\t\tcost += .4;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+this.w*amount);\n\t\t\t\tmove.y = amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_LEFT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x - amount < 0)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i-amount);\n\t\t\t\tmove.x = -amount;\n\t\t\t\tbreak;\n\t\t\tcase DIR_RIGHT:\n\t\t\t\tif (this.data[index].data?.place[this.w]?.pinned || this.data[index].x + this.data[index].w + amount > this.w)\n\t\t\t\t\treturn false;\n\t\t\t\ttargetframe = this.data[index].frame.map(i => i+amount);\n\t\t\t\tmove.x = amount;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tconst occupiers = this.getItemsInFrame(targetframe);\n\t\tif (occupiers.includes(-1)) {\n\t\t\treturn this.tryMovingInDirection(dir, index, amount+1, cost);\n\t\t}\n\t\t\n\t\tconst intermGrid = new GridLogic(this);\n\t\ttargetframe.forEach(f => intermGrid.grid[f] = -1);\n\t\t\n\t\tif (!occupiers.length) {\n\t\t\treturn [{grid: intermGrid, moves: [move]}];\n\t\t}\n\t\tconst possiblities = intermGrid.tryMoving(occupiers).map(possiblity => possiblity.moves.unshift(move) && possiblity);\n\t\treturn possiblities.length ? possiblities : false;\n\t}\n\tclearWeights() {\n\t\tthis.data.forEach(item => item.weight = undefined);\n\t}\n\tgetItemsInFrame(frame) {\n\t\treturn frame.map(i => this.grid[i]).filter((v,i,a) => (v || v === 0) && a.indexOf(v) === i);\n\t}\n\tremove(item) {\n\t\tthis.grid = this.grid.map(i => i != item.index ? i : undefined);\n\t}\n\tgetItemFrame(item) {\n\t\tconst frame = [];\n\t\tfor (let i = 0; i < item.w; i++)\n\t\t\tfor (let j = 0; j < item.h; j++)\n\t\t\t\tframe.push(i + item.x + (j + item.y) * this.w);\n\t\treturn frame;\n\t}\n\tgetSingleFramePosition(frame){\n\t\treturn { x: frame % this.w, y: Math.floor(frame / this.w)};\n\t}\n\tdebug() {\n\t\treturn this.grid;\n\t}\n}\n\nexport default GridLogic;","// TODO(chris): Comments\n\nimport GridItem from './Grid/Item.js';\nimport GridLogic from '../../composables/GridLogic.js';\n\nconst MODE_IDLE = 0;\nconst MODE_MOVE = 1;\nconst MODE_RESIZE = 2;\nconst MODE_MOUSE_DOWN = 3;\n\nexport default {\n\tname: 'Grid',\n\tcomponents: {\n\t\tGridItem,\n\t},\n\tprops: {\n\t\tcols: Number,\n\t\titems: Array,\n\t\titemsSetup: Object,\n\t\tresizeLimit: Function,\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tmarginForExtraRow: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0\n\t\t},\n\t\tadditionalRow:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t}\n\t},\n\temits: [\n\t\t\"rearrangeItems\",\n\t\t\"newItem\",\n\t\t\"gridHeight\",\n\t\t\"draggedItem\",\n\t\t\"update:additionalRow\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tx: -1,\n\t\t\ty: -1,\n\t\t\tclientX:0,\n\t\t\tclientY: 0,\n\t\t\tmode: MODE_IDLE,\n\t\t\tgrid: null,\n\t\t\tdragGrid: null,\n\t\t\tpermUpdates: [],\n\t\t\tpositionUpdates: null,\n\t\t\tfixedPositionUpdates: null,\n\t\t\tdraggedOffset: [0,0],\n\t\t\tdraggedItem: null,\n\t\t\tdraggedNode: null,\n\t\t\treorderedItems:[],\n\t\t\tclonedWidget:null,\n\t\t}\n\t},\n\tinject:{\n\t\tsectionName: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\tadditionalRowComputed: {\n\t\t\tget() {\n\t\t\t\treturn this.additionalRow;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.$emit('update:additionalRow', value);\n\t\t\t}\n\t\t},\n\t\titems_hashmap() {\n\t\t\tlet items = {};\n\t\t\tthis.items.forEach(item => {\n\t\t\t\tif (this.reorderedItems.length > 0 && this.needsReordering(item)){\n\t\t\t\t\t\tlet rearrangedPosition = this.reorderedItems.filter(widget => widget.data.widgetid == item.widgetid)?.pop();\n\t\t\t\t\t\tif (rearrangedPosition) {\t\t\t\n\t\t\t\t\t\t\titem.x = rearrangedPosition.x;\n\t\t\t\t\t\t\titem.y = rearrangedPosition.y;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titems[`x${item.x}y${item.y}`] = item;\n\t\t\t});\t\n\t\t\treturn items\n\t\t},\n\t\titems_placeholders(){\n\t\t\tlet placeholders = [];\n\t\t\tlet col_max = this.cols;\n\t\t\tlet rows_max = this.rows;\n\n\t\t\t// occupied hashmap to keep track of the occupied cells\n\t\t\tlet occupied = {};\n\n\t\t\tfor (let y = 0; y < rows_max; y++) {\n\t\t\t\tfor (let x = 0; x < col_max; x++) {\n\t\t\t\t\t// skip current position if it was registered as occupied\n\t\t\t\t\tif (Object.keys(occupied).length && occupied[`x${x}y${y}`]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tlet current_item = this.items_hashmap[`x${x}y${y}`];\n\t\t\t\t\tif (current_item) {\n\t\t\t\t\t\t//calculate the occupied cells from the width and the height from the items \n\t\t\t\t\t\tlet width = current_item.w;\n\t\t\t\t\t\tlet height = current_item.h;\n\t\t\t\t\t\tlet max_x = x + width - 1;\n\t\t\t\t\t\tlet max_y = y + height - 1;\n\t\t\t\t\t\tif(x != max_x || y != max_y){\n\t\t\t\t\t\t\tfor (let occupied_y = y; occupied_y <= max_y; occupied_y++) {\n\t\t\t\t\t\t\t\tfor (let occupied_x = x; occupied_x <= max_x; occupied_x++) {\n\t\t\t\t\t\t\t\t\tif (occupied_x != x || occupied_y != y) {\n\t\t\t\t\t\t\t\t\t\toccupied[`x${occupied_x}y${occupied_y}`]=true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tplaceholders.push({ x: x, y: y, w: 1, h: 1, placeholder: true, \n\t\t\t\t\t\t\tdata: { id: 'placeholder_' + String(placeholders.length).padStart(4, \"0\") } });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn placeholders;\n\t\t},\n\t\tplacedItems_withPlaceholders() {\n\t\t\treturn [...this.placedItems, ...this.items_placeholders];\n\t\t},\n\t\trows() {\n\t\t\tif (this.additionalRowComputed) {\n\t\t\t\t\treturn this.grid ? (this.grid.h+1) : 1;\n\t\t\t}\n\t\t\treturn this.grid ? this.grid.h : 1;\n\t\t\t\n\t\t},\n\t\tgridStyle() {\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\treturn {\n\t\t\t\t'--fhc-dg-row-height': 100/(this.rows + addH) + '%',\n\t\t\t\t'--fhc-dg-col-width': 100/this.cols + '%',\n\t\t\t\t'--fhc-dg-item-padding-horizontal': '0.25%',\n\t\t\t\t'--fhc-dg-item-padding-top': '0.5%',\n\t\t\t\t'padding-bottom': 100 * (this.rows + addH)/this.cols + '%'\n\t\t\t}\n\t\t},\n\t\tindexedItems() {\n\t\t\treturn this.items.map(\n\t\t\t\t(item, index) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tx: item.x,\n\t\t\t\t\t\ty: item.y,\n\t\t\t\t\t\tw: item.w,\n\t\t\t\t\t\th: item.h,\n\t\t\t\t\t\tweight: item.weight || 0,\n\t\t\t\t\t\tdata: item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tprePlacedItems() {\n\t\t\tif (!this.fixedPositionUpdates)\n\t\t\t\treturn this.indexedItems;\n\t\t\treturn this.indexedItems.map(item => {\n\t\t\t\tif (!this.fixedPositionUpdates[item.index])\n\t\t\t\t\treturn item;\n\t\t\t\treturn {\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.fixedPositionUpdates[item.index].x === undefined ? item.x : this.fixedPositionUpdates[item.index].x,\n\t\t\t\t\ty: this.fixedPositionUpdates[item.index].y === undefined ? item.y : this.fixedPositionUpdates[item.index].y,\n\t\t\t\t\tw: this.fixedPositionUpdates[item.index].w === undefined ? item.w : this.fixedPositionUpdates[item.index].w,\n\t\t\t\t\th: this.fixedPositionUpdates[item.index].h === undefined ? item.h : this.fixedPositionUpdates[item.index].h\n\t\t\t\t};\n\t\t\t});\n\t\t},\n\t\tplacedItems() {\n\t\t\tif (!this.positionUpdates)\n\t\t\t\treturn this.prePlacedItems;\n\t\t\tlet mappedPlacedItems= this.prePlacedItems.map(item => {\n\t\t\t\tif (!this.positionUpdates[item.index] )\n\t\t\t\t\treturn item;\n\t\t\t\tlet height_diff = this.positionUpdates[item.index]?.h - item.h;\n\t\t\t\tlet width_diff = this.positionUpdates[item.index]?.w - item.w;\n\t\t\t\treturn {\n\t\t\t\t\tresize: this.positionUpdates[item.index]?.resize,\n\t\t\t\t\tindex: item.index,\n\t\t\t\t\tweight: item.weight,\n\t\t\t\t\tdata: item.data,\n\t\t\t\t\tx: this.positionUpdates[item.index].x === undefined ? item.x : this.positionUpdates[item.index].x,\n\t\t\t\t\ty: this.positionUpdates[item.index].y === undefined ? item.y : this.positionUpdates[item.index].y,\n\t\t\t\t\tw: width_diff>0?item.w:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\th: height_diff > 0 ?item.h:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h\n\t\t\t\t\t\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tlet temporaryResizeItems = [];\n\t\t\tmappedPlacedItems.forEach(item=>{\n\t\t\t\tif(item.resize){\n\t\t\t\t\tlet newItem = {\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tw:this.positionUpdates[item.index].w === undefined ? item.w : this.positionUpdates[item.index].w,\n\t\t\t\t\t\th:this.positionUpdates[item.index].h === undefined ? item.h : this.positionUpdates[item.index].h,\n\t\t\t\t\t\tresizeOverlay:true,\n\t\t\t\t\t\tblank:true,\n\t\t\t\t\t};\n\t\t\t\t\ttemporaryResizeItems.push(newItem)\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn [...mappedPlacedItems, ...temporaryResizeItems];\n\t\t},\n\t\tshowEmptyTileHover() {\n\t\t\tif (!this.active || !this.grid || this.mode != MODE_IDLE || this.x < 0 || this.y < 0 || this.x >= this.cols || this.y >= this.rows)\n\t\t\t\treturn false;\n\t\t\treturn this.grid.isFreeSlot(this.x, this.y);\n\t\t},\n\t\twidgetSetup(){\n\t\t\tif (!this.widgetsSetup)\n\t\t\t\treturn;\n\t\t\treturn this.widgetsSetup.reduce((acc, ele) => { \n\t\t\t\tacc[ele.widget_id] =ele;\n\t\t\t\treturn acc;\n\t\t\t} ,{});\n\t\t},\n\t},\n\twatch: {\n\t\tactive(active) {\n\t\t\tif (!active)\n\t\t\t\tthis.dragCancel();\n\t\t},\n\t\tcols() {\n\t\t\tthis.dragCancel();\n\t\t},\n\t rows: {\n\t\t\thandler(value) {\n\t\t\t\tthis.$emit('gridHeight', value);\n\t\t\t},\n\t\t\timmediate: true\n\t\t},\n\t\tindexedItems: {\n\t\t\thandler(value) {\n\t\t\t\tthis.dragCancel();\n\n\t\t\t\tconst updated = this.createNewGrid(value);\n\n\t\t\t\tthis.fixedPositionUpdates = updated;\n\t\t\t\tif (updated.length)\n\t\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\t\t\t},\n\t\t\timmediate: true,\n\t\t\tdeep: true\n\t\t}\n\t},\n\tmethods: {\n\t\tneedsReordering(item){\n\t\t\tif (!item?.data?.place[this.cols]){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\ttoggleDraggedItemOverlay(condition){\n\t\t\tif(!this.draggedNode)\n\t\t\t\treturn;\n\t\t\tif(condition){\n\t\t\t\tthis.draggedNode.firstElementChild.classList.add(\"dashboard-item-overlay\");\n\t\t\t}else{\n\t\t\t\tthis.draggedNode.firstElementChild.classList.remove(\"dashboard-item-overlay\");\n\t\t\t}\n\t\t},\n\t\tdragging(event){\n\t\t\tif(this.mode == MODE_MOVE){\n\t\t\t\tthis.toggleDraggedItemOverlay(true);\n\t\t\t\t\n\t\t\t\tconst containerRect = this.$refs.container.getBoundingClientRect();\n\t\t\t\tconst clonedWidgetRect = this.clonedWidget.getBoundingClientRect();\n\t\t\t\t\n\t\t\t\tlet desiredTop = this.clientY - 20;\n\t\t\t\tlet desiredLeft = this.clientX - 15;\n\t\t\t\t\n\t\t\t\tconst minTop = 0;\n\t\t\t\tconst maxTop = containerRect.height - clonedWidgetRect.height;\n\t\t\t\tconst minLeft = 0;\n\t\t\t\tconst maxLeft = containerRect.width - clonedWidgetRect.width;\n\t\t\t\t\n\t\t\t\tconst constrainedTop = Math.max(minTop, Math.min(maxTop, desiredTop));\n\t\t\t\tconst constrainedLeft = Math.max(minLeft, Math.min(maxLeft, desiredLeft));\n\t\t\t\t\n\t\t\t\tthis.clonedWidget.style.top = `${constrainedTop}px`;\n\t\t\t\tthis.clonedWidget.style.left = `${constrainedLeft}px`;\n\t\t\t}\n\t\t},\n\t\tcreateNewGrid(items) {\n\t\t\tthis.grid = new GridLogic(this.cols);\n\t\t\tconst result = [];\n\t\t\tlet sortedItems = [...items].sort((a, b) => {\n\t\t\t\tif(this.needsReordering(a) && this.needsReordering(b)){\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(a)){\n\t\t\t\t\treturn 999;\n\t\t\t\t}\n\t\t\t\telse if(this.needsReordering(b)){\n\t\t\t\t\treturn -999;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn a.weight > b.weight;\n\t\t\t}); \n\t\t\tlet reorderedItems = [];\n\t\t\tsortedItems.forEach(item => {\n\t\t\t\tlet freeSlots = this.grid.getFreeSlots();\n\t\t\t\t\n\t\t\t\tif(this.needsReordering(item)){\n\t\t\t\t\tlet firstFreeSlot = freeSlots.shift();\n\t\t\t\t\tif (!firstFreeSlot) {\n\t\t\t\t\t\titem.x = 0;\n\t\t\t\t\t\titem.y = this.grid.h;\n\t\t\t\t\t}else{\n\t\t\t\t\t\titem.x = firstFreeSlot.x;\n\t\t\t\t\t\titem.y = firstFreeSlot.y;\n\t\t\t\t\t}\n\t\t\t\t\treorderedItems.push(item);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tif (item.x + item.w > this.cols) {\n\t\t\t\t\tlet targetW = this.cols-item.x,\n\t\t\t\t\t\ttargetX = undefined;\n\t\t\t\t\tif (this.resizeLimit) {\n\t\t\t\t\t\t[targetW] = this.resizeLimit(item.data, targetW, item.h);\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW < 1)\n\t\t\t\t\t\ttargetW = 1;\n\t\t\t\t\tif (targetW > this.cols)\n\t\t\t\t\t\ttargetW = this.cols;\n\t\t\t\t\tif (item.x + targetW > this.cols) {\n\t\t\t\t\t\ttargetX = this.cols - targetW;\n\t\t\t\t\t}\n\t\t\t\t\tif (targetW == item.w)\n\t\t\t\t\t\ttargetW = undefined;\n\t\t\t\t\tresult[item.index] = {\n\t\t\t\t\t\titem: item.data,\n\t\t\t\t\t\tx: targetX,\n\t\t\t\t\t\tw: targetW\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\titem.frame = this.grid.getItemFrame(item);\n\t\t\t\tthis.convertGridResultToUpdate(this.grid.add(item), result, items);\n\t\t\t});\n\t\t\tthis.reorderedItems = reorderedItems;\n\t\t\tthis.grid.clearWeights();\n\t\t\treturn result;\n\t\t},\n\t\tconvertGridResultToUpdate(input, output, baseArray) {\n\t\t\t\n\t\t\tif (!input)\n\t\t\t\treturn;\n\t\t\tif (!baseArray)\n\t\t\t\tbaseArray = this.indexedItems;\n\t\t\tinput.forEach(item => {\n\t\t\t\tlet result = {\n\t\t\t\t\titem: baseArray[item.index].data\n\t\t\t\t};\n\t\t\t\tif (item.x !== undefined)\n\t\t\t\t\tresult.x = item.x;\n\t\t\t\tif (item.y !== undefined)\n\t\t\t\t\tresult.y = item.y;\n\t\t\t\tif (item.w !== undefined)\n\t\t\t\t\tresult.w = item.w;\n\t\t\t\tif (item.h !== undefined)\n\t\t\t\t\tresult.h = item.h;\n\t\t\t\toutput[item.index] = result;\n\t\t\t});\n\t\t},\n\t\tmouseLeave() {\n\t\t\t/* if (this.mode == MODE_IDLE) {\n\t\t\t\tthis.x = -1;\n\t\t\t\tthis.y = -1;\n\t\t\t\t\n\t\t\t} */\n\t\t},\n\t\tupdateCursor(evt) {\n\t\t\tif (!this.active) {\n\t\t\t\tthis.x = this.y = -1;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst addH = this.active ? this.marginForExtraRow : 0;\n\t\t\tconst rect = this.$refs.container.getBoundingClientRect();\n\t\t\t\n\t\t\tif (!evt.clientX && !evt.clientY && evt.touches){\n\t\t\t\tevt.clientX = evt.touches[0].clientX;\n\t\t\t\tevt.clientY = evt.touches[0].clientY;\n\t\t\t}\n\n\t\t\tthis.clientX = (evt.clientX - rect.left);\n\t\t\tthis.clientY = (evt.clientY - rect.top);\n\t\t\tconst gridX = Math.floor(this.cols * (evt.clientX - rect.left) / this.$refs.container.clientWidth);\n\t\t\tconst gridY = Math.floor((this.rows + addH) * (evt.clientY - rect.top) / this.$refs.container.clientHeight);\n\t\t\t\n\t\t\tif (this.x == gridX && this.y == gridY)\n\t\t\t\treturn false;\n\t\t\t\n\t\t\tthis.x = gridX;\n\t\t\tthis.y = gridY;\n\n\t\t\treturn true;\n\t\t},\n\t\t_dragStart(evt, item) {\n\t\t\tif (evt.dataTransfer) {\n\t\t\t\tevt.dataTransfer.setDragImage(evt.target, -99999, -99999);\n\t\t\t\tevt.dataTransfer.dropEffect = 'move';\n\t\t\t\tevt.dataTransfer.effectAllowed = 'move';\n\t\t\t}\n\t\t},\n\t\tstartMove(evt, item) {\n\t\t\t\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tthis.mode = MODE_MOVE;\n\t\t\t\n\t\t\tthis.draggedItem = item;\n\t\t\t\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\t// workaround for chrome fireing event dragend when styles are manipulated during dragging\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.draggedNode = evt.target.closest(\".drop-grid-item\");\n\t\t\t\t//clones the widget for the drag Image\n\t\t\t\t\n\t\t\t\tlet clone = evt.target.closest(\".drop-grid-item\")?.cloneNode(true);\n\n\t\t\t\tclone.style.zIndex = 5;\n\t\t\t\tclone.classList.add(\"widgetClone\");\n\t\t\t\tthis.$refs.container.appendChild(clone);\n\t\t\t\tconst hiddenWidget = clone.querySelector(\"[style='display: none;']\");\n\t\t\t\thiddenWidget.style.removeProperty(\"display\");\n\t\t\t\tthis.clonedWidget = clone;\n\t\t\t}, 0);\n\n\t\t\tthis.draggedOffset = [item.x - this.x, item.y - this.y];\n\t\t\tthis._dragStart(evt, item);\n\t\t},\n\t\tstartResize(evt, item) {\n\t\t\tif (!this.active)\n\t\t\t\treturn;\n\t\t\tthis.mode = MODE_RESIZE;\n\t\t\tthis.draggedItem = item;\n\t\t\tthis.$emit('draggedItem', item);\n\t\t\tthis._dragStart(evt);\n\t\t},\n\t\tdragOver(evt) {\n\t\t\tif ((this.y + 1) > this.rows && (this.mode == MODE_MOVE || this.mode == MODE_RESIZE)) {\n\t\t\t\tthis.dragCancel();\n\t\t\t\t\n\t\t\t}\n\t\t\tif (!this.active)\n\t\t\t\treturn this.dragCancel();\n\t\t\tthis.checkPinnedWidgetAnimation();\n\t\t\tif(this.mode == MODE_RESIZE){\n\t\t\t\tthis.checkWidgetSizeLimitAnimation();\n\t\t\t}\n\t\t\tif (this.updateCursor(evt)) {\n\t\t\t\tswitch(this.mode) {\n\t\t\t\t\tcase MODE_MOVE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet x = this.x + this.draggedOffset[0];\n\t\t\t\t\t\tlet y = this.y + this.draggedOffset[1];\n\t\t\t\t\t\tif (x < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += x;\n\t\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\t} else if (x + this.draggedItem.w > this.cols) {\n\t\t\t\t\t\t\tthis.draggedOffset[0] += this.cols - this.draggedItem.w - x;\n\t\t\t\t\t\t\tx = this.cols - this.draggedItem.w;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y < 0) {\n\t\t\t\t\t\t\tthis.draggedOffset[1] += y;\n\t\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.positionUpdates= this.dragGrid.move(this.draggedItem, x, y);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MODE_RESIZE: {\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tthis.dragGrid = new GridLogic(this.grid);\n\t\t\t\t\t\tlet w = Math.min(this.cols - this.draggedItem.x, Math.max(1, this.x - this.draggedItem.x + 1));\n\t\t\t\t\t\tlet h = Math.max(1, this.y - this.draggedItem.y + 1);\n\t\t\t\t\t\tif (this.resizeLimit)\n\t\t\t\t\t\t\t[w, h] = this.resizeLimit(this.draggedItem.data, w, h);\n\t\t\t\t\t\tthis.positionUpdates = this.dragGrid.resize(this.draggedItem, w, h);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdragCancel() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tthis.positionUpdates = null;\n\t\t\tthis.draggedOffset = [0,0],\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.$emit('draggedItem',null);\n\t\t\tthis.draggedNode = null;\n\t\t\t\n\t\t},\n\t\tdragEnd() {\n\t\t\tthis.removeWidgetClones();\n\t\t\tthis.toggleDraggedItemOverlay(false);\n\t\t\t\n\t\t\tif (this.mode == MODE_IDLE){\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// clean up unused classes\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\t\t\t\n\t\t\t//if (!this.active || this.x < 0 || this.y < 0 || this.x >= this.cols)\n\t\t\t\t//return this.dragCancel();\n\n\t\t\tthis.mode = MODE_IDLE;\n\t\t\tlet updated = [];\n\t\t\tthis.convertGridResultToUpdate(this.positionUpdates, updated);\n\t\t\tupdated = this._updateFixedPositions(updated);\n\t\t\tif (updated.length)\n\t\t\t\tthis.$emit('rearrangeItems', updated.filter(v => v));\n\n\t\t\tthis.draggedItem = null;\n\t\t\tthis.draggedNode = null;\n\t\t\tthis.$emit('draggedItem', null);\n\t\t},\n\t\t_updateFixedPositions(updated) {\n\t\t\tupdated.forEach((item, index) => {\n\t\t\t\tif (!this.fixedPositionUpdates[index])\n\t\t\t\t\tthis.fixedPositionUpdates[index] = item;\n\t\t\t\telse\n\t\t\t\t\tthis.fixedPositionUpdates[index] = {...this.fixedPositionUpdates[index], ...item};\n\t\t\t});\n\t\t\tlet additionalUpdates = this.createNewGrid(this.prePlacedItems);\n\t\t\tif (additionalUpdates.length) {\n\t\t\t\t// NOTE(chris): this should never happen but it's here for safety\n\t\t\t\tadditionalUpdates.forEach((item, index) => updated[index] = item);\n\t\t\t\treturn this._updateFixedPositions(updated);\n\t\t\t}\n\t\t\treturn updated;\n\t\t},\n\t\temptyTileClicked() {\n\t\t\tthis.additionalRowComputed = false;\n\t\t\tthis.$emit('newItem', this.x, this.y);\n\t\t},\n\t\tupdateCursorOnMouseMove(evt){\n\t\t\tif(this.mode == MODE_IDLE){\n\t\t\t\tthis.updateCursor(evt);\n\t\t\t}\n\t\t},\n\t\tcheckPinnedWidgetAnimation(){\n\t\t\tlet itemAtPosition=[];\n\t\t\tswitch(this.mode){\n\t\t\t\tcase MODE_RESIZE:\n\t\t\t\t\tfor (let x = this.draggedItem.x; x <= this.x; x++) {\n\t\t\t\t\t\tfor (let y = this.draggedItem.y; y <= this.y; y++) {\n\t\t\t\t\t\t\tthis.items.forEach(item => {\n\t\t\t\t\t\t\t\tif (item.x == x && item.y == y) {\n\t\t\t\t\t\t\t\t\titemAtPosition.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MODE_MOVE:\n\t\t\t\t\titemAtPosition = this.items.filter(item=>item.x == this.x && item.y == this.y);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tArray.from(document.getElementsByClassName(\"denied-dragging-animation\"))?.forEach(ele => {\n\t\t\t\tele.classList.remove(\"denied-dragging-animation\");\n\t\t\t})\n\n\t\t\titemAtPosition.forEach(item=>{\n\t\t\t\tif (item.place[this.cols] && item.place[this.cols].pinned) {\n\t\t\t\t\tlet pinnedWidget = document.getElementById(item.widgetid);\n\t\t\t\t\tlet pinNode = pinnedWidget.querySelector(\"[pinned='true']\");\n\t\t\t\t\tif (!pinNode.classList.contains(\"denied-dragging-animation\")) {\n\t\t\t\t\t\tpinNode.classList.add(\"denied-dragging-animation\");\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t})\n\t\t},\n\t\tcheckWidgetSizeLimitAnimation() {\n\n\t\t\tlet draggedItemSetup = this.itemsSetup[this.draggedItem.data.widget];\n\t\t\tlet draggedItemMaxWidth = draggedItemSetup.width.max ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMinWidth = draggedItemSetup.width.min ?? draggedItemSetup.width;\n\t\t\tlet draggedItemMaxHeight = draggedItemSetup.height.max ?? draggedItemSetup.height;\n\t\t\tlet draggedItemMinHeight = draggedItemSetup.height.min ?? draggedItemSetup.height;\n\t\t\tlet draggedItemNode = document.getElementById(this.draggedItem.data.widgetid);\n\n\t\t\tlet width_after_resize = this.x - this.draggedItem.x + 1; \n\t\t\tlet height_after_resize = this.y - this.draggedItem.y + 1; \n\t\t\tif( \n\t\t\t\t(width_after_resize > 0 && (width_after_resize > draggedItemMaxWidth\n\t\t\t\t|| width_after_resize < draggedItemMinWidth)\n\t\t\t\t)\n\t\t\t\t||\n\t\t\t\t(height_after_resize > 0 && (height_after_resize > draggedItemMaxHeight\n\t\t\t\t|| height_after_resize < draggedItemMinHeight)\n\t\t\t\t)\n\t\t\t){\n\t\t\t\tdraggedItemNode.classList.add(\"border-danger\");\n\t\t\t}else{\n\t\t\t\tdraggedItemNode.classList.remove(\"border-danger\");\n\t\t\t}\n\t\t},\n\t\tremoveWidgetClones(){\n\t\t\tlet widgetClones = Array.from(document.getElementsByClassName(\"widgetClone\"));\n\t\t\tfor (let i = 0; i < widgetClones.length; i++) {\n\t\t\t\tthis.$refs.container.removeChild(widgetClones[i]);\n\t\t\t}\n\t\t},\n\t\tmouseDown(){\n\t\t\tthis.mode = MODE_MOUSE_DOWN;\n\t\t},\n\t\tmouseUp() {\n\t\t\tthis.mode = MODE_IDLE;\n\t\t},\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t`\n}\n\n/*\nOLD VERSION - ON HOVER\n\n\t\n\n*/","let __widgets = {};\nlet __widgetsStarted = {};\nlet __path = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard/Widget';\n\nexport default {\n\tgetWidget(id) {\n\t\treturn __widgets[id];\n\t},\n\tloadWidget(id) {\n\t\tif (__widgets[id])\n\t\t\treturn Promise.resolve(__widgets[id]);\n\t\tif (__widgetsStarted[id])\n\t\t\treturn __widgetsStarted[id];\n\t\tif (!__path)\n\t\t\treturn Promise.reject('Widget could not be loaded because there is no path yet!');\n\n\t\t__widgetsStarted[id] = new Promise((resolve, reject) => {\n\t\t\taxios.get(__path, {params:{id}}).then(res => {\n\t\t\t\t__widgets[id] = res.data.retval;\n\t\t\t\t__widgetsStarted[id] = undefined;\n\t\t\t\tresolve(__widgets[id]);\n\t\t\t}).catch(error => reject(error.response.data.retval.error));\n\t\t});\n\t\treturn __widgetsStarted[id];\n\t},\n\tsetPath(path) {\n\t\t__path = path;\n\t}\n}","import BsModal from \"../Bootstrap/Modal.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport HeightTransition from \"../Tranistion/HeightTransition.js\";\n\nimport {absoluteJsImportUrl} from \"../../helpers/UrlHelpers.js\";\n\nexport default {\n\tname: 'Item',\n\tcomponents: {\n\t\tBsModal,\n\t\tHeightTransition\n\t},\n\tdata: () => ({\n\t\tcomponent: \"\",\n\t\targuments: null,\n\t\ttarget: false,\n\t\twidget: null,\n\t\ttmpConfig: {},\n\t\tisLoading: false,\n\t\thasConfig: false,\n\t\tsharedData: null,\n\t}),\n\temits: [\n\t\t\"change\",\n\t\t\"remove\",\n\t\t\"dragstart\",\n\t\t\"resizestart\",\n\t\t\"configOpened\",\n\t\t\"configClosed\",\n\t\t\"pinItem\",\n\t\t\"unPinItem\"\n\t],\n\tprops: [\n\t\t\"id\",\n\t\t\"widgetID\",\n\t\t\"config\",\n\t\t\"width\",\n\t\t\"height\",\n\t\t\"custom\",\n\t\t\"hidden\",\n\t\t\"editMode\",\n\t\t\"loading\",\n\t\t\"item_data\",\n\t\t\"place\",\n\t\t\"setup\",\n\t\t\"dragstate\",\n\t\t\"resizeOverlay\",\n\t\t\"additionalRow\"\n\t],\n\tcomputed: {\n\t\tmaxHeight(){\n\t\t\treturn this.setup?.height?.max;\n\t\t},\n\t\tmaxWidth(){\n\t\t\tif (Object.prototype.toString.call(this.setup?.width) == \"[object Number]\"){\n\t\t\t\treturn this.setup?.width;\n\t\t\t}\n\t\t\treturn this.setup?.width?.max;\n\t\t},\n\t\tminHeight() {\n\t\t\treturn this.setup?.height?.min;\n\t\t},\n\t\tminWidth() {\n\t\t\treturn this.setup?.width?.min;\n\t\t},\n\t\tisResizeable(){\n\t\t\treturn this.maxWidth >1 || this.maxHeight >1;\n\t\t},\n\t\tisPinned(){\n\t\t\treturn this.place?.pinned ? true : false;\n\t\t},\n\t\tready() {\n\t\t\treturn this.component && this.arguments !== null;\n\t\t},\n\t},\n\tmethods: {\n\t\tunpin(){\n\t\t\t// Unpinning is only possible in edit mode\n\t\t\tif(!this.editMode)\n\t\t\t\treturn;\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y };\n\t\t\tthis.$emit('unPinItem', [result]);\n\t\t},\n\t\tpinItem(){\n\t\t\tlet result = { item: this.item_data, x: this.item_data.x, y: this.item_data.y};\n\t\t\tthis.$emit('pinItem',[result]);\n\t\t},\n\t\tgetWidgetC4Link(widget) {\n\t\t\treturn (FHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router + widget.setup.cis4link)\n\t\t},\n\t\thandleShowBsModal() {\n\t\t\tthis.$emit('configOpened')\n\t\t},\n\t\thandleHideBsModal() {\n\t\t\tthis.$emit('configClosed')\n\t\t},\n\t\tmouseDown(e) {\n\t\t\tthis.target = e.target;\n\t\t},\n\t\tstartDrag(e) {\n\t\t\tif (this.$refs.dragHandle.contains(this.target)) {\n\t\t\t\tthis.$emit(\"dragstart\", e);\n\t\t\t} else if (\n\t\t\t\tthis.isResizeable &&\n\t\t\t\tthis.$refs.resizeHandle.contains(this.target)\n\t\t\t) {\n\t\t\t\tif (this.isResizeable) this.$emit(\"resizestart\", e);\n\t\t\t\telse e.preventDefault();\n\t\t\t} else {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\topenConfig() {\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config.show();\n\t\t},\n\t\tsetConfig(hasConfig) {\n\t\t\tthis.hasConfig = hasConfig;\n\t\t},\n\t\tchangeConfig() {\n\t\t\tthis.isLoading = true;\n\t\t\tlet config = { ...this.tmpConfig };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tchangeConfigManually() {\n\t\t\tlet config = { ...this.arguments };\n\t\t\tthis.sendChangeConfig(config);\n\t\t},\n\t\tsendChangeConfig(config) {\n\t\t\tfor (var k in config) {\n\t\t\t\tif (this.widget.arguments[k] == config[k]) {\n\t\t\t\tdelete config[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"change\", config);\n\t\t},\n\t},\n\twatch: {\n\t\tconfig() {\n\t\t\tthis.arguments = { ...this.widget?.arguments, ...this.config };\n\t\t\tthis.tmpConfig = { ...this.arguments };\n\t\t\tthis.$refs.config && this.$refs.config.hide();\n\t\t\tthis.isLoading = false;\n\t\t},\n\t},\n\tasync created() {\n\t\tthis.widget = await CachedWidgetLoader.loadWidget(this.id);\n\t\tlet component = (await import(this.widget.setup.file)).default;\n\t\tthis.$options.components[\"widget\" + this.widget.widget_id] = component;\n\t\tthis.component = \"widget\" + this.widget.widget_id;\n\t\tthis.arguments = { ...this.widget.arguments, ...this.config };\n\t\tthis.tmpConfig = { ...this.arguments };\n\t},\n\ttemplate: /*html*/ `\n\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{{ widget.setup.name }}\n\t\t\t\n\t\t\t\n\t\t\t\n \t\t\n \t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t
    \n\t
    `,\n};\n","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tmethods:{\n\t\tonEnter(el,done){\n\t\t\tel.style.height = '0';\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t},\n\t\tonLeave(el,done){\n\t\t\tel.style.height = el.scrollHeight + 'px';\n\t\t\tel.style.height = '0';\n\t\t}\n\t},\n\ttemplate:\n\t/*html*/`\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t`,\n};","export default {\n\tdata(){\n\t\treturn {\n\n\t\t}\n\t},\n\tprops:{\n\t\twidget:{\n\t\t\ttype:Object,\n\t\t\trequired:true,\n\t\t}\n\t},\n\tmethods:{\n\t\tpath(src) {\n\t\t\tif (src[0] == '/')\n\t\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + src;\n\t\t\treturn src;\n\t\t}\n\t},\n\temits:[\"select\"],\n\ttemplate: /*html */`\n\t
    \n\t\t\n\t\t
    \n\t\t\t
    {{ widget.setup.name || widget.widget_kurzbz }}
    \n\t\t\t

    {{ widget.beschreibung }}

    \n\t\t
    \n\t
    `,\n}","import BsConfirm from \"../Bootstrap/Confirm.js\";\nimport DropGrid from '../Drop/Grid.js'\nimport DashboardItem from \"./Item.js\";\nimport CachedWidgetLoader from \"../../composables/Dashboard/CachedWidgetLoader.js\";\nimport WidgetIcon from \"./Widget/WidgetIcon.js\"\n\nexport default {\n\tname: 'Section',\n\tcomponents: {\n\t\tDropGrid,\n\t\tDashboardItem,\n\t\tWidgetIcon,\n\t},\n\tinject: {\n\t\twidgetsSetup:{\n\t\t\ttype: Array,\n\t\t\tdefault: [],\n\t\t},\n\t\tadminMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\teditMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tprops: [\n\t\t\"name\",\n\t\t\"widgets\"\n\t],\n\temits: [\n\t\t\"widgetAdd\",\n\t\t\"widgetUpdate\",\n\t\t\"widgetRemove\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tconfigOpened: false,\n\t\t\tgridWidth: 1,\n\t\t\tgridHeight: null,\n\t\t\tdraggedItem:null,\n\t\t\tadditionalRow:false,\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditModeIsActive: Vue.computed(() =>\n\t\t\t\tthis.editModeIsActive\n\t\t\t),\t\n\t\t\tsectionName: Vue.computed(() => this.name),\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tcomputedWidgetsSetup(){\n\t\t\tif(!this.widgetsSetup) return {};\n\t\t\treturn this.widgetsSetup.reduce((acc, setup)=>{\n\t\t\t\tacc[setup.widget_id] = setup.setup;\n\t\t\t\treturn acc;\n\t\t\t},{})\n\t\t},\n\t\teditModeIsActive() {\n\t\t\treturn (this.editMode || this.adminMode) && !this.configOpened\t\n\t\t},\n\t\tgetSectionStyle() {\n\t\t\treturn 'margin-bottom: 8px;';\n\t\t},\n\t\titems() {\n\t\t\t// reuses the nearest placement of the widget from another viewport \n\t\t\t/* const computeNearestPlace = (item, gridWidth) =>{\n\t\t\t\tlet place;\n\t\t\t\tif (Object.keys(item.place).length > 0) {\n\t\t\t\t\tconst nearestIndex = Object.keys(item.place)\n\t\t\t\t\t\t\t\t\t\t\t .sort((a, b) => Math.abs(a - gridWidth) - Math.abs(b - gridWidth))\n\t\t\t\t\t\t\t\t\t\t\t .shift();\n\t\t\t\t\tplace = item.place[nearestIndex];\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tplace = { x: 0, y: 0, w: 1, h: 1 };\n\t\t\t\t}\n\t\t\t\treturn place;\n\t\t\t} */\n\t\t\t\n\t\t\tlet placedItems = this.widgets.map(item => {\n\t\t\t\tif(!item?.widgetid && item?.id){\n\t\t\t\t\titem.widgetid = item.id;\n\t\t\t\t}\n\t\t\t\treturn { ...item, reorder: false, ...(item.place[this.gridWidth] || { reorder: true, ...{ x: 0, y: 0, w: 1, h: 1 } })};\n\t\t\t});\n\t\t\treturn placedItems;\n\t\t\t\n\t\t},\n\t\t\n\t},\n\tmethods: {\n\t\tsectionNameTranslation(){\n\t\t\tswitch(this.name){\n\t\t\t\tcase \"general\": \n\t\t\t\t\treturn this.$p.t('dashboard',this.name); \n\t\t\t\t\tbreak;\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn this.$p.t('dashboard',this.name);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.name;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tshowSectionInformation(){\n\t\t\tif (this.name == \"general\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardGeneralSectionDescription'); \n\t\t\t}\n\t\t\telse if(this.name == \"custom\"){\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardCustomSectionDescription');\n\t\t\t}\n\t\t\telse{\n\t\t\t\treturn this.$p.t('dashboard', 'dashboardSectionDescription', [this.name]);\n\t\t\t}\n\t\t},\n\t\thandleConfigOpened() {\n\t\t\tthis.configOpened = true\n\t\t},\n\t\thandleConfigClosed() {\n\t\t\tthis.configOpened = false\n\t\t},\n\t\tcheckResizeLimit(item, w, h) {\n\t\t\t// NOTE(chris): widgets needs to be loaded for this to work\n\t\t\tlet widget = CachedWidgetLoader.getWidget(item.widget);\n\t\t\tif (widget) {\n\t\t\t\tlet minmaxW = widget.setup.width;\n\t\t\t\tif (minmaxW.max)\n\t\t\t\t\tminmaxW.min = minmaxW.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxW = {min:minmaxW,max:minmaxW};\n\t\t\t\tif (w < minmaxW.min)\n\t\t\t\t\tw = minmaxW.min; \n\t\t\t\tif (w > minmaxW.max)\n\t\t\t\t\tw = minmaxW.max;\n\n\t\t\t\tlet minmaxH = widget.setup.height;\n\t\t\t\tif (minmaxH.max)\n\t\t\t\t\tminmaxH.min = minmaxH.min || 1;\n\t\t\t\telse\n\t\t\t\t\tminmaxH = {min:minmaxH,max:minmaxH};\n\t\t\t\tif (h < minmaxH.min)\n\t\t\t\t\th = minmaxH.min;\n\t\t\t\tif (h > minmaxH.max)\n\t\t\t\t\th = minmaxH.max;\n\t\t\t}\n\t\t\treturn [w, h];\n\t\t},\n\t\tremoveWidget(item, revert) {\n\t\t\tif (item.custom) {\n\t\t\t\tBsConfirm.popup('Are you sure you want to delete this widget?').then(() => this.$emit('widgetRemove', this.name, item.id));\n\t\t\t} else {\n\t\t\t\tlet update = {};\n\t\t\t\tupdate[item.id] = { hidden: !revert };\n\t\t\t\tthis.updatePreset(update);\n\t\t\t}\n\t\t},\n\t\tsaveConfig(config, item) {\n\t\t\tlet payload = {};\n\t\t\tpayload[item.id] = { config };\n\t\t\tthis.updatePreset(payload);\n\t\t},\n\t\tupdatePositions(updated, pinned=false) {\n\t\t\tlet result = {};\n\t\t\tupdated.forEach(update => {\n\t\t\t\t\n\t\t\t\tlet item = {...update.item};\n\t\t\t\tif (!item.placeholder) {\n\t\t\t\tif (!item.place[this.gridWidth])\n\t\t\t\t\titem.place[this.gridWidth] = {x: 0, y: 0, w: 1, h: 1};\n\t\t\t\tdelete item.x;\n\t\t\t\tdelete item.y;\n\t\t\t\tdelete item.w;\n\t\t\t\tdelete item.h;\n\t\t\t\tdelete item.place[this.gridWidth].pinned;\n\t\t\t\tif (update.x !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].x = update.x;\n\t\t\t\tif (update.y !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].y = update.y;\n\t\t\t\tif (update.w !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].w = update.w;\n\t\t\t\tif (update.h !== undefined)\n\t\t\t\t\titem.place[this.gridWidth].h = update.h;\n\t\t\t\tif (pinned){\n\t\t\t\t\titem.place[this.gridWidth].pinned = true;\n\t\t\t\t}\n\n\t\t\t\tresult[item.id] = item;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.updatePreset(result);\n\t\t},\n\t\tupdatePreset(update) {\n\t\t\tlet payload = {};\n\t\t\tpayload[this.name] = update;\n\t\t\tthis.$emit('widgetUpdate', this.name, payload);\n\t\t}\n\t},\n\tmounted() {\n\t\tlet self = this;\n\t\tlet cont = self.$refs.container;\n\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t\n\t\twindow.addEventListener('resize', () => {\n\t\t\tself.gridWidth = parseInt(window.getComputedStyle(cont).getPropertyValue('--fhc-dashboard-grid-size'));\n\t\t});\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t\n\t\t\t{{sectionNameTranslation()}}:\n\t\t

    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n\n/*\nOLD VERSION - ON HOVER\n\n*/","import BsModal from \"../../Bootstrap/Modal.js\";\nimport WidgetIcon from \"./WidgetIcon.js\";\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tWidgetIcon,\n\t},\n\tprops: [\n\t\t\"widgets\"\n\t],\n\tdata: () => ({\n\t\tcallbacks: {}\n\t}),\n\tmethods: {\n\t\tgetWidget() {\n\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\tthis.callbacks = {resolve,reject};\n\t\t\t\tthis.$refs.modal.show();\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\tif (this.callbacks.reject)\n\t\t\t\tthis.callbacks.reject();\n\t\t\tthis.callbacks = {};\n\t\t},\n\t\tpick(widget_id) {\n\t\t\tif (this.callbacks.resolve)\n\t\t\t\tthis.callbacks.resolve(widget_id);\n\t\t\tthis.callbacks = {};\n\t\t\tthis.$refs.modal.hide();\n\t\t},\n\t\t\n\t},\n\ttemplate: `
    \n\t\t 0}\" @hiddenBsModal=\"close\">\n\t\t\t\n\t\t\t\n\t\t\n\t
    `\n}\n","export default {\n\t/**\n\t* Performs a deep merge of objects and returns new object. Does not modify\n\t* objects (immutable) and merges arrays via concatenation.\n\t*\n\t* @param {...object} objects - Objects to merge\n\t* @returns {object} New object with merged key/values\n\t*/\n\tmergeDeep(...objects) {\n\t\tconst isObject = obj => obj && typeof obj === 'object';\n\t\t\n\t\treturn objects.reduce((prev, obj) => {\n\t\t\tObject.keys(obj).forEach(key => {\n\t\t\t\tconst pVal = prev[key];\n\t\t\t\tconst oVal = obj[key];\n\t\t\t\t\n\t\t\t\tif (Array.isArray(pVal) && Array.isArray(oVal)) {\n\t\t\t\t\tprev[key] = pVal.concat(...oVal);\n\t\t\t\t}\n\t\t\t\telse if (isObject(pVal) && isObject(oVal)) {\n\t\t\t\t\tprev[key] = this.mergeDeep(pVal, oVal);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tprev[key] = oVal;\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn prev;\n\t\t}, {});\n\t}\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetViewData() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cis4FhcApi/getViewData'\n\t\t};\n\t}\n};","import DashboardSection from \"./Section.js\";\nimport DashboardWidgetPicker from \"./Widget/Picker.js\";\nimport ObjectUtils from \"../../helpers/ObjectUtils.js\";\n\nimport ApiDashboard from '../../api/factory/cis/dashboard.js';\n\nexport default {\n\tname: 'Dashboard',\n\tcomponents: {\n\t\tDashboardSection,\n\t\tDashboardWidgetPicker\n\t},\n\tprops: {\n\t\tdashboard: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: 'CIS'\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid && value.timezone\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tsections: [],\n\t\t\twidgets: null,\n\t\t\teditMode: false,\n\t\t\tviewDataInternal: this.viewData\n\t\t}\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\teditMode: Vue.computed(()=>this.editMode),\n\t\t\twidgetsSetup: Vue.computed(() => this.widgets),\n\t\t\ttimezone: Vue.computed(() => this.viewData.timezone)\n\t\t}\n\t},\n\tcomputed: {\n\t\tapiurl() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/dashboard';\n\t\t}\n\t},\n\tmethods: {\n\t\twidgetAdd(section_name, widget) {\n\t\t\tif (this.widgets === null) {\n\t\t\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {params:{\n\t\t\t\t\tdb: this.dashboard\n\t\t\t\t}}).then(res => {\n\t\t\t\t\tres.data.retval.forEach(widget => {\n\t\t\t\t\t\twidget.arguments = JSON.parse(widget.arguments);\n\t\t\t\t\t\twidget.setup = JSON.parse(widget.setup);\n\t\t\t\t\t});\n\t\t\t\t\tthis.widgets = res.data.retval;\n\t\t\t\t}).catch(err => console.error('ERROR:', err));\n\t\t\t}\n\t\t\tthis.$refs.widgetpicker.getWidget().then(widget_id => {\n\t\t\t\twidget.widget = widget_id;\n\t\t\t\twidget.id = 'loading_' + String((new Date()).valueOf());\n\t\t\t\tlet loading = {...widget};\n\t\t\t\tloading.loading = true;\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets.push(loading);\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\t\tdb: this.dashboard,\n\t\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\t\twidgets: [widget]\n\t\t\t\t}).then(result => {\n\t\t\t\t\tlet newId = Object.keys(result.data.retval.data[section_name].widgets).pop();\n\t\t\t\t\twidget.id = newId;\n\t\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\t\tsection.widgets.splice(section.widgets.indexOf(loading),1);\n\t\t\t\t\t\t\tsection.widgets.push(widget);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}).catch(error => {\n\t\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t\t});\n\t\t\t}).catch(() => {});\n\t\t},\n\t\twidgetUpdate(section_name, payload) {\n\t\t\tpayload = payload[section_name];\n\t\t\tfor (var k in payload) {\n\t\t\t\tfor (var i in this.sections) {\n\t\t\t\t\tif (this.sections[i].name == section_name) {\n\t\t\t\t\t\tfor (var wid in this.sections[i].widgets) {\n\t\t\t\t\t\t\tif (this.sections[i].widgets[wid].id == k) {\n\t\t\t\t\t\t\t\tpayload[k] = ObjectUtils.mergeDeep(this.sections[i].widgets[wid], payload[k]);\n\t\t\t\t\t\t\t\t// NOTE(chris): remove internal props\n\t\t\t\t\t\t\t\tfor (var prop in {_x:1,_y:1,_w:1,_h:1,index:1,id:1,preset:1})\n\t\t\t\t\t\t\t\t\tif (payload[k][prop])\n\t\t\t\t\t\t\t\t\t\tdelete payload[k][prop];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpayload[k].widgetid = k;\n\t\t\t}\n\t\t\taxios.post(this.apiurl + '/Config/addWidgetsToUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgets: payload\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name) {\n\t\t\t\t\t\tsection.widgets.forEach((widget, i) => {\n\t\t\t\t\t\t\tif (payload[widget.id]) {\n\t\t\t\t\t\t\t\tpayload[widget.id].id = widget.id;\n\t\t\t\t\t\t\t\tpayload[widget.id].index = widget.index;\n\t\t\t\t\t\t\t\tsection.widgets[i] = payload[widget.id];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\t// TODO(chris): revert placement on failure\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t},\n\t\twidgetRemove(section_name, id) {\n\t\t\taxios.post(this.apiurl + '/Config/removeWidgetFromUserOverride', {\n\t\t\t\tdb: this.dashboard,\n\t\t\t\tfunktion_kurzbz: section_name,\n\t\t\t\twidgetid: id\n\t\t\t}).then(() => {\n\t\t\t\tthis.sections.forEach(section => {\n\t\t\t\t\tif (section.name == section_name)\n\t\t\t\t\t\tsection.widgets = section.widgets.filter(widget => widget.id != id);\n\t\t\t\t});\n\t\t\t}).catch(error => {\n\t\t\t\tconsole.error('ERROR: ', error);\n\t\t\t\talert('ERROR: ' + error.response.data.retval);\n\t\t\t});\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$p.loadCategory('dashboard');\n\t\taxios.get(this.apiurl + '/Widget/getWidgetsForDashboard', {\n\t\t\tparams: {\n\t\t\t\tdb: this.dashboard\n\t\t\t}\n\t\t}).then(res => {\n\t\t\tthis.widgets = res.data.retval;\n\t\t}).catch(err => console.error('ERROR:', err));\n\n\t\taxios.get(this.apiurl + '/Config', {params:{\n\t\t\tdb: this.dashboard\n\t\t}}).then(res => {\n\t\t\tfor (var name in res.data.retval) {\n\t\t\t\tlet widgets = [];\n\t\t\t\tlet remove = [];\n\t\t\t\tfor (var wid in res.data.retval[name].widgets) {\n\t\t\t\t\tres.data.retval[name].widgets[wid].id = wid;\n\t\t\t\t\tif (res.data.retval[name].widgets[wid].custom || res.data.retval[name].widgets[wid].preset)\n\t\t\t\t\t\twidgets.push(res.data.retval[name].widgets[wid]);\n\t\t\t\t\telse\n\t\t\t\t\t\tremove.push(wid);\n\t\t\t\t}\n\t\t\t\tthis.sections.push({\n\t\t\t\t\tname: name,\n\t\t\t\t\twidgets: widgets\n\t\t\t\t});\n\t\t\t\tremove.forEach(wid => this.widgetRemove(name, wid));\n\t\t\t}\n\t\t\tthis.sections = this.sections.sort((section1, section2) => {\n\t\t\t\tif(section1.name == 'custom')\n\t\t\t\t\treturn 1;\n\t\t\t\tif (section2.name == 'custom')\n\t\t\t\t\treturn -1;\n\t\t\t\treturn section2.widgets.length - section1.widgets.length;\n\t\t\t});\n\t\t}).catch(err => console.error('ERROR:', err));\n\t},\n\tasync beforeMount() {\n\t\tif (!this.viewData.name || !this.viewData.uid) {\n\t\t\tconst res = await this.$api.call(ApiDashboard.getViewData());\n\t\t\tthis.viewDataInternal = res.data\n\t\t}\t\n\t},\n\ttemplate: `\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('global/personalGreeting', [ viewDataInternal?.name ]) }}\n\t\t\t\n\t\t

    \n\t\t\n\t\t\n\t
    `\n}\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsearch(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/search';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchAdvanced(searchsettings, config) {\n\t\tconst url = '/api/frontend/v1/searchbar/searchAdvanced';\n\t\treturn this.$fhcApi.post(url, searchsettings, config);\n\t},\n\tsearchdummy(searchsettings) {\n\t\tconst url = 'public/js/apps/api/dummyapi.php/Search';\n\t\treturn this.$fhcApi.post(url, searchsettings);\n\t}\n};\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/loadModule/' + category);\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst payload = {categories, language}\n\t\treturn this.$fhcApi.post('/api/frontend/v1/phrasen/setLanguage', payload);\n\t},\n\tgetLanguage() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getLanguage', {});\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/phrasen/getAllLanguages', {});\n\t}\n};","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetHeader(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/header',\n\t\t\t{ navigation_page }\n\t\t);\n\t},\n\tgetMenu: function(navigation_page) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/navigation/menu',\n\t\t\t{ navigation_page }\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/saveCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t);\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeCustomFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/applyFilterFields',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t);\n\t},\n\taddFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/addFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/filter/removeFilterField',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t);\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t);\n\t},\n\tgetFilter(wsParams) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/filter/getFilter',\n\t\t\t{\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t);\n\t}\n};\n\n","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tabmeldung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/abmeldung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(stdsem, prestudent_id, grund) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/abmeldung/createAntrag', {\n\t\t\t\tstudiensemester: stdsem,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\tif (!Array.isArray(antrag_id))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t\t{ antrag_id }\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag_id.map(antrag => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/abmeldung/cancelAntrag',\n\t\t\t\t{ antrag_id: antrag.studierendenantrag_id },\n\t\t\t\t{ errorHeader: '#' + antrag.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t},\n\tunterbrechung: {\n\t\tgetDetails(antrag_id, prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/unterbrechung/'\n\t\t\t\t+ (antrag_id !== undefined ? 'getDetailsForAntrag/' + antrag_id : 'getDetailsForNewAntrag/' + prestudent_id);\n\t\t\treturn this.$fhcApi.get(url);\n\t\t},\n\t\tcreate(studiensemester, prestudent_id, grund, datum_wiedereinstieg, attachment) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/createAntrag', {\n\t\t\t\tstudiensemester,\n\t\t\t\tprestudent_id,\n\t\t\t\tgrund,\n\t\t\t\tdatum_wiedereinstieg,\n\t\t\t\tattachment\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(antrag_id) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/unterbrechung/cancelAntrag', {\n\t\t\t\tantrag_id\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t}\n\t},\n\twiederholung: {\n\t\tgetDetails(prestudent_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getDetailsForNewAntrag/' + prestudent_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tgetLvs(antrag_id) {\n\t\t\tconst url = '/api/frontend/v1/studstatus/wiederholung/getLvs/' + antrag_id;\n\t\t\treturn this.$fhcApi.get(url)\n\t\t},\n\t\tcreate(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/createAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tcancel(prestudent_id, studiensemester) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/cancelAntrag', {\n\t\t\t\tprestudent_id,\n\t\t\t\tstudiensemester\n\t\t\t}, {\n\t\t\t\terrorHandling: 'strict'\n\t\t\t});\n\t\t},\n\t\tsaveLvs(forbiddenLvs, mandatoryLvs) {\n\t\t\treturn this.$fhcApi.post('/api/frontend/v1/studstatus/wiederholung/saveLvs', {\n\t\t\t\tforbiddenLvs,\n\t\t\t\tmandatoryLvs\n\t\t\t});\n\t\t}\n\t},\n\tleitung: {\n\t\tgetStgs() {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getActiveStgs');\n\t\t},\n\t\tgetAntraege(url, config, params) {\n\t\t\treturn this.$fhcApi\n\t\t\t\t.get('/api/frontend/v1/studstatus/leitung/getAntraege/' + url)\n\t\t\t\t.then(res => res.data); // Return data for tabulator\n\t\t},\n\t\tgetHistory(antrag_id) {\n\t\t\treturn this.$fhcApi.get('/api/frontend/v1/studstatus/leitung/getHistory/' + antrag_id)\n\t\t},\n\t\tgetPrestudents(query, signal) {\n\t\t\treturn this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/getPrestudents',\n\t\t\t\t{ query },\n\t\t\t\t{\n signal: signal,\n timeout: 30000\n }\n\t\t\t);\n\t\t},\n\t\tapprove(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/rejectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\treopen(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/reopenAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/pauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tunpause(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/unpauseAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tobject(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/objectAntrag',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tapproveObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/approveObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t},\n\t\tdenyObjection(antrag) {\n\t\t\tif (!Array.isArray(antrag))\n\t\t\t\treturn this.$fhcApi.post(\n\t\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\t\tantrag\n\t\t\t\t);\n\t\t\treturn Promise.allSettled(antrag.map(a => this.$fhcApi.post(\n\t\t\t\t'/api/frontend/v1/studstatus/leitung/denyObjection',\n\t\t\t\ta,\n\t\t\t\t{ errorHeader: '#' + a.studierendenantrag_id }\n\t\t\t)));\n\t\t}\n\t}\n};","export default {\n\n getView: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getView/${uid}`,{}\n );\n },\n\n fotoSperre: function (value) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/fotoSperre/${value}`,\n {}\n );\n \n },\n\n isStudent: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isStudent`,\n {\n uid:uid,\n }\n );\n },\n\n isMitarbeiter: function (uid) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/isMitarbeiter/${uid}`,\n {}\n );\n },\n\n getZustellAdresse: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellAdresse`,{}\n );\n },\n\n getZustellKontakt: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getZustellKontakt`,{}\n );\n },\n\n getGemeinden: function(nation,zip){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`,\n {}\n );\n \n },\n getAllNationen:function(){\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root + \n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Profil/getAllNationen\",{}\n );\n },\n}","export default {\n //! API calls for profil update requests\n \n getStatus: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getStatus`,{});\n },\n \n getTopic: function () {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getTopic`,{});\n },\n \n acceptProfilRequest: function ({profil_update_id, uid, status_message, topic, requested_change}) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/acceptProfilRequest\",{profil_update_id, uid, status_message, topic, requested_change});\n },\n \n denyProfilRequest: function ({profil_update_id, uid, topic, status_message}) {\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/denyProfilRequest\",{profil_update_id,uid,topic,status_message});\n },\n \n insertFile: function (dms, replace = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n dms);\n\n },\n \n getProfilRequestFiles: function (requestID) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`,{});\n },\n \n selectProfilRequest: function (uid = null, id = null) {\n\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/selectProfilRequest`,\n {...(uid?{uid}:{}),\n ...(id?{id}:{})\n });\n },\n \n insertProfilRequest: function (topic, payload, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/ProfilUpdate/insertProfilRequest\",\n {\n topic,\n payload,\n ...(fileID ? { fileID } : {}),\n });\n },\n \n updateProfilRequest: function (topic, payload, ID, fileID = null) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/updateProfilRequest`,\n {\n topic,\n payload,\n ID,\n ...(fileID ? { fileID: fileID } : {}),\n });\n },\n \n deleteProfilRequest: function (requestID) {\n\n return this.$fhcApi.post(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/ProfilUpdate/deleteProfilRequest`,\n {\n requestID,\n });\n },\n };\n ","\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\t{ ort_kurzbz, start_date, end_date}\n\t\t);\n\t},\n\tgetStunden() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/Stunden',\n\t\t\t{}\n\t\t);\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\t{ start_date, end_date}\n\t\t);\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\t{ start_date, end_date }\n\t\t);\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`,\n\t\t\t{}\n\t\t);\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`,\n\t\t\t{}\n\t\t);\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\t{ start_date, end_date, lv_id }\n\t\t);\n\t},\n\t\n\t\n};","import verband from './stv/verband.js';\nimport students from './stv/students.js';\nimport filter from './stv/filter.js';\nimport konto from './stv/konto.js';\nimport group from './stv/group.js';\nimport kontakt from './stv/kontakt.js';\nimport prestudent from './stv/prestudent.js';\nimport status from './stv/status.js';\nimport details from './stv/details.js';\nimport exam from './stv/exam.js';\nimport abschlusspruefung from './stv/abschlusspruefung.js';\nimport grades from './stv/grades.js';\nimport mobility from './stv/mobility.js';\nimport archiv from './stv/archiv.js';\nimport documents from './stv/documents.js';\nimport exemptions from './stv/exemptions.js';\nimport jointstudies from \"./stv/jointstudies.js\";\nimport courselist from './stv/courselist.js';\n\nexport default {\n\tverband,\n\tstudents,\n\tfilter,\n\tkonto,\n\tgroup,\n\tkontakt,\n\tprestudent,\n\tstatus,\n\tdetails,\n\texam,\n\tabschlusspruefung,\n\tgrades,\n\tmobility,\n\tarchiv,\n\tdocuments,\n\texemptions,\n\tjointstudies,\n\tcourselist,\n\tconfigStudent() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/student');\n\t},\n\tconfigStudents() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/config/students');\n\t}\n};\n","export default {\n\tget() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/verband');\n\t},\n\tfavorites: {\n\t\tget() {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/stv/favorites');\n\t\t},\n\t\tset(favorites) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/stv/favorites/set', {\n\t\t\t\tfavorites\n\t\t\t});\n\t\t}\n\t}\n}","export default {\n\tuid(uid, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/uid/'\n\t\t\t+ encodeURIComponent(uid);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tprestudent(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/prestudent/'\n\t\t\t+ encodeURIComponent(prestudent_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tperson(person_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/students/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t+ '/person/'\n\t\t\t+ encodeURIComponent(person_id);\n\t\treturn this.$fhcApi.getUri(url);\n\t},\n\tverband(relative_path) {\n\t\treturn this.$fhcApi.getUri('api/frontend/v1/stv/students/' + relative_path);\n\t}\n}","export default {\n\tgetStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/filter/getStg');\n\t},\n\tsetStg(studiengang_kz) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/filter/setStg', {\n\t\t\tstudiengang_kz\n\t\t});\n\t}\n};","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/konto/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id),\n\t\t\t\tonly_open: self.filter,\n\t\t\t\tstudiengang_kz: self.studiengang_kz_intern ? self.stg_kz : ''\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tcheckDoubles(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/checkDoubles', data, {\n\t\t\tconfirmErrorHandler: error => true\n\t\t});\n\t},\n\tinsert(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/insert', data);\n\t},\n\tcounter(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/counter', data);\n\t},\n\tedit(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/konto/update', data);\n\t},\n\tdelete(buchungsnr) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/konto/delete', {buchungsnr});\n\t},\n\tgetBuchungstypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/konto/getBuchungstypen');\n\t}\n};","export default {\n\tgetGruppen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/Gruppen/getGruppen/' + params.id);\n\t},\n\tdeleteGroup(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/Gruppen/deleteGruppe/', params);\n\t}\n}","export default {\n\t//------------- address.js-----------\n\tgetAdressen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressen/' + params.id);\n\t},\n\taddNewAddress(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewAddress/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadAddress(address_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadAddress/', {address_id});\n\t},\n\tupdateAddress(form, address_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateAddress/' + address_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteAddress(address_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteAddress/', {address_id});\n\t},\n\tgetPlaces(plz) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getPlaces/' + plz);\n\t},\n\tgetFirmen(searchString) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getFirmen/' + searchString);\n\t},\n\tgetNations() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/address/getNations/');\n\t},\n\tgetAdressentypen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getAdressentypen/');\n\t},\n\n\t//------------- bankverbindung.js-----------\n\tgetBankverbindung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getBankverbindung/' + params.id);\n\t},\n\taddNewBankverbindung(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewBankverbindung/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadBankverbindung(bankverbindung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadBankverbindung/', {bankverbindung_id});\n\t},\n\tupdateBankverbindung(form, bankverbindung_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateBankverbindung/' + bankverbindung_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteBankverbindung(bankverbindung_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteBankverbindung/', {bankverbindung_id});\n\t},\n\n\t//------------- contact.js-----------\n\tgetKontakte (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakte/' + params.id);\n\t},\n\taddNewContact(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/addNewContact/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadContact(kontakt_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/loadContact/', {kontakt_id});\n\t},\n\tupdateContact(form, kontakt_id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/kontakt/updateContact/' + kontakt_id,\n\t\t\tdata\n\t\t);\n\t},\n\tdeleteContact(kontakt_id) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/kontakt/deleteContact/', {kontakt_id});\n\t},\n\tgetStandorteByFirma(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getStandorteByFirma/' + searchString);\n\t},\n\tgetKontakttypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/kontakt/getKontakttypen/');\n\t}\n};","export default {\n\n//------------- Prestudent.js------------------------------------------------------\n\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\treturn \tthis.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/prestudent/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz)\n\t\t\t);\n\t},\n\tupdatePrestudent(form, prestudent_id, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/prestudent/updatePrestudent/' + prestudent_id,\n\t\t\tdata\n\t\t);\n\t},\n\tgetBezeichnungZGV() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungZGV/');\n\t},\n\tgetBezeichnungMZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungMZgv/');\n\t},\n\tgetBezeichnungDZgv() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBezeichnungDZgv/');\n\t},\n\tgetStgs() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStgs/');\n\t},\n\tgetAusbildung() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAusbildung/');\n\t},\n\tgetAufmerksamdurch() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getAufmerksamdurch/');\n\t},\n\tgetBerufstaetigkeit() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBerufstaetigkeit/');\n\t},\n\tgetTypenStg() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getTypenStg/');\n\t},\n\tgetBisstandort() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getBisstandort/');\n\t},\n\n//------------- MultiStatus.js------------------------------------------------------\n\tgetHistoryPrestudent (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getHistoryPrestudent/' + params.id);\n\t},\n\tgetMaxSem(studiengang_kzs) {\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/status/getMaxSemester/', {studiengang_kzs});\n\t},\n\tadvanceStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/advanceStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tconfirmStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/confirmStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tisLastStatus(id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/isLastStatus/' + id);\n\t},\n\tdeleteStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/deleteStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tgetLastBismeldestichtag() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getLastBismeldestichtag/');\n\t},\n\n//------------- History.js------------------------------------------------------\n\tgetHistoryPrestudents (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getHistoryPrestudents/' + params.id);\n\t},\n\n}","export default {\n\n//------------- Modal.js------------------------------------------------------\n\n\tinsertStatus(form, id, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/status/insertStatus/' + id,\n\t\t\tdata\n\t\t);\n\t},\n\tloadStatus({prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/status/loadStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester\n\t\t);\n\t},\n\tupdateStatus(form, {prestudent_id, status_kurzbz, studiensemester_kurzbz, ausbildungssemester}, data) {\n\t\treturn this.$fhcApi.post(\n\t\t\tform,\n\t\t\t'api/frontend/v1/stv/status/updateStatus/'\n\t\t\t+ prestudent_id + '/'\n\t\t\t+ status_kurzbz + '/'\n\t\t\t+ studiensemester_kurzbz + '/'\n\t\t\t+ ausbildungssemester,\n\t\t\tdata\n\t\t);\n\t},\n\tgetStudienplaene(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudienplaene/' + prestudent_id);\n\t},\n\tgetStudiengang(prestudent_id) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/prestudent/getStudiengang/' + prestudent_id);\n\t},\n\tgetStatusgruende() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusgruende/');\n\t},\n\tgetStati() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/lists/getStati/');\n\t},\n\n//------------- Dropdown.js------------------------------------------------------\n\n\taddStudent(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/addStudent/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tchangeStatus(id, data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/status/changeStatus/' + id,\n\t\t\tdata,\n\t\t\t{errorHeader: id}\n\t\t);\n\t},\n\tgetStatusarray() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/status/getStatusarray/');\n\t}\n}","export default {\n\tget(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/student/get/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(url);\n\t},\n\tsave(form, prestudent_id, studiensemester_kurzbz, data) {\n\t\tlet url = 'api/frontend/v1/stv/student/save/'\n\t\t\t+ encodeURIComponent(prestudent_id)\n\t\t\t+ '/'\n\t\t\t+ encodeURIComponent(studiensemester_kurzbz);\n\t\treturn this.$fhcApi.post(form, url, data);\n\t},\n}\n","export default {\n\tgetPruefungen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getPruefungen/' + params.id);\n\t},\n\tloadPruefung(pruefung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/loadPruefung/' + pruefung_id);\n\t},\n\tgetTypenPruefungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getTypenPruefungen');\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/getAllLehreinheiten/', data)\n\t},\n\tgetLvsByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsByStudent/' + uid)\n\t},\n\tgetLvsandLesByStudent(uid, semester){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsandLesByStudent/' + uid + '/' + semester);\n\t},\n\tgetLvsAndMas(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getLvsAndMas/' + uid)\n\t},\n\tgetMitarbeiterLv(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getMitarbeiterLv/' + id)\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/pruefung/getNoten');\n\t},\n\tcheckZeugnisnoteLv(data){\n\t\treturn \tthis.$fhcApi.post('api/frontend/v1/stv/pruefung/checkZeugnisnoteLv/', data)\n\t},\n\taddPruefung(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/insertPruefung/', data);\n\t},\n\tupdatePruefung(form, id, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/pruefung/updatePruefung/' + id, data);\n\t},\n\tdeletePruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/pruefung/deletePruefung/' + id)\n\t}\n}","export default {\n\n\tgetAbschlusspruefung (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);\n\t},\n\taddNewAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/insertAbschlusspruefung/', data\n\t\t);\n\t},\n\tloadAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});\n\t},\n\tupdateAbschlusspruefung(form, data) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/', data\n\t\t);\n\t},\n\tdeleteAbschlusspruefung(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});\n\t},\n\tgetTypenAbschlusspruefung(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');\n\t},\n\tgetTypenAntritte(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');\n\t},\n\tgetBeurteilungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');\n\t},\n\tgetAkadGrade(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});\n\t},\n\tgetTypStudiengang(studiengang_kz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});\n\t},\n\tgetMitarbeiter(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);\n\t},\n\tgetPruefer(searchString){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);\n\t},\n\tgetNoten(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');\n\t},\n\tcheckForExistingExams(uids) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/checkForExistingExams/', {uids}\n\t\t);\n\t}\n}","export default {\n\tlist() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/grades/list');\n\t},\n\tgetCertificate(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getCertificate/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetTeacherProposal(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getTeacherProposal/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tgetRepeaterGrades(prestudent_id, studiensemester_kurzbz) {\n\t\tlet url = 'api/frontend/v1/stv/grades/getRepeaterGrades/' + encodeURIComponent(prestudent_id);\n\t\tif (!!studiensemester_kurzbz) {\n\t\t\turl = url + '/' + encodeURIComponent(studiensemester_kurzbz);\n\t\t}\n\t\treturn this.$fhcApi.get(url);\n\t},\n\tupdateCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, note, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/updateCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz,\n\t\t\t\tnote\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tdeleteCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/deleteCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyTeacherProposalToCertificate({lehrveranstaltung_id, student_uid, studiensemester_kurzbz, lehrveranstaltung_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyTeacherProposalToCertificate',\n\t\t\t{\n\t\t\t\tlehrveranstaltung_id,\n\t\t\t\tstudent_uid,\n\t\t\t\tstudiensemester_kurzbz\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lehrveranstaltung_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tcopyRepeaterGradeToCertificate({studierendenantrag_lehrveranstaltung_id, lv_bezeichnung}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/stv/grades/copyRepeaterGradeToCertificate',\n\t\t\t{\n\t\t\t\tstudierendenantrag_lehrveranstaltung_id\n\t\t\t},\n\t\t\t{\n\t\t\t\terrorHeader: lv_bezeichnung\n\t\t\t}\n\t\t);\n\t},\n\tgetGradeFromPoints(points, lehrveranstaltung_id, studiensemester_kurzbz, manualErrorHandling) {\n\t\tconst config = manualErrorHandling ? {errorHandling: false} : {};\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/grades/getGradeFromPoints',\n\t\t\t{\n\t\t\t\t\"points\": points,\n\t\t\t\t\"lehrveranstaltung_id\": lehrveranstaltung_id,\n\t\t\t\t\"studiensemester_kurzbz\": studiensemester_kurzbz\n\t\t\t},\n\t\t\tconfig\n\t\t\t);\n\t}\n}","export default {\n\tgetMobilitaeten (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getMobilitaeten/' + params.id);\n\t},\n\tgetProgramsMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getProgramsMobility/');\n\t},\n\taddNewMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/insertMobility/', data);\n\t},\n\tloadMobility(bisio_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/loadMobility/' + bisio_id);\n\t},\n\tupdateMobility(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/mobility/updateMobility/', data);\n\t},\n\tdeleteMobility(bisio_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobility/' + bisio_id);\n\t},\n\tgetLVList(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLVList/' + studiengang_kz);\n\t},\n\tgetAllLehreinheiten(data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/getAllLehreinheiten/', data)\n\t},\n\tgetLvsandLesByStudent(uid){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getLvsandLesByStudent/' + uid);\n\t},\n\tgetPurposes(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getPurposes/' + params.id);\n\t},\n\tgetSupports(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getSupports/' + params.id);\n\t},\n\tgetListPurposes() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListPurposes/');\n\t},\n\tgetListSupports() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/mobility/getListSupports/');\n\t},\n\tdeleteMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilityPurpose/' + params.bisio_id, params);\n\t},\n\taddMobilityPurpose(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilityPurpose/' + params.bisio_id, params);\n\t},\n\tdeleteMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/deleteMobilitySupport/' + params.bisio_id, params);\n\t},\n\taddMobilitySupport(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/mobility/addMobilitySupport/' + params.bisio_id, params);\n\t},\n\n}","export default {\n\ttabulatorConfig(config, self) {\n\t\tconfig.ajaxURL = 'api/frontend/v1/stv/archiv/get';\n\t\tconfig.ajaxParams = () => {\n\t\t\tconst params = {\n\t\t\t\tperson_id: self.modelValue.person_id || self.modelValue.map(e => e.person_id)\n\t\t\t};\n\t\t\treturn params;\n\t\t};\n\t\tconfig.ajaxRequestFunc = (url, config, params) => this.$fhcApi.post(url, params, config);\n\t\tconfig.ajaxResponse = (url, params, response) => response.data;\n\n\t\treturn config;\n\t},\n\tgetArchivVorlagen() {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/getArchivVorlagen');\n\t},\n\tarchive(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archive',\n\t\t\tdata\n\t\t);\n\t},\n\tarchiveSigned(data) {\n\t\treturn this.$fhcApi.post(\n\t\t\t'api/frontend/v1/documents/archiveSigned',\n\t\t\tdata\n\t\t);\n\t},\n\tupdate(data) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/update', data);\n\t},\n\tdelete({akte_id, studiengang_kz}) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/archiv/delete', {akte_id, studiengang_kz});\n\t}\n};\n","export default {\n\tgetDocumentsUnaccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tgetDocumentsAccepted(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDocumentsAccepted/' + params.id + '/' + params.studiengang_kz);\n\t},\n\tdeleteZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteZuordnung/' + params.prestudent_id + '/' + params.dokument_kurzbz);\n\t},\n\tcreateZuordnung(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/createZuordnung/'\n\t\t\t+ params.prestudent_id + '/'\n\t\t\t+ params.dokument_kurzbz);\n\t},\n\tloadAkte(akte_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/loadAkte/' + akte_id);\n\t},\n\tgetDoktypen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/dokumente/getDoktypen/');\n\t},\n\tupdateFile(akte_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/updateAkte/' + akte_id,\n\t\t\tdata);\n\t},\n\tdeleteFile(akte_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/deleteAkte/' + akte_id);\n\t},\n\tuploadFile(prestudent_id, data){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/dokumente/uploadDokument/' + prestudent_id,\n\t\t\tdata);\n\t},\n}","export default {\n\tgetAnrechnungen(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getAnrechnungen/' + params.id);\n\t},\n\tgetLehrveranstaltungen(prestudent_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLehrveranstaltungen/' + prestudent_id);\n\t},\n\tgetBegruendungen(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getBegruendungen/');\n\t},\n\tgetLvsKompatibel(lv_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLvsKompatibel/' + lv_id);\n\t},\n\tgetLektoren(studiengang_kz){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/getLektoren/' + studiengang_kz);\n\t},\n\taddNewAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/insertAnrechnung/', data);\n\t},\n\tloadAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/anrechnungen/loadAnrechnung/' + anrechnung_id);\n\t},\n\teditAnrechnung(form, data){\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/stv/anrechnungen/updateAnrechnung/', data);\n\t},\n\tdeleteAnrechnung(anrechnung_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/anrechnungen/deleteAnrechnung/' + anrechnung_id);\n\t},\n}","export default {\n\tgetStudies(url, config, params) {\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);\n\t},\n\tgetTypenMobility(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');\n\t},\n\tgetStudyprograms(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');\n\t},\n\tgetListPartner(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');\n\t},\n\tgetStatiPrestudent(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');\n\t},\n\tloadStudy(id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);\n\t},\n\tinsertStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);\n\t},\n\tupdateStudy(form, data){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);\n\t},\n\tdeleteStudy(id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);\n\t},\n\n}","export default {\n\tgetCourselist(url, config, params) {\n\t\t//corresponding logic controller Stundenplan.php\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStundenplan/'\n\t\t\t+ params.student_uid + '/'\n\t\t\t+ params.start_date + '/'\n\t\t\t+ params.end_date + '/'\n\t\t\t+ params.group_consecutiveHours + '/'\n\t\t\t+ params.dbStundenplanTable\n\t\t);\n\t},\n\tgetStudiensemester(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/stv/LvTermine/getStudiensemester/');\n\t},\n}","export default {\n\tgetNotizen (url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getUid/');\n\t},\n\taddNewNotiz(form, id, formData) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPerson/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(form, notiz_id, formData){\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/notiz/notizPerson/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/getMitarbeiter/' + event);\n\t},\n\tisBerechtigt(id, type_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPerson/isBerechtigt/');\n\t}\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizPrestudent/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizPrestudent/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizMitarbeiter/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizMitarbeiter/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/NotizProjekt/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/NotizProjekt/getMitarbeiter/' + event);\n\t}\n}","import person from \"./notiz/person.js\";\nimport prestudent from \"./notiz/prestudent.js\";\nimport mitarbeiter from \"./notiz/mitarbeiter.js\";\nimport projekt from \"./notiz/projekt.js\";\nimport anrechnung from \"./notiz/anrechnung.js\";\nimport bestellung from \"./notiz/bestellung.js\";\nimport lehreinheit from \"./notiz/lehreinheit.js\";\nimport projektphase from \"./notiz/projektphase.js\";\nimport projekttask from \"./notiz/projekttask.js\";\n\n\nexport default {\n\tperson,\n\tprestudent,\n\tmitarbeiter,\n\tanrechnung,\n\tbestellung,\n\tlehreinheit,\n\tprojekt,\n\tprojektphase,\n\tprojekttask,\n}\n","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizAnrechnung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizAnrechnung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizBestellung/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizBestellung/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizLehreinheit/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizLehreinheit/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjektphase/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjektphase/getMitarbeiter/' + event);\n\t}\n}","export default {\n\tgetNotizen(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getNotizen/' + params.id + '/' + params.type);\n\t},\n\tgetUid(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getUid/');\n\t},\n\taddNewNotiz(id, formData) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/addNewNotiz/' + id,\n\t\t\tformData\n\t\t);\n\t},\n\tloadNotiz(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadNotiz/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tloadDokumente(notiz_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/loadDokumente/', {\n\t\t\tnotiz_id\n\t\t});\n\t},\n\tdeleteNotiz(notiz_id, type_id, id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/deleteNotiz/', {\n\t\t\tnotiz_id,\n\t\t\ttype_id,\n\t\t\tid\n\t\t});\n\t},\n\tupdateNotiz(notiz_id, formData){\n\t\treturn this.$fhcApi.post('api/frontend/v1/notiz/notizProjekttask/updateNotiz/' + notiz_id,\n\t\t\tformData\n\t\t);\n\t},\n\tgetMitarbeiter(event){\n\t\treturn this.$fhcApi.get('api/frontend/v1/notiz/notizProjekttask/getMitarbeiter/' + event);\n\t}\n}","import person from \"./betriebsmittel/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\tgetAllBetriebsmittel(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/' + params.type + '/' + params.id);\n\t},\n\taddNewBetriebsmittel(form, person_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/' +\n\t\t\tperson_id, formData\n\t\t);\n\t},\n\tloadBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/' + betriebsmittelperson_id);\n\t},\n\tupdateBetriebsmittel(form, betriebsmittelperson_id, formData) {\n\t\treturn this.$fhcApi.post(form, 'api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/' + betriebsmittelperson_id,\n\t\t\tformData);\n\t},\n\tdeleteBetriebsmittel(betriebsmittelperson_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/betriebsmittel/betriebsmittelP/deleteBetriebsmittel/' +\tbetriebsmittelperson_id);\n\t},\n\tgetTypenBetriebsmittel(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/getTypenBetriebsmittel/');\n\t},\n\tloadInventarliste(query){\n\t\treturn this.$fhcApi.get('api/frontend/v1/betriebsmittel/betriebsmittelP/loadInventarliste/' +\tquery);\n\t}\n}","export default {\n\tupdatePersonUnrulyStatus(person_id, unrulyParam) {\n\n\t\ttry {\n\t\t\tconst payload = {person_id, unruly: unrulyParam}\n\t\t\tconst url = '/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus';\n\t\t\treturn this.$fhcApi.post(url, payload, null);\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t},\n\tfilterPerson(payload, base = ''){\n\n\t\ttry {\n\t\t\tconst url = base + '/api/frontend/v1/checkperson/CheckPerson/filterPerson';\n\t\t\treturn axios.post(url, payload)\n\t\t} catch (error) {\n\t\t\tthrow error;\n\t\t}\n\n\t}\n}","export default {\n getContentID(ort_kurbz) {\n\t\treturn this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Ort/ContentID\",\n\t\t\t{ ort_kurzbz: ort_kurbz }\n\t\t);\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getRooms\",\n\t\t\t{ datum, von, bis, typ, personenanzahl }\n\t\t);\n\t},\n\tgetRoomTypes() {\n\t\treturn this.$fhcApi.get(\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root +\n\t\t\tFHC_JS_DATA_STORAGE_OBJECT.ci_router +\n\t\t\t\"/api/frontend/v1/Ort/getTypes\"\n\t\t);\n\t}\n}","export default {\n content(content_id, version=null, sprache=null, sichtbar=null) {\n return this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/content\",\n\t\t\t{ \n\t\t\t\tcontent_id: content_id,\n\t\t\t\t...(version?{version}:{}),\n\t\t\t\t...(sprache?{sprache}:{}),\n\t\t\t\t...(sichtbar?{sichtbar}:{}),\n }\n );\n },\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNews\",\n\t\t\t{\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache,\n\t\t\t},\n\t\t);\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/news\",\n\t\t\t{\n\t\t\t\tlimit: limit\n\t\t\t}\n\t\t);\n\t},\n\tgetNewsRowCount: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getNewsRowCount\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetNewsExtra: function(){\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Cms/getStudiengangInfoForNews\",\n\t\t\t{}\n\t\t);\n\t}\n }","export default {\n getStudentenMail(lehreinheit_id) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n \"/api/frontend/v1/Lehre/lvStudentenMail\",\n { lehreinheit_id: lehreinheit_id }\n );\n },\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id){\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t\t, {}\n\t\t);\n\t}\n }","export default {\n getLvMenu(lvid, studiensemester_kurzbz) {\n return this.$fhcApi.get(\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`,\n {}\n );\n },\n\n \n }","import person from \"./messages/person.js\";\n\nexport default {\n\tperson\n}","export default {\n\t\tgetMessages(url, config, params) {\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessages/' + params.id + '/' + params.type + '/' + params.size + '/' + params.page);\n\t\t},\n\t\tgetVorlagen(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getVorlagen/');\n\t\t},\n\t\tgetMsgVarsLoggedInUser(){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsLoggedInUser/');\n\t\t},\n\t\tgetMessageVarsPerson(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMessageVarsPerson/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetMsgVarsPrestudent(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getMsgVarsPrestudent/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPersonId(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getPersonId/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetUid(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getUid/'+ params.id + '/' + params.type_id);\n\t\t},\n\t\tgetDataVorlage(vorlage_kurzbz){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz);\n\t\t},\n\t\tgetNameOfDefaultRecipient(params){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getNameOfDefaultRecipient/' + params.id + '/' + params.type_id);\n\t\t},\n\t\tgetPreviewText(params, data){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/getPreviewText/' + params.id + '/' + params.type_id,\n\t\t\t\tdata);\n\t\t},\n\t\tgetReplyData(messageId){\n\t\t\treturn this.$fhcApi.get('api/frontend/v1/messages/messages/getReplyData/' + messageId);\n\t\t},\n\t\tsendMessageFromModalContext(form, id, data) {\n\t\t\treturn this.$fhcApi.post(form,'api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tsendMessage(id, data) {\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/sendMessage/' + id,\n\t\t\t\tdata);\n\t\t},\n\t\tdeleteMessage(messageId){\n\t\t\treturn this.$fhcApi.post('api/frontend/v1/messages/messages/deleteMessage/' + messageId);\n\t\t}\n}","export default {\n\tgetVorlagen() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagen/');\n\t},\n\tgetVorlagenByLoggedInUser() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/');\n\t}\n}","export default {\n\n\tgetStudiensemester: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/components/Cis/Mylv/Studiensemester',\n\t\t\t{}\n\t\t);\n\t},\n\n\tgetAllStudienSemester: function (studiensemester=undefined, studiengang=undefined, semester=undefined, studienplan=undefined) {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/Studium/getStudienAllSemester',\n\t\t\t{studiensemester, studiengang, semester, studienplan}\n\t\t);\n\t},\n\n\tgetStudiengaengeForStudienSemester: function (studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudiengaengeForStudienSemester/${studiensemester}`,\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudienplaeneBySemester: function (studiengang, studiensemester) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getStudienplaeneBySemester`,\n\t\t\t{\n\t\t\t\tstudiengang,\n\t\t\t\tstudiensemester,\n\t\t\t}\n\t\t);\n\t},\n\tgetLvPlanForStudiensemester: function (studiensemester, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/LvPlan/getLvPlanForStudiensemester/${studiensemester}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\tgetLvEvaluierungInfo: function (studiensemester_kurzbz, lvid) {\n\t\treturn this.$fhcApi.get(\n\t\t\t`/api/frontend/v1/Studium/getLvEvaluierungInfo/${studiensemester_kurzbz}/${lvid}`,\n\t\t\t{\n\t\t\t}\n\t\t);\n\t},\n\t\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport search from \"./search.js\";\nimport phrasen from \"./phrasen.js\";\nimport navigation from \"./navigation.js\";\nimport filter from \"./filter.js\";\nimport studstatus from \"./studstatus.js\";\nimport profil from \"./profil.js\";\nimport profilUpdate from \"./profilUpdate.js\";\nimport lvPlan from \"./lvPlan.js\";\nimport bookmark from \"./bookmark.js\";\nimport stv from \"./stv.js\";\nimport notiz from \"./notiz.js\";\nimport betriebsmittel from \"./betriebsmittel.js\";\nimport checkperson from \"./checkperson.js\";\nimport ampeln from \"./ampeln.js\";\nimport ort from \"./ort.js\";\nimport cms from \"./cms.js\";\nimport lehre from \"./lehre.js\";\nimport addons from \"./addons.js\";\nimport messages from \"./messages.js\";\nimport vorlagen from \"./vorlagen.js\";\nimport studiengang from \"./studiengang.js\";\nimport menu from \"./menu.js\";\nimport dashboard from \"./dashboard.js\";\nimport authinfo from \"./authinfo.js\";\nimport vertraege from \"./vertraege.js\";\nimport studium from \"./studium.js\";\nimport language from \"./language.js\";\n\nexport default {\n search,\n phrasen,\n navigation,\n dashboard,\n filter,\n studstatus,\n profil,\n profilUpdate,\n lvPlan,\n bookmark,\n stv,\n notiz,\n betriebsmittel,\n checkperson,\n ampeln,\n ort,\n cms,\n lehre,\n addons,\n messages,\n vorlagen,\n addons,\n\tstudiengang,\n\tmenu,\n\tauthinfo,\n\tvertraege,\n\tstudium,\n\tlanguage\n};\n","export default {\n\tasync getViewData() {\n\t\tconst url = `/api/frontend/v1/Cis4FhcApi/getViewData`;\n\t\treturn this.$fhcApi.get(url, null, null)\n\t},\n}","export default {\n\n getBookmarks: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/getBookmarks`\n ,{}\n );\n },\n \n delete: function (bookmark_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Bookmark/delete/${bookmark_id}`\n ,{}\n ); \n },\n\n\tupdate: function ({ bookmark_id, url, title, tag=null}) {\n\t\treturn this.$fhcApi.post(\n\t\t\t`/api/frontend/v1/Bookmark/update/${bookmark_id}`\n\t\t\t, {\n\t\t\t\turl: url,\n\t\t\t\ttitle: title\n\t\t\t}\n\t\t);\n\t},\n\n insert: function ({url, title, tag}) {\n return this.$fhcApi.post(\n `/api/frontend/v1/Bookmark/insert`\n ,{\n url: url,\n title: title,\n tag: tag\n }\n ); \n },\n}","export default {\n \n open: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/open`,{});\n },\n\n all: function () {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/all`,{});\n },\n\n confirm: function (ampel_id) {\n return this.$fhcApi.get(\n `/api/frontend/v1/Ampeln/confirm/${ampel_id}`,{});\n },\n\n}","export default {\n\tstudiengangInformation: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/Studgang/getStudiengangInfo\",\n\t\t\t{}\n\t\t);\n\t},\n\tgetStudiengangByKz: function (studiengang_kz) {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz\",\n\t\t\t{\n\t\t\t\t\"studiengang_kz\": studiengang_kz\n\t\t\t}\n\t\t);\n\t}\n}","export default {\n\tgetMenu: function () {\n\t\treturn this.$fhcApi.get(\n\t\t\t\"/api/frontend/v1/CisMenu/getMenu\",\n\t\t\t{}\n\t\t);\n\t}\n\n}","\nexport default {\n\tgetAuthUID() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthUID',\n\t\t\t{ }\n\t\t);\n\t},\n\tgetAuthInfo() {\n\t\treturn this.$fhcApi.get(\n\t\t\t'/api/frontend/v1/AuthInfo/getAuthInfo',\n\t\t\t{}\n\t\t);\n\t},\n};","import person from \"./vertraege/person.js\";\n\nexport default {\n\tperson,\n\tconfigPrintDocument() {\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/config/printDocument');\n\t}\n}","export default {\n\tgetAllVertraege(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllVertraege/' + params.person_id);\n\t},\n\tgetAllContractsNotAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + params.person_id);\n\t},\n\tgetAllContractsAssigned(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsAssigned/' + params.person_id + '/' + params.vertrag_id);\n\t},\n\tgetAllContractsNotAssigned2(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractsNotAssigned/' + person_id);\n\t},\n\tgetStatiOfContract(url, config, params){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getStatiOfContract/' + params.vertrag_id);\n\t},\n\tgetAllContractTypes(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractTypes/');\n\t},\n\tgetAllContractStati(){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getAllContractStati/');\n\t},\n\taddNewContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/addNewContract/', data);\n\t},\n\tloadContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContract/' + vertrag_id);\n\t},\n\tupdateContract(form, data) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContract/', data);\n\t},\n\tdeleteContract(vertrag_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContract/' + vertrag_id);\n\t},\n\tloadContractStatus(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/loadContractStatus/' + params.vertrag_id, params);\n\t},\n\tinsertContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/insertContractStatus/' + params.vertrag_id, params);\n\t},\n\tupdateContractStatus(form, params) {\n\t\treturn this.$fhcApi.post(form,'api/frontend/v1/vertraege/vertraege/updateContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteContractStatus(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteContractStatus/' + params.vertrag_id, params);\n\t},\n\tdeleteLehrauftrag(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteLehrauftrag/' + params.vertrag_id, params);\n\t},\n\tdeleteBetreuung(params) {\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/deleteBetreuung/' + params.vertrag_id, params);\n\t},\n\tgetMitarbeiter(params){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getMitarbeiter/');\n\t},\n\tgetHeader(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getHeader/' + person_id);\n\t},\n\tgetPersonAbteilung(person_id){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getPersonAbteilung/' + person_id);\n\t},\n\tgetLeitungOrg(oekurzbz){\n\t\treturn this.$fhcApi.post('api/frontend/v1/vertraege/vertraege/getLeitungOrg/' + oekurzbz);\n\t},\n\tgetMitarbeiterUid(person_id){\n\t\treturn this.$fhcApi.get('api/frontend/v1/vertraege/vertraege/getMitarbeiterUid/' + person_id);\n\t},\n\n}","/**\n * Copyright (C) 2024 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAll() {\n\t\treturn this.$fhcApi.get('/api/frontend/v1/language/get');\n\t}\n};","/** TODO(chris):\n * when deleting this file be sure to\n * remove line 1 & 90 from ../plugins/Phrasen.js\n */\nimport FhcApiFactory from '../api/fhcapifactory.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$fhcApi) {\n\t\t\t/* Deprecated Code start */\n\t\t\tif (options?.factory) {\n\t\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\t\tapp.config.globalProperties.$fhcApi.factory.addEndpoints(options.factory);\n\t\t\t}\n\t\t\t/* Deprecated Code end */\n\t\t\treturn;\n\t\t}\n\n\t\tfunction _get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\n\t\tfunction _clean_return_value(response) {\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = {response};\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tconst baseURL = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\";\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(response => {\n\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\treturn _clean_return_value(response);\n\n\t\t\t// NOTE(chris): loop through errors\n\t\t\tif (response.data.errors)\n\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t);\n\n\t\t\treturn _clean_return_value(response);\n\t\t}, error => {\n\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\n\t\t\tif (error.config?.errorHandling == 'off'\n\t\t\t\t|| error.config?.errorHandling === false\n\t\t\t\t|| error.config?.errorHandling == 'success')\n\t\t\t\treturn Promise.reject(error);\n\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL, true);\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t\t}\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\terror.response.data.errors = error.response.data.errors.filter(\n\t\t\t\t\terr => (error.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$fhcApi._defaultErrorHandlers[err.type])(err, error.config)\n\t\t\t\t);\n\t\t\t\tif (!error.response.data.errors.length)\n\t\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else if (error.request) {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('error', error.message, error.request.responseURL);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t} else {\n\t\t\t\tapp.config.globalProperties.$fhcAlert.alertError(error.message);\n\t\t\t\treturn Promise.reject({...{handled: true}, ...error});\n\t\t\t}\n\n\t\t\treturn Promise.reject(error);\n\t\t});\n\n\t\tapp.config.globalProperties.$fhcApi = {\n\t\t\tgetUri(url) {\n\t\t\t\tconsole.warn('$fhcApi.getUri is DEPRECATED! Use $api.getUri instead.');\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\tconsole.warn('$fhcApi.get is DEPRECATED! Use $api.get instead.');\n\t\t\t\t[uri, params, config] = _get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\tconsole.warn('$fhcApi.post is DEPRECATED! Use $api.post instead.');\n\t\t\t\t[uri, data, config] = _get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\t_defaultErrorHandlers: {\n\t\t\t\tvalidation(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form) {\n\t\t\t\t\t\tconfig.form.clearValidation();\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.messages);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tif (Array.isArray(error.messages)) {\n\t\t\t\t\t\terror.messages.forEach($fhcAlert.alertError);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (typeof error.messages == 'object') {\n\t\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t\tObject.values(error.messages).forEach(\n\t\t\t\t\t\t\t\tvalue => $fhcAlert.alertDefault(\n\t\t\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tObject.entries(error.messages).forEach(\n\t\t\t\t\t\t\t\t([key, value]) => $fhcAlert.alertDefault('error', key, value, true)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t\tgeneral(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tif (config?.form)\n\t\t\t\t\t\tconfig.form.setFeedback(false, error.message);\n\t\t\t\t\telse if (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertError(error.message);\n\t\t\t\t},\n\t\t\t\tphp(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('warn', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t$fhcAlert.alertDefault('info', 'PHP ' + error.severity, message, true);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texception(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tdb(error) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t$fhcAlert.alertSystemError(message);\n\t\t\t\t},\n\t\t\t\tauth(error, config) {\n\t\t\t\t\tconst $fhcAlert = app.config.globalProperties.$fhcAlert;\n\n\t\t\t\t\tvar message = '';\n\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\t\t\t\t\tif (config?.errorHeader)\n\t\t\t\t\t\t$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\tArray.isArray(config.errorHeader) ? app.config.globalProperties.$p.t.apply(null, config.errorHeader) : config.errorHeader,\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\t$fhcAlert.alertDefault('error', error.message, message);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/* Deprecated Code start */\n\t\tclass FhcApiFactoryWrapper {\n\t\t\tconstructor(factorypart, root) {\n\t\t\t\tif (root === undefined) {\n\t\t\t\t\tthis.$fhcApi = {\n\t\t\t\t\t\tgetUri(url) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.getUri(url);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget(form, uri, params, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.get(form, uri, params, config);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpost(form, uri, data, config) {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.post(form, uri, data, config);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(this.$fhcApi, 'factory', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tconsole.warn('$fhcApi.factory is DEPRECATED!');\n\t\t\t\t\t\t\treturn app.config.globalProperties.$fhcApi.factory;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tapp.config.globalProperties.$fhcApi.factory = this;\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(this, '$fhcApi', {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\treturn (root || this).$fhcApi;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.addEndpoints(factorypart, true)\n\t\t\t}\n\n\t\t\taddEndpoints(factorypart, noWarn) {\n\t\t\t\tObject.keys(factorypart).forEach(key => {\n\t\t\t\t\tObject.defineProperty(this, key, {\n\t\t\t\t\t\tget() {\n\t\t\t\t\t\t\tif (typeof factorypart[key] == 'function')\n\t\t\t\t\t\t\t\treturn factorypart[key].bind(this);\n\t\t\t\t\t\t\treturn new FhcApiFactoryWrapper(factorypart[key], this.$fhcApi.factory);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tif (!noWarn) console.warn('$fhcApi.factory.addEndpoints() is DEPRECATED!');\n\t\t\t}\n\t\t}\n\n\t\tconst factory = new FhcApiFactoryWrapper(FhcApiFactory);\n\t\tif (options?.factory) {\n\t\t\tconsole.warn(\"$fhcApi is DEPRECATED!\");\n\t\t\tfactory.addEndpoints(options.factory);\n\t\t}\n\n\t\tapp.config.globalProperties.$fhcApi.factory = factory;\n\t\t/* Deprecated Code end */\n\t\t\n\t\tapp.provide('$fhcApi', app.config.globalProperties.$fhcApi);\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n//--------------------------------------------------------------------------------------------------------------------\n// Configs\n\n// To see debug messages into the browser console set this parameter as true\nconst CORE_REST_CLIENT_DEBUG = false;\n\n// Default timeout (milliseconds)\nconst CORE_REST_CLIENT_TIMEOUT = 5000;\n\n//--------------------------------------------------------------------------------------------------------------------\n// Constants\n\n// Success\nconst CORE_REST_CLIENT_SUCCESS = 0;\n\n// Properties present in a response\nconst CORE_REST_CLIENT_ERROR = \"error\";\nconst CORE_REST_CLIENT_RETVAL = \"retval\";\n\n// HTTP method parameters\nconst CRC_HTTP_GET_METHOD = \"get\";\nconst CRC_HTTP_POST_METHOD = \"post\";\n\n/**\n * Definition and initialization of the object CoreRESTClient\n */\nexport const CoreRESTClient = {\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Public methods\n\n\t/**\n\t * Performs a call using the HTTP GET method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tget: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_GET_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Performs a call using the HTTP POST method\n\t * wsParameters is an object\n\t * axiosParameters is an object\n\t */\n\tpost: function(wsURL, wsParameters, axiosParameters = null) {\n\t\treturn CoreRESTClient._axiosCall(wsURL, wsParameters, CRC_HTTP_POST_METHOD, axiosParameters);\n\t},\n\n\t/**\n\t * Checks if the response is a success\n\t */\n\tisSuccess: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR)\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL) && response.error == CORE_REST_CLIENT_SUCCESS)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Checks if the response is an error\n\t */\n\tisError: function(response) {\n\t\treturn !CoreRESTClient.isSuccess(response);\n\t},\n\n\t/**\n\t * Checks if the response has data\n\t */\n\thasData: function(response) {\n\n\t\tif (CoreRESTClient.isSuccess(response))\n\t\t{\n\t\t\tif ((typeof response[CORE_REST_CLIENT_RETVAL] === \"object\" && Object.keys(response[CORE_REST_CLIENT_RETVAL]).length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"array\" && response[CORE_REST_CLIENT_RETVAL].length > 0)\n\t\t\t\t|| (typeof response[CORE_REST_CLIENT_RETVAL] === \"string\" && response[CORE_REST_CLIENT_RETVAL].trim() != \"\")\n\t\t\t\t|| typeof response[CORE_REST_CLIENT_RETVAL] === \"number\")\n\t\t\t{\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Retrives data from response object\n\t */\n\tgetData: function(response) {\n\n\t\tif (CoreRESTClient.hasData(response))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn null;\n\t},\n\n\t/**\n\t * Retrives error message from response object\n\t */\n\tgetError: function(response) {\n\n\t\tif (typeof response === \"object\"\n\t\t\t&& Object.keys(response).length > 0\n\t\t\t&& response.hasOwnProperty(CORE_REST_CLIENT_RETVAL))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_RETVAL];\n\t\t}\n\n\t\treturn \"Generic error\";\n\t},\n\n\t/**\n\t * Retrives code from response object\n\t */\n\tgetErrorCode: function(response) {\n\n\t\tif (typeof response === \"object\" && response.hasOwnProperty(CORE_REST_CLIENT_ERROR))\n\t\t{\n\t\t\treturn response[CORE_REST_CLIENT_ERROR];\n\t\t}\n\n\t\treturn 1; // Generic error\n\t},\n\n\t//------------------------------------------------------------------------------------------------------------------\n\t// Private methods\n\n\t/**\n\t * Generate the router URI using the connection parameters\n\t */\n\t_generateRouterURI: function(wsURL) {\n\t\tvar uri = null;\n\n\t\t// Checks if global JS object FHC_JS_DATA_STORAGE_OBJECT exists\n\t\tif (typeof FHC_JS_DATA_STORAGE_OBJECT !== \"undefined\")\n\t\t{\n\t\t\turi = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/\" + wsURL;\n\t\t}\n\n\t\treturn uri;\n\t},\n\n\t/**\n\t * Method to print debug info after a controller has been called\n\t */\n\t_printDebug: function(parameters, response, errorThrown) {\n\n\t\tif (CORE_REST_CLIENT_DEBUG === true) // If global const CORE_REST_CLIENT_DEBUG is true, but really true!\n\t\t{\n\t\t\t// Print info about called controller\n\t\t\tconsole.log(\"Called controller: \" + parameters.remoteController);\n\t\t\tconsole.log(\"Call parameters:\"); // parameters given to this call\n\t\t\tconsole.log(parameters);\n\n\t\t\tif (response != null) // if there is a response...\n\t\t\t{\n\t\t\t\tconsole.log(\"Controller Response:\");\n\t\t\t\tconsole.log(response); // ...print it\n\t\t\t}\n\t\t\tif (errorThrown != null) // if there is a jQuery error...\n\t\t\t{\n\t\t\t\tconsole.log(\"jQuery error:\");\n\t\t\t\tconsole.log(errorThrown); // ...print it\n\t\t\t}\n\t\t\tconsole.log(\"--------------------------------------------------------------------------------------------\");\n\t\t}\n\t},\n\n\t/**\n\t * Performs a call to the server were the CI PHP layer is running\n\t * - wsURL: alias of the core controller to call\n\t * - wsParameters: parameters to give to the called controller\n\t * - type: POST or GET HTTP method\n\t * - axiosParameters: an object to configure the axios call\n\t */\n\t_axiosCall: function(wsURL, wsParameters, type, axiosParameters) {\n\n\t\t// Axios config object\n\t\tlet axiosCallObj = {\n\t\t\tmethod: type,\n\t\t\turl: CoreRESTClient._generateRouterURI(wsURL),\n\t\t\ttimeout: CORE_REST_CLIENT_TIMEOUT // default time out\n\t\t};\n\n\t\t// The ajax call is HTTP GET\n\t\tif (type == CRC_HTTP_GET_METHOD)\n\t\t{\n\t\t\taxiosCallObj.params = wsParameters;\n\t\t}\n\t\t// The ajax call is HTTP POST\n\t\telse\n\t\t{\n\t\t\taxiosCallObj.data = wsParameters;\n\t\t}\n\n\t\t// Check if axiosParameters is an object\n\t\tif (typeof axiosParameters === \"object\")\n\t\t{\n\t\t\t// And then copies the its properties into axiosCallObj\n\t\t\tfor (var prop in axiosParameters) axiosCallObj[prop] = axiosParameters[prop];\n\t\t}\n\n\t\t// Perform the ajax call via axios\n\t\treturn axios(axiosCallObj);\n\t}\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n * \n * @usage:\n * Preperations:\n * Be sure to have PrimeVue loaded with the toast and confirmdialog\n * components as primevue variable\n * Install:\n * Import this Plugin and install it with the app.use() function.\n * Use:\n * In your component you can call now the global property $fhcAlert\n * which has the following functions:\n * \n * alertSuccess\n * ------------\n * Displays a success message\n * @param string\tmessage\n * @return void\n * \n * alertInfo\n * ---------\n * Displays an info message\n * @param string\tmessage\n * @return void\n * \n * alertWarning\n * ------------\n * Displays a warning\n * @param string\tmessage\n * @return void\n * \n * alertError\n * ----------\n * Displays an error\n * @param string\tmessage\n * @return void\n * \n * alertSystemError\n * ----------------\n * Displays an alert with the error details and a button to mail\n * the error to the Support Team\n * @param string\tmessage\n * @return void\n * \n * confirmDelete\n * -------------\n * Displays a confirmation dialog and returns a Promise which resolves\n * with true or false depending und the pressed button.\n * @return Promise\n * \n * alertDefault\n * ------------\n * Displays an alert\n * @param string\tseverity\t\tcan be 'success', 'info', 'warning', 'error'\n * @param string\ttitle\n * @param string\tmessage\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * alertMultiple\n * -------------\n * Displays multiple alerts\n * @param array\t\tmessageArray\n * @param string\tseverity\t\t(optional) defaults to 'info'\n * @param string\ttitle\t\t\t(optional) defaults to 'Info'\n * @param boolean\tsticky\t\t\t(optional) defaults to false\n * @return void\n * \n * handleSystemError\n * -----------------\n * Automatiticly determine how to display an system error and display it.\n * This would be used in a catch block of an ajax call.\n * @param mixed\t\terror\n * @return void\n * \n * handleSystemMessage\n * -------------------\n * Automatiticly determine how to display a message and display it.\n * @param mixed\t\tmessage\n * @return void\n */\nimport PvConfig from \"../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js\";\nimport PvToast from \"../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js\";\nimport PvConfirm from \"../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js\";\nimport PvConfirmationService from \"../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js\";\nimport FhcPhrasen from \"./Phrasen.js\";\n\nimport {CoreRESTClient} from '../RESTClient.js';\n\nconst helperAppContainer = document.createElement('div');\n\nconst helperApp = Vue.createApp({\n\tname: \"FhcAlertApp\",\n\tcomponents: {\n\t\tPvToast,\n\t\tPvConfirm\n\t},\n\tmethods: {\n\t\tmailToUrl(slotProps) {\n\t\t\tlet mailTo = FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto;\n\t\t\tlet subject = 'Meldung%20Systemfehler';\n\t\t\tlet body = `\n\t\t\t\tDanke, dass Sie uns den Fehler melden. %0D%0A %0D%0A\n\t\t\t\tBitte beschreiben Sie uns ausführlich das Problem.%0D%0A\n\t\t\t\tBsp: Ich habe X ausgewählt und Y angelegt. Beim Speichern erhielt ich die Fehlermeldung. [Optional: Ich habe den Browser Z verwendet.]%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tPROBLEM: ... %0D%0A %0D%0A %0D%0A\n\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A\n\t\t\t\tFehler URL: ` + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method + `%0D%0A\n\t\t\t\tFehler Meldung: ` + slotProps.message.detail + `%0D%0A\n\t\t\t\t-----------------------------------------------------------------------------------------------------------------------------------%0D%0A %0D%0A\n\t\t\t\tWir kümmern uns um eine rasche Behebung des Problems!`\n\n\t\t\treturn \"mailto:\" + mailTo + \"?subject=\" + subject + \"&body=\" + body;\n\t\t},\n\t\topenMessagecard(e) {\n\t\t\tbootstrap.Collapse.getOrCreateInstance(e.target.getAttribute('href')).toggle();\n\t\t}\n\t},\n\tunmounted() {\n\t\thelperAppContainer.parentElement.removeChild(helperAppContainer);\n\t},\n\tcomputed: {\n\t\tshowmaillink: function() {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.systemerror_mailto !== '';\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\n\t\n\t\t\n\t\n\t`\n});\n\nhelperApp.use(PvConfig);\nhelperApp.use(PvConfirmationService);\n//helperApp.use(FhcPhrasen);\n\nconst helperAppInstance = helperApp.mount(helperAppContainer);\n\ndocument.body.appendChild(helperAppContainer);\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!app.config.globalProperties.$p)\n\t\t\tapp.use(FhcPhrasen);\n\n\t\tconst $fhcAlert = {\n\t\t\talertSuccess(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSuccess);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'success', summary: 'Info', detail: message, life: 1000});\n\t\t\t},\n\t\t\talertInfo(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertInfo);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'info', summary: 'Info', detail: message, life: 3000 });\n\t\t\t},\n\t\t\talertWarning(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertWarning);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'warn', summary: 'Achtung', detail: message});\n\t\t\t},\n\t\t\talertError(message) {\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertError);\n\t\t\t\thelperAppInstance.$refs.toast.add({ severity: 'error', summary: 'Achtung', detail: message });\n\t\t\t},\n\t\t\talertSystemError(message) {\n\t\t\t\t//TODO(Manu) for translation of content of template: restructure in data\n\t\t\t\t//and update definitions with translations\n\n\t\t\t\tif (Array.isArray(message))\n\t\t\t\t\treturn message.forEach(this.alertSystemError);\n\t\t\t\thelperAppInstance.$refs.alert.add({\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t\tsummary: Vue.computed(() => app.config.globalProperties.$p.t('alert/systemerror')),\n\t\t\t\t\tdetail: message});\n\t\t\t},\n\t\t\tconfirmDelete() {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: 'fhcAlertConfirm',\n\t\t\t\t\t\theader: Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: Vue.computed(() => app.config.globalProperties.$p.t('alert/confirm_delete')),\n\t\t\t\t\t\tacceptLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/loeschen')),\n\t\t\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\t\t\trejectLabel: Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: 'p-button-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\tconfirm(options) {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\thelperAppInstance.$confirm.require({\n\t\t\t\t\t\tgroup: options?.group ?? 'fhcAlertConfirm',\n\t\t\t\t\t\theader: options?.header ?? Vue.computed(() => app.config.globalProperties.$p.t('alert/attention')),\n\t\t\t\t\t\tmessage: options?.message ?? '',\n\t\t\t\t\t\tacceptLabel: options?.acceptLabel ?? 'Ok',\n\t\t\t\t\t\tacceptClass: options?.acceptClass ?? 'btn btn-primary',\n\t\t\t\t\t\trejectLabel: options?.rejectLabel ?? Vue.computed(() => app.config.globalProperties.$p.t('ui/abbrechen')),\n\t\t\t\t\t\trejectClass: options?.rejectClass ?? 'btn btn-outline-secondary',\n\t\t\t\t\t\taccept() {\n\t\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t\t},\n\t\t\t\t\t\treject() {\n\t\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\talertDefault(severity, title, message, sticky = false, html = false) {\n\t\t\t\tlet options = { severity: severity, summary: title, detail: message, html };\n\t\t\t\t\n\t\t\t\tif (!sticky)\n\t\t\t\t\toptions.life = 3000;\n\n\t\t\t\thelperAppInstance.$refs.toast.add(options);\n\t\t\t},\n\t\t\talertMultiple(messageArray, severity = 'info', title = 'Info', sticky = false, html = false){\n\t\t\t\t// Check, if array has only string values\n\t\t\t\tif (messageArray.every(message => typeof message === 'string')) {\n\t\t\t\t\tmessageArray.forEach(message => this.alertDefault(severity, title, message, sticky, html));\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\thandleSystemError(error) {\n\t\t\t\t// don't show an error message to the user if the error was an aborted request\n\t\t\t\tif(error.hasOwnProperty('name') && error.name.toLowerCase() === \"AbortError\".toLowerCase())\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is string\n\t\t\t\tif (typeof error === 'string')\n\t\t\t\t\treturn $fhcAlert.alertSystemError(error);\n\n\t\t\t\t// Error is array of strings\n\t\t\t\tif (Array.isArray(error) && error.every(err => typeof err === 'string'))\n\t\t\t\t\treturn error.every($fhcAlert.alertSystemError);\n\n\t\t\t\t// Error has been handled already\n\t\t\t\tif (error.hasOwnProperty('handled') && error.handled)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\t// Error is object\n\t\t\t\tif (typeof error === 'object' && error !== null) {\n\t\t\t\t\tlet errMsg = '';\n\n\n\t\t\t\t\tif (error.hasOwnProperty('response') && error.response?.data?.retval)\n\t\t\t\t\t\terrMsg += 'Error Message: ' + (error.response.data.retval.message || error.response.data.retval) + '\\r\\n';\n\t\t\t\t\telse if (error.hasOwnProperty('message'))\n\t\t\t\t\t\terrMsg += 'Error Message: ' + error.message.toUpperCase() + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('config') && error.config.hasOwnProperty('url'))\n\t\t\t\t\t\terrMsg += 'Error ConfigURL: ' + error.config.url + '\\r\\n';\n\n\t\t\t\t\tif (error.hasOwnProperty('stack'))\n\t\t\t\t\t\terrMsg += 'Error Stack: ' + error.stack + '\\r\\n';\n\t\t\t\t\t\n\t\t\t\t\t// Fallback object error message\n\t\t\t\t\tif (errMsg == '')\n\t\t\t\t\t\terrMsg = 'Error Message: ' + JSON.stringify(error) + '\\r\\n';\n\n\t\t\t\t\terrMsg += 'Error Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\n\t\t\t\t\treturn $fhcAlert.alertSystemError(errMsg);\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\thandleSystemMessage(message) {\n\t\t\t\t// Message is string\n\t\t\t\tif (typeof message === 'string')\n\t\t\t\t\treturn $fhcAlert.alertWarning(message);\n\n\t\t\t\t// Message is array of strings\n\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t// If Array has only Strings\n\t\t\t\t\tif (message.every(msg => typeof msg === 'string'))\n\t\t\t\t\t\treturn message.every($fhcAlert.alertWarning);\n\n\t\t\t\t\t// If Array has only Objects\n\t\t\t\t\tif (message.every(msg => typeof msg === 'object') && msg !== null) {\n\t\t\t\t\t\treturn message.every(msg => {\n\t\t\t\t\t\t\tif (msg.hasOwnProperty('data') && msg.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(msg.data.retval));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(msg));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Message is Object with data property\n\t\t\t\tif (typeof message === 'object' && message !== null){\n\t\t\t\t\tif (message.hasOwnProperty('data') && message.data.hasOwnProperty('retval')) {\n\t\t\t\t\t\t// NOTE(chris): changed: alertSystemError => alertWarning\n\t\t\t\t\t\t$fhcAlert.alertWarning(JSON.stringify(message.data.retval));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$fhcAlert.alertSystemError(JSON.stringify(message));\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fallback\n\t\t\t\t$fhcAlert.alertSystemError('alertSystemError throws Generic Error\\r\\nError Controller Path: ' + FHC_JS_DATA_STORAGE_OBJECT.called_path + '/' + FHC_JS_DATA_STORAGE_OBJECT.called_method);\n\t\t\t},\n\t\t\tresetFormValidation(form) {\n\t\t\t\tconst event = new Event('fhc-form-reset');\n\t\t\t\tform.querySelectorAll(['[data-fhc-form-validate],[data-fhc-form-error]']).forEach(el => el.dispatchEvent(event));\n\t\t\t\t/*const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\tif (alert) {\n\t\t\t\t\talert.innerHTML = '';\n\t\t\t\t\talert.classList.add('d-none');\n\t\t\t\t}\n\t\t\t\tform.querySelectorAll('.invalid-feedback').forEach(n => n.remove());\n\t\t\t\tform.querySelectorAll('.is-invalid').forEach(n => n.classList.remove('is-invalid'));\n\t\t\t\tform.querySelectorAll('.is-valid').forEach(n => n.classList.remove('is-valid'));*/\n\t\t\t},\n\t\t\thandleFormValidation(error, form) {\n\t\t\t\tif (form === undefined) {\n\t\t\t\t\tif (error && error.nodeType === Node.ELEMENT_NODE)\n\t\t\t\t\t\treturn err => $fhcAlert.handleFormValidation(err, error);\n\t\t\t\t} else {\n\t\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t\tif (typeof errors !== \"object\")\n\t\t\t\t\t\t\terrors = error.response.data;\n\n\t\t\t\t\t\t// NOTE(chris): reset form validation\n\t\t\t\t\t\t$fhcAlert.resetFormValidation(form);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// NOTE(chris): set form input validation\n\t\t\t\t\t\tconst notFound = Object.entries(errors).filter(([key, detail]) => {\n\t\t\t\t\t\t\tconst input = form.querySelector('[data-fhc-form-validate=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\tinput.dispatchEvent(new CustomEvent('fhc-form-invalidate', {detail}));\n\n\t\t\t\t\t\t\t/*const input = form.querySelector('[name=\"' + key + '\"]');\n\t\t\t\t\t\t\tif (!input)\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\tinput.classList.add('is-invalid');\n\t\t\t\t\t\t\tconst feedback = document.createElement('div');\n\t\t\t\t\t\t\tfeedback.classList.add('invalid-feedback');\n\t\t\t\t\t\t\tfeedback.innerHTML = detail;\n\t\t\t\t\t\t\tinput.after(feedback);*/\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}).map(arr => arr[1]);\n\n\n\t\t\t\t\t\t//const alert = form.querySelector('div.alert.alert-danger[role=\"alert\"]');\n\t\t\t\t\t\tconst alert = form.querySelector('[data-fhc-form-error]');\n\t\t\t\t\t\tif (alert && notFound.length) {\n\t\t\t\t\t\t\talert.dispatchEvent(new CustomEvent('fhc-form-error', {detail: notFound}));\n\t\t\t\t\t\t\t/*notFound.forEach(txt => {\n\t\t\t\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\t\t\t\tp.innerHTML = txt;\n\t\t\t\t\t\t\t\talert.append(p);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (notFound.length) {\n\t\t\t\t\t\t\t\talert.lastChild.classList.add('mb-0');\n\t\t\t\t\t\t\t\talert.classList.remove('d-none');\n\t\t\t\t\t\t\t}*/\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnotFound.forEach($fhcAlert.alertError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (error?.response?.status == 400) {\n\t\t\t\t\tlet errors = CoreRESTClient.getError(error.response.data);\n\t\t\t\t\t$fhcAlert.alertError((typeof errors === 'object') ? Object.values(errors) : errors);\n\t\t\t\t} else {\n\t\t\t\t\t$fhcAlert.handleSystemError(error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tapp.config.globalProperties.$fhcAlert = $fhcAlert;\n\t\tapp.provide('$fhcAlert', app.config.globalProperties.$fhcAlert);\n\t}\n}","import FhcAlert from './FhcAlert.js';\n\n\nexport default {\n\tinstall: (app, options) => {\n\t\tif (app.config.globalProperties.$api) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!app.config.globalProperties.$fhcAlert)\n\t\t\tapp.use(FhcAlert);\n\n\t\tfunction _send_array_or_object(errors, func) {\n\t\t\tif (Array.isArray(errors))\n\t\t\t\terrors.forEach(func);\n\t\t\telse\n\t\t\t\tObject.entries(errors).forEach(\n\t\t\t\t\t([title, errs]) => errs.forEach(\n\t\t\t\t\t\terror => func(error, title)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t}\n\t\tlet DEFAULT_ERROR_CONFIG = {\n\t\t\tsuccess: true,\n\t\t\tfail: true,\n\t\t\tcombine: {\n\t\t\t\tform: ['validation', 'general'],\n\t\t\t\ttoast: ['validation', 'general', 'not_found', 'site_failed']\n\t\t\t},\n\t\t\thandler: {\n\t\t\t\tform(form, errors) {\n\t\t\t\t\tform.clearValidation();\n\t\t\t\t\terrors.forEach(err => form.setFeedback(\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\terr.messages || err.message\n\t\t\t\t\t));\n\t\t\t\t},\n\t\t\t\tasync toast(errors) {\n\t\t\t\t\tconst $p = app.config.globalProperties.$p;\n\t\t\t\t\tif (!$p)\n\t\t\t\t\t\treturn Promise.reject('Phrasen plugin not loaded!');\n\t\t\t\t\n\t\t\t\t\tasync function _format_toast(errors) {\n\t\t\t\t\t\terrors = errors.reduce((result, err) => {\n\t\t\t\t\t\t\tswitch (err.type) {\n\t\t\t\t\t\t\tcase 'not_found':\n\t\t\t\t\t\t\tcase 'site_failed':\n\t\t\t\t\t\t\t\tif (err.message)\n\t\t\t\t\t\t\t\t\tresult[err.message] = [err.url];\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tresult._default = [err.url];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'general':\n\t\t\t\t\t\t\t\tif (!result._default)\n\t\t\t\t\t\t\t\t\tresult._default = [];\n\t\t\t\t\t\t\t\tresult._default.push(err.message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'validation':\n\t\t\t\t\t\t\t\tObject.entries(err.messages)\n\t\t\t\t\t\t\t\t\t.forEach(([field, msg]) => {\n\t\t\t\t\t\t\t\t\t\tif (!result[field])\n\t\t\t\t\t\t\t\t\t\t\tresult[field] = [];\n\t\t\t\t\t\t\t\t\t\tif (Array.isArray(msg))\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(...msg);\n\t\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\t\tresult[field].push(msg);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}, {});\n\t\t\t\t\t\tlet counter = 0;\n\t\t\t\t\t\tconst msgs = await Promise.all(Object.entries(errors)\n\t\t\t\t\t\t\t.sort((a, b) => ['_default'].indexOf(b[0]) - ['_default'].indexOf(a[0])) // sort _default first\n\t\t\t\t\t\t\t.map(async ([field, msgs]) => {\n\t\t\t\t\t\t\t\tif (field == '_default') {\n\t\t\t\t\t\t\t\t\tawait $p.loadCategory('dashboard');\n\t\t\t\t\t\t\t\t\tconst general = $p.t('dashboard/general');\n\t\t\t\t\t\t\t\t\tfield = '
    ' + general + '
    ';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield = '
    ' + field + '
    ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcounter += msgs.length;\n\t\t\t\t\t\t\t\treturn field\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('
    ')\n\t\t\t\t\t\t\t\t\t+ '
    ';\n\t\t\t\t\t\t\t}));\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tcounter,\n\t\t\t\t\t\t\tmsgs\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet counter, msgs;\n\t\t\t\t\tif (Array.isArray(errors)) {\n\t\t\t\t\t\t({ counter, msgs } = await _format_toast(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t({ counter, msgs } = await Object.entries(errors)\n\t\t\t\t\t\t\t.reduce(async (res, [title, errs]) => {\n\t\t\t\t\t\t\t\tconst result = await res;\n\t\t\t\t\t\t\t\tconst { counter, msgs } = await _format_toast(errs);\n\t\t\t\t\t\t\t\tresult.counter += counter;\n\t\t\t\t\t\t\t\tresult.msgs.push('
    '\n\t\t\t\t\t\t\t\t\t+ title\n\t\t\t\t\t\t\t\t\t+ '
    '\n\t\t\t\t\t\t\t\t\t+ msgs.join('')\n\t\t\t\t\t\t\t\t\t+ '
    ');\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}, Promise.resolve({ counter: 0, msgs: []})));\n\t\t\t\t\t}\n\n\t\t\t\t\tawait $p.loadCategory('ui');\n\t\t\t\t\tconst n_errors = $p.t('ui/n_errors', { n: counter });\n\n\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t'error',\n\t\t\t\t\t\tn_errors,\n\t\t\t\t\t\t'
    ' + msgs.join('') + '
    ',\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tphp(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch (error.severity) {\n\t\t\t\t\t\t\tcase 'Warning':\n\t\t\t\t\t\t\tcase 'Core Warning':\n\t\t\t\t\t\t\tcase 'Compile Warning':\n\t\t\t\t\t\t\tcase 'User Warning':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('warn', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'Notice':\n\t\t\t\t\t\t\tcase 'User Notice':\n\t\t\t\t\t\t\tcase 'Runtime Notice':\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\ttitle += ': PHP ' + error.severity;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\ttitle = 'PHP ' + error.severity;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault('info', title, message, true);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tmessage = 'Type: PHP ' + error.severity + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\t\t\tmessage = title + '\\n\\n' + message;\n\t\t\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texception(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Type: ' + error.class + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\t\t\t\t\t\tif (error.backtrace && error.backtrace.length) {\n\t\t\t\t\t\t\tmessage += '\\nBacktrace: ';\n\t\t\t\t\t\t\terror.backtrace.forEach(err => {\n\t\t\t\t\t\t\t\tmessage += '\\n\\tFile: ' + err.file + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tLine: ' + err.line + '\\n';\n\t\t\t\t\t\t\t\tmessage += '\\tFunction: ' + err.function + '\\n';\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdb(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\tmessage += title + '\\n\\n';\n\t\t\t\t\t\tif (error.heading !== undefined)\n\t\t\t\t\t\t\tmessage += error.heading + '\\n\\n';\n\t\t\t\t\t\tif (error.code !== undefined)\n\t\t\t\t\t\t\tmessage += 'Code: ' + error.code + '\\n\\n';\n\t\t\t\t\t\tif (error.sql !== undefined)\n\t\t\t\t\t\t\tmessage += 'SQL: ' + error.sql + '\\n\\n';\n\t\t\t\t\t\tif (error.message !== undefined)\n\t\t\t\t\t\t\tmessage += 'Message: ' + error.message + '\\n\\n';\n\t\t\t\t\t\telse if (error.messages !== undefined)\n\t\t\t\t\t\t\tmessage += 'Messages: ' + error.messages.join('\\n\\t') + '\\n\\n';\n\t\t\t\t\t\tif (error.filename !== undefined)\n\t\t\t\t\t\t\tmessage += 'Filename: ' + error.filename + '\\n';\n\t\t\t\t\t\tif (error.line !== undefined)\n\t\t\t\t\t\t\tmessage += 'Line Number: ' + error.line + '\\n';\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertSystemError(message);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tauth(errors) {\n\t\t\t\t\t_send_array_or_object(errors, (error, title) => {\n\t\t\t\t\t\tif (title)\n\t\t\t\t\t\t\ttitle += ': ' + error.message;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttitle = error.message;\n\n\t\t\t\t\t\tvar message = '';\n\t\t\t\t\t\tmessage += 'Controller name: ' + error.controller + '\\n';\n\t\t\t\t\t\tmessage += 'Method name: ' + error.method + '\\n';\n\t\t\t\t\t\tmessage += 'Required permissions: ' + error.required_permissions;\n\n\t\t\t\t\t\tapp.config.globalProperties.$fhcAlert.alertDefault(\n\t\t\t\t\t\t\t'error',\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (options?.errorHandling !== undefined)\n\t\t\tDEFAULT_ERROR_CONFIG = _merge_error_config(options.errorHandling);\n\t\t\n\t\tfunction get_config(form, uri, data, config) {\n\t\t\tif (typeof form == 'string' && config === undefined) {\n\t\t\t\t[uri, data, config] = [form, uri, data];\n\t\t\t\tform = undefined;\n\t\t\t} else if (form) {\n\t\t\t\tif (typeof form != 'object')\n\t\t\t\t\tthrow new TypeError('Parameter 1 of _get_config must be an object or a string');\n\t\t\t\tif (uri === undefined && data === undefined && config === undefined) {\n\t\t\t\t\tconfig = form;\n\t\t\t\t\tform = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (form) {\n\t\t\t\t// NOTE(chris): check if form is fhc-form\n\t\t\t\tif (!form.clearValidation || !form.setFeedback)\n\t\t\t\t\tthrow new TypeError(\"'form' is not a Form Component\");\n\n\t\t\t\tform = {\n\t\t\t\t\tclearValidation: form.clearValidation,\n\t\t\t\t\tsetFeedback: form.setFeedback\n\t\t\t\t};\n\n\t\t\t\tif (config)\n\t\t\t\t\tconfig.form = form;\n\t\t\t\telse\n\t\t\t\t\tconfig = {form};\n\t\t\t}\n\n\t\t\treturn [uri, data, config];\n\t\t}\n\t\tfunction clean_return_value(response) {\n\t\t\tif (typeof response.data === 'string' || response.data instanceof String)\n\t\t\t\treturn clean_return_value({ data: response });\n\n\t\t\tconst result = response.data;\n\t\t\tdelete response.data;\n\t\t\tif (!result)\n\t\t\t\treturn {meta: {response}, data: null};\n\t\t\tif (!result.meta)\n\t\t\t\tresult.meta = { response };\n\t\t\telse\n\t\t\t\tresult.meta.response = response;\n\t\t\treturn result;\n\t\t}\n\t\tfunction _merge_error_config(config) {\n\t\t\tif (config === false || config === 'off')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false, fail: false };\n\t\t\t\n\t\t\tif (!config || config === true)\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tif (config === 'success')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, fail: false };\n\t\t\t\n\t\t\tif (config === 'fail')\n\t\t\t\treturn { ...DEFAULT_ERROR_CONFIG, success: false };\n\t\t\t\n\t\t\tconst { success, fail, handler, combine } = config;\n\t\t\t\n\t\t\tconfig = { ...DEFAULT_ERROR_CONFIG };\n\n\t\t\tObject.entries({ fail, success }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = value;\n\t\t\t});\n\t\t\tObject.entries({ handler, combine }).forEach(([key, value]) => {\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tconfig[key] = { ...config[key], ...value };\n\t\t\t});\n\n\t\t\treturn config;\n\t\t}\n\t\tfunction get_error_handler(config) {\n\t\t\tconst result = _merge_error_config(config?.errorHandling);\n\n\t\t\tif (!config?.form) {\n\t\t\t\tresult.combine = { ...result.combine, form: [] };\n\t\t\t} else {\n\t\t\t\tconst formHandler = result.handler.form;\n\t\t\t\tresult.handler = { ...result.handler, form: errors => formHandler(config.form, errors) };\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t\tfunction get_error_list(error) {\n\t\t\tif (error.response) {\n\t\t\t\tif (error.response.status == 404) {\n\t\t\t\t\treturn [{\n\t\t\t\t\t\ttype: 'not_found',\n\t\t\t\t\t\tmessage: error.message,\n\t\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t\t}];\n\t\t\t\t} else {\n\t\t\t\t\tif (error.response.data.errors == undefined) return [];\n\t\t\t\t\treturn error.response.data.errors;\n\t\t\t\t}\n\t\t\t} else if (error.request) {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'site_failed',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\turl: error.request.responseURL\n\t\t\t\t}];\n\t\t\t} else {\n\t\t\t\treturn [{\n\t\t\t\t\ttype: 'script',\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}];\n\t\t\t}\n\t\t}\n\t\tfunction popHandleableErrors(errorHandling, errors) {\n\t\t\tconst result = {};\n\t\t\tconst copy = [];\n\n\t\t\tif (errors == undefined) return {};\n\n\t\t\twhile (errors.length)\n\t\t\t\tcopy.push(errors.pop());\n\t\t\tfor (var error of copy) {\n\t\t\t\tlet type = error.type;\n\t\t\t\tlet newType = null;\n\t\t\t\tfor (var t in errorHandling.combine) {\n\t\t\t\t\tlet newTypeCombinesType = errorHandling\n\t\t\t\t\t\t.combine[t]\n\t\t\t\t\t\t.includes(type);\n\t\t\t\t\tlet newTypeHasHandler = errorHandling.handler[t];\n\t\t\t\t\tif (newTypeCombinesType && newTypeHasHandler) {\n\t\t\t\t\t\tnewType = t;\n\t\t\t\t\t\tif (newType == 'form')\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (newType)\n\t\t\t\t\ttype = newType;\n\t\t\t\tconst handler = errorHandling.handler[type];\n\t\t\t\tif (handler) {\n\t\t\t\t\tif (!result[type])\n\t\t\t\t\t\tresult[type] = [];\n\t\t\t\t\tif (Array.isArray(error))\n\t\t\t\t\t\tresult[type].push(...error);\n\t\t\t\t\telse\n\t\t\t\t\t\tresult[type].push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\terrors.push(error);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\t\n\t\t\n\t\tconst fhcApiAxios = axios.create({\n\t\t\ttimeout: 500000,\n\t\t\tbaseURL: FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ \"/\"\n\t\t});\n\n\t\tfhcApiAxios.interceptors.request.use(config => {\n\t\t\tif (config.method != 'post' || !config.data)\n\t\t\t\treturn config;\n\n\t\t\tif (config.data instanceof FormData)\n\t\t\t\treturn config;\n\n\t\t\tif (!Object.values(config.data).every(item => {\n\t\t\t\tif (item instanceof FileList)\n\t\t\t\t\treturn false;\n\t\t\t\tif (Array.isArray(item))\n\t\t\t\t\treturn item.every(i => !(i instanceof File));\n\t\t\t\treturn true;\n\t\t\t})) {\n\t\t\t\tconst newData = Object.entries(config.data).reduce((nd, [key, item]) => {\n\t\t\t\t\tif (item instanceof FileList) {\n\t\t\t\t\t\tfor (const file of item)\n\t\t\t\t\t\t\tnd.FormData.append(key + (item.length > 1 ? '[]' : ''), file);\n\t\t\t\t\t} else if (Array.isArray(item)) {\n\t\t\t\t\t\tif (item.every(i => !(i instanceof File))) {\n\t\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titem.forEach(file => nd.FormData.append(key + (item.length > 1 ? '[]' : ''), file));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnd.jsondata[key] = item;\n\t\t\t\t\t}\n\t\t\t\t\treturn nd;\n\t\t\t\t}, {\n\t\t\t\t\tFormData: new FormData(),\n\t\t\t\t\tjsondata: {}\n\t\t\t\t});\n\t\t\t\tnewData.FormData.append('_jsondata', JSON.stringify(newData.jsondata));\n\t\t\t\tconfig.data = newData.FormData;\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\n\t\tfhcApiAxios.interceptors.response.use(\n\t\t\tresponse => {\n\t\t\t\tif (response.config?.errorHandling == 'off'\n\t\t\t\t\t|| response.config?.errorHandling === false\n\t\t\t\t\t|| response.config?.errorHandling == 'fail')\n\t\t\t\t\treturn clean_return_value(response);\n\n\t\t\t\t// NOTE(chris): loop through errors\n\t\t\t\tif (response.data.errors)\n\t\t\t\t\tresponse.data.errors = response.data.errors.filter(\n\t\t\t\t\t\terr => (response.config[err.type + 'ErrorHandler'] || app.config.globalProperties.$api._defaultErrorHandlers[err.type])(err, response.config)\n\t\t\t\t\t);\n\n\t\t\t\treturn clean_return_value(response);\n\t\t\t},\n\t\t\terror => {\n\t\t\t\tif (error.code == 'ERR_CANCELED')\n\t\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\n\t\t\t\tconst errorConfig = get_error_handler(error.config);\n\n\t\t\t\tif (!errorConfig.fail)\n\t\t\t\t\treturn Promise.reject(error);\n\n\t\t\t\tconst remaining = get_error_list(error);\n\n\t\t\t\tconst errors = popHandleableErrors(errorConfig, remaining);\n\n\t\t\t\tfor (var type in errors) {\n\t\t\t\t\terrorConfig.handler[type](errors[type]);\n\t\t\t\t}\n\n\t\t\t\tif (remaining.length)\n\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\n\t\t\t\treturn Promise.reject({ handled: true, ...error });\n\t\t\t}\n\t\t);\n\n\t\tapp.config.globalProperties.$api = {\n\t\t\tgetUri(url) {\n\t\t\t\treturn fhcApiAxios.getUri({url});\n\t\t\t},\n\t\t\tget(form, uri, params, config) {\n\t\t\t\t[uri, params, config] = get_config(form, uri, params, config);\n\t\t\t\tif (params) {\n\t\t\t\t\tif (config)\n\t\t\t\t\t\tconfig.params = params;\n\t\t\t\t\telse\n\t\t\t\t\t\tconfig = {params};\n\t\t\t\t}\n\t\t\t\treturn fhcApiAxios.get(uri, config);\n\t\t\t},\n\t\t\tpost(form, uri, data, config) {\n\t\t\t\t[uri, data, config] = get_config(form, uri, data, config);\n\t\t\t\treturn fhcApiAxios.post(uri, data, config);\n\t\t\t},\n\t\t\tcall(factory, configoverwrite, form) {\n\t\t\t\tif (Array.isArray(factory)) {\n\t\t\t\t\tconst $api = app.config.globalProperties.$api;\n\n\t\t\t\t\treturn Promise\n\t\t\t\t\t\t.allSettled(factory.map((config, index) => {\n\t\t\t\t\t\t\tif (!Array.isArray(config))\n\t\t\t\t\t\t\t\tconfig = ['#' + index, config];\n\t\t\t\t\t\t\treturn $api.call(config[1], {\n\t\t\t\t\t\t\t\terrorHeader: config[0],\n\t\t\t\t\t\t\t\terrorHandling: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.then(result => {\n\t\t\t\t\t\t\tconst [ , , config ] = get_config(form, undefined, undefined, configoverwrite || {});\n\t\t\t\t\t\t\tconst errorConfig = get_error_handler(config);\n\n\t\t\t\t\t\t\tif (!errorConfig.success && !errorConfig.fail) {\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst typedErrors = {};\n\t\t\t\t\t\t\tfor (var res of result) {\n\t\t\t\t\t\t\t\tconst [ allowed, item ] = res.status === 'fulfilled'\n\t\t\t\t\t\t\t\t\t? [ errorConfig.success, res.value ]\n\t\t\t\t\t\t\t\t\t: [ errorConfig.fail, res.reason ];\n\t\t\t\t\t\t\t\tif (!allowed)\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\tconst errors = popHandleableErrors(errorConfig, get_error_list(item));\n\n\t\t\t\t\t\t\t\tfor (var type in errors) {\n\t\t\t\t\t\t\t\t\tif (!typedErrors[type])\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type] = {\n\t\t\t\t\t\t\t\t\t\t\t[item.config.errorHeader]: errors[type]\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\ttypedErrors[type][item.config.errorHeader] = errors[type];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tfor (var errType in typedErrors) {\n\t\t\t\t\t\t\t\terrorConfig.handler[errType](typedErrors[errType]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tlet { method, url, params, config } = factory;\n\t\t\t\tif (configoverwrite !== undefined) {\n\t\t\t\t\tconfig = configoverwrite;\n\t\t\t\t}\n\t\t\t\tif (!method) {\n\t\t\t\t\tmethod = 'get';\n\t\t\t\t}\n\t\t\t\tif (method.toLowerCase)\n\t\t\t\t\tmethod = method.toLowerCase();\n\t\t\t\tif (method == 'get') {\n\t\t\t\t\treturn this.get(form, url, params, config);\n\t\t\t\t} else if (method == 'post') {\n\t\t\t\t\treturn this.post(form, url, params, config);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"FhcApi: method not allowed:\", method);\n\t\t\t\t}\n\t\t\t},\n\t\t\tgetErrorHandler(config) {\n\t\t\t\treturn get_error_handler(config);\n\t\t\t}\n\t\t};\n\n\t\tapp.provide('$api', app.config.globalProperties.$api);\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tloadCategory(category) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/loadModule/' + category\n\t\t};\n\t},\n\tsetLanguage(categories,language) {\n\t\tconst params = {categories, language}\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/phrasen/setLanguage',\n\t\t\tparams\n\t\t};\n\t},\n\tgetLanguage() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getLanguage'\n\t\t};\n\t},\n\tgetActiveDbLanguages() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/phrasen/getAllLanguages'\n\t\t};\n\t}\n};","import OldFhcApi from '../plugin/OldFhcApi.js'; // TODO(chris): remove at some point\nimport PluginsApi from './Api.js';\nimport ApiPhrasen from '../api/factory/phrasen.js';\n\nconst categories = Vue.reactive({});\nconst loadingModules = {};\nlet user_language = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language);\nexport let user_locale = Vue.computed(()=>{\n\tif(!user_language.value) return null;\n\treturn FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(language => language.sprache == user_language.value).LC_Time;\n});\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\nconst phrasen = {\n\tuser_language,\n\tuser_locale,\n\tsetLanguage(language) {\n\t\tconst catArray = Object.keys(categories)\n\t\treturn this.config.globalProperties.$api\n\t\t\t.call(ApiPhrasen.setLanguage(catArray, language))\n\t\t\t.then(res => {\n\t\t\t\tres.data.forEach(row => {\n\t\t\t\t\tcategories[row.category][row.phrase] = row.text\n\t\t\t\t})\n\n\t\t\t\t// update the reactive data that holds the current active user_language\n\t\t\t\tuser_language.value = language;\n\n\t\t\t\treturn res\n\t\t\t})\n\t},\n\tloadCategory(category) {\n\t\tif (Array.isArray(category))\n\t\t\treturn Promise.all(category.map(this.config.globalProperties\n\t\t\t\t.$p.loadCategory));\n\n\t\tif (!loadingModules[category])\n\t\t\tloadingModules[category] = this.config.globalProperties.$api\n\t\t\t\t.call(ApiPhrasen.loadCategory(category))\n\t\t\t\t.then(res => res?.data ? extractCategory(res.data, category) : {})\n\t\t\t\t.then(res => {\n\t\t\t\t\tcategories[category] = res;\n\t\t\t\t});\n\t\treturn loadingModules[category];\n\t},\n\tt_ref(category, phrase, params) {\n\t\tconsole.warn('deprecated');\n\t\treturn Vue.computed(() => this.t(category, phrase, params));\n\t},\n\tt(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input', category, phrase, params);\n\t\t\treturn '';\n\t\t}\n\t\tlet val = Vue.computed(() => {\n\t\t\tif (!categories[category])\n\t\t\t\treturn '';\n\t\t\treturn getValueForLoadedPhrase(category, phrase, params);\n\t\t});\n\t\tif (!categories[category])\n\t\t\tthis.loadCategory(category);\n\t\treturn val.value;\n\t}\n};\n\nexport default {\n\tinstall(app, options) {\n\t\tif (!app.config.globalProperties.$fhcApi)\n\t\t\tapp.use(OldFhcApi); // TODO(chris): remove at some point\n\t\tif (!app.config.globalProperties.$api)\n\t\t\tapp.use(PluginsApi);\n\t\tapp.config.globalProperties.$p = {\n\t\t\tt: phrasen.t,\n\t\t\tloadCategory: cat => phrasen.loadCategory.call(app, cat),\n\t\t\tsetLanguage: lang => phrasen.setLanguage.call(app, lang),\n\t\t\tuser_language: user_language,\n\t\t\tuser_locale,\n\t\t\tt_ref: phrasen.t_ref\n\t\t};\n\t\tapp.provide('$p', app.config.globalProperties.$p);\n\t}\n}","let theme_name = Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.theme.name);\nconst theme_modes = FHC_JS_DATA_STORAGE_OBJECT.theme.modes;\n\nconst toggleTheme = (theme)=>{\n\tif (!theme) return;\n\n\tfor (const theme of theme_modes) {\n\t\tdocument.documentElement.classList.remove(theme);\n\t}\n\ttheme_name.value = theme;\n\tdocument.documentElement.classList.add(theme);\n\n\tdocument.body.setAttribute(\"data-bs-theme\", theme);\n\n\tlet stylesheet = document.querySelector('link[href*=\"primevue/resources/themes\"]');\n\tif (theme == \"dark\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-light-blue\", \"bootstrap4-dark-blue\");\n\t} else if (theme == \"light\") {\n\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\telse{\n\t\tif (stylesheet.attributes.href.value.includes(\"bootstrap4-dark-blue\"))\n\t\t\tstylesheet.attributes.href.value = stylesheet.attributes.href.value.replace(\"bootstrap4-dark-blue\", \"bootstrap4-light-blue\");\n\t}\n\n\tlocalStorage.setItem(\"theme\", theme);\n}\n\nconst initializeTheme = ()=>{\n\t\n\tlet theme = localStorage.getItem(\"theme\");\n\tif (!theme || !theme_modes.includes(theme)) {\n\t\t// set the first theme mode as default\n\t\ttheme = theme_modes[0];\n\t\tlocalStorage.setItem(\"theme\",theme);\n\t}\n\ttoggleTheme(theme);\n}\n\n\nexport default {\n\tinstall: (app,options)=>{\n\t\t\n\t\tdocument.documentElement.classList.add(theme_name.value);\n\n\t\tinitializeTheme();\n\n\t\tapp.config.globalProperties.$theme = {\n\t\t\ttheme_name,\n\t\t\ttheme_modes,\n\t\t\tswitchTheme: (theme) => {\n\t\t\t\ttoggleTheme(theme);\n\t\t\t}, \n\t\t} \n\t}\n}","const rgbToHex = (value) => {\n\tconst hex = value.toString(16);\n\treturn hex.length === 1 ? '0' + hex : hex;\n};\n\nfunction getContrastYIQ(hexcolor) {\n\t\n\tvar r = parseInt(hexcolor.substring(1, 3), 16);\n\tvar g = parseInt(hexcolor.substring(3, 5), 16);\n\tvar b = parseInt(hexcolor.substring(5, 7), 16);\n\tvar yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n\treturn (yiq >= 128) ? 'black' : 'white';\n}\n\nexport default {\n\tmounted(element, binding){\n\t\tconst bgColor = window.getComputedStyle(element).backgroundColor;\n\t\tlet rgbRegEx = new RegExp(/^rgba?\\s*\\(([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,?\\s*([0-9]+.?[0-9]?)?\\s*\\)/);\n\t\tlet isRgb = bgColor.match(rgbRegEx);\n\t\tif (isRgb) {\n\t\t\tif (isRgb.length < 3) {\n\t\t\t\tconsole.error(\"Invalid RGB color format\");\n\t\t\t}\n\t\t\tlet r = parseInt(isRgb[1], 10);\n\t\t\tlet g = parseInt(isRgb[2], 10);\n\t\t\tlet b = parseInt(isRgb[3], 10);\n\t\t\tlet hexColor = `#${rgbToHex(r)}${rgbToHex(g)}${rgbToHex(b)}`;\n\t\t\telement.style.color = getContrastYIQ(hexColor);\n\t\t}\n\t\telse\n\t\t{\n\t\t\telement.style.color = getContrastYIQ(bgColor);\n\t\t}\n\t},\n}","/**\n * TODO(chris): This is only a prototype!!!\n */\n\nconst TYPE_DEFINITION = {\n\tlehreinheit: {\n\t\tid: \"lehreinheit_id\",\n\t\tdragIcon: \"fa-solid fa-chalkboard-user\",\n\t\textras: [\n\t\t\t\"stundenblockung\"\n\t\t]\n\t},\n\tvevent: {\n\t\tid: \"uid\",\n\t\tdragIcon: \"fa-solid fa-calendar\",\n\t\textras: [\n\t\t\t\"dtstart\",\n\t\t\t\"dtend\",\n\t\t\t\"summary\"\n\t\t]\n\t},\n\tperson: {\n\t\tid: \"person_id\",\n\t\tdragIcon: \"fa-solid fa-user\"\n\t},\n\tstudent: {\n\t\tid: \"student_uid\",\n\t\tdragIcon: \"fa-solid fa-user-graduate\"\n\t},\n\tprestudent: {\n\t\tid: \"prestudent_id\",\n\t\tdragIcon: \"fa-solid fa-user-graduate text-muted\"\n\t}\n\t// TODO: IMPLEMENT OTHER TYPES\n};\n\nconst VALID_TYPES = Object.keys(TYPE_DEFINITION);\n\nconst TYPE_CONSTANTS = Object.keys(TYPE_DEFINITION).reduce((res, type) => {\n\tres['TYPE_' + type.toUpperCase()] = type;\n\treturn res;\n}, {});\n\nfunction isValidDragObject(value) {\n\tif (!value)\n\t\treturn false;\n\tif (Array.isArray(value))\n\t\treturn value.every(isValidDragObject);\n\tif (!value.type)\n\t\treturn false;\n\n\tif (value.type.substr(-11) == '-collection') {\n\t\tif (!Object.prototype.hasOwnProperty.call(value, 'values'))\n\t\t\treturn false;\n\n\t\tif (!VALID_TYPES.includes(value.type.substr(0, value.type.length-11)))\n\t\t\treturn false;\n\t} else {\n\t\tif (!Object.prototype.hasOwnProperty.call(value, 'id'))\n\t\t\treturn false;\n\n\t\tif (!VALID_TYPES.includes(value.type))\n\t\t\treturn false;\n\n\t\tif (TYPE_DEFINITION[value.type].extras) {\n\t\t\tif (!TYPE_DEFINITION[value.type].extras.every(extra => Object.prototype.hasOwnProperty.call(value, extra)))\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction getValidTransferData(event, allowedTypes, strict) {\n\tlet obj = null;\n\n\ttry {\n\t\tobj = getTransferData(event, strict);\n\t\tif (!obj)\n\t\t\treturn null;\n\n\t\tif (!strict && Array.isArray(obj)) {\n\t\t\tobj = obj.filter(isValidDragObject);\n\t\t\tif (!obj.length)\n\t\t\t\treturn null;\n\t\t} else if (!isValidDragObject(obj))\n\t\t\treturn null;\n\n\t\tif (allowedTypes && allowedTypes.length) {\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tif (strict && !obj.every(v => allowedTypes.includes(v.type))) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (!strict) {\n\t\t\t\t\tobj = obj.filter(v => allowedTypes.includes(v.type));\n\t\t\t\t\tif (!obj.length)\n\t\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else if (!allowedTypes.includes(obj.type)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t} catch(_error) {\n\t\treturn null;\n\t}\n\n\tif (Array.isArray(obj) && obj.length == 1)\n\t\treturn obj.find(Boolean);\n\n\treturn obj;\n}\n\nfunction isValidTransferData(event, allowedTypes, strict) {\n\treturn getValidTransferData(event, allowedTypes, strict) ? true : false;\n}\n\nfunction getTransferData(event, strict) {\n\tconst result = [];\n\n\tfor (const type of event.dataTransfer.types) {\n\t\tif (type.substr(0, 16) != 'application/fhc-') {\n\t\t\tif (strict)\n\t\t\t\treturn null;\n\t\t\tcontinue;\n\t\t}\n\t\tlet base_type = type.substr(16);\n\t\tlet collection = false;\n\t\tif (base_type.substr(-11) == '-collection') {\n\t\t\tbase_type = base_type.substr(0, base_type.length-11);\n\t\t\tcollection = true;\n\t\t}\n\t\tif (!VALID_TYPES.includes(base_type)) {\n\t\t\tif (strict)\n\t\t\t\treturn null;\n\t\t\tcontinue;\n\t\t}\n\t\tlet data = JSON.parse(event.dataTransfer.getData(type));\n\t\tif (collection)\n\t\t\tresult.push(...data.values);\n\t\telse\n\t\t\tresult.push(data);\n\t}\n\n\tif (!result.length)\n\t\treturn null;\n\n\tif (result.length == 1)\n\t\treturn result[0];\n\n\treturn result;\n}\n\nfunction convertToValidDragObject(data, strict) {\n\tif (Array.isArray(data)) {\n\t\tconst converted = data.map(convertToValidDragObject).filter(Boolean);\n\t\tif (!converted.length)\n\t\t\treturn undefined;\n\t\tif (strict && converted.length != data.length)\n\t\t\treturn undefined;\n\n\t\tconst sorted = converted.reduce((res, item) => {\n\t\t\tif (!res[item.type])\n\t\t\t\tres[item.type] = [];\n\t\t\tres[item.type].push(item);\n\t\t\treturn res;\n\t\t}, {});\n\n\t\treturn Object.entries(sorted).map(([type, values]) => {\n\t\t\tif (values.length > 1) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: type + '-collection',\n\t\t\t\t\tvalues\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn values[0];\n\t\t});\n\t}\n\n\tif (Object.prototype.hasOwnProperty.call(data, 'type') && isValidDragObject(data)) {\n\t\treturn data;\n\t}\n\n\tconst found = Object.entries(TYPE_DEFINITION).find(([ , typedef ]) => {\n\t\tif (!Object.prototype.hasOwnProperty.call(data, typedef.id))\n\t\t\treturn false;\n\t\tif (typedef.extras) {\n\t\t\tif (!typedef.extras.every(extra => Object.prototype.hasOwnProperty.call(data, extra)))\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\n\tif (!found) {\n\t\treturn undefined;\n\t}\n\n\tconst [ type, typedef ] = found;\n\n\tconst newData = {};\n\tnewData.type = type;\n\tnewData.id = data[typedef.id];\n\tif (typedef.extras)\n\t\ttypedef.extras.forEach(extra => newData[extra] = data[extra]);\n\n\treturn newData;\n}\n\nfunction setTransferData(event, validDragObject, setDragImage = false) {\n\tif (setDragImage) {\n\t\tconst dragItems = Array.isArray(validDragObject) ? validDragObject : [ validDragObject ];\n\t\tconst dragElements = dragItems.map(item => {\n\t\t\tconst icon = document.createElement('i');\n\t\t\tconst label = document.createElement('span');\n\t\t\tconst iconContainer = document.createElement('span');\n\n\t\t\ticonContainer.className = 'btn btn-outline-dark bg-light';\n\t\t\tlabel.className = 'small';\n\n\t\t\tif (TYPE_DEFINITION[item.type]) {\n\t\t\t\ticon.className = TYPE_DEFINITION[item.type].dragIcon || 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = item.id;\n\t\t\t} else if (item.type.substr(-11) == '-collection' && TYPE_DEFINITION[item.type.substr(0, item.type.length-11)]) {\n\t\t\t\ticonContainer.style.boxShadow = '3px 3px var(--bs-btn-border-color)';\n\t\t\t\ticon.className = TYPE_DEFINITION[item.type.substr(0, item.type.length-11)].dragIcon || 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = 'x' + item.values.length;\n\t\t\t} else {\n\t\t\t\ticon.className = 'fa-solid fa-question';\n\t\t\t\tlabel.textContent = item.id || '';\n\t\t\t}\n\t\t\t\n\t\t\ticonContainer.append(icon);\n\n\t\t\tconst itemContainer = document.createElement('div');\n\t\t\titemContainer.className = 'd-flex flex-column align-items-center gap-2 small';\n\t\t\titemContainer.append(iconContainer, label);\n\t\t\treturn itemContainer;\n\t\t});\n\n\t\tconst container = document.createElement('div');\n\t\tcontainer.className = 'd-flex flex-row gap-2 small';\n\t\tcontainer.append(...dragElements);\n\n\t\tdocument.body.append(container);\n\t\tevent.dataTransfer.setDragImage(container, -25, 0);\n\t\trequestAnimationFrame(() => {\n\t\t\tdocument.body.removeChild(container);\n\t\t});\n\t}\n\tif (Array.isArray(validDragObject)) {\n\t\treturn validDragObject.forEach(data => setTransferData(event, data));\n\t}\n\t\n\tevent.dataTransfer.setData('application/fhc-' + validDragObject.type, JSON.stringify(validDragObject));\n}\n\n/**\n * check if the dataTransfer types are in the allowed types array\n * if strict is disabled at least one type must be the allowed array\n * otherwise all types have to be in the allowed array\n *\n * @param Event\t\tevent\n * @param Array\t\tallowedTypes\n * @param Boolean\tstrict\n */\nfunction eventHasTypes(event, allowedTypes, strict) {\n\tif (!allowedTypes || !allowedTypes.length)\n\t\tallowedTypes = VALID_TYPES;\n\tallowedTypes = allowedTypes.map(type => 'application/fhc-' + type);\n\n\tconst dataTypes = [...event.dataTransfer.types];\n\t\n\t// NOTE(chris): if dragging across browsers the dataTransfer object is\n\t// set to a default one without data. Since we do not support dragging\n\t// across browsers (yet) we return false which will disallow dropping.\n\tif (!dataTypes.length)\n\t\treturn false;\n\t\n\tif (!strict)\n\t\treturn allowedTypes.some(type => [...event.dataTransfer.types].includes(type));\n\t\n\treturn [...event.dataTransfer.types].every(type => allowedTypes.includes(type));\n}\n\nfunction bindDragEnterLeave(el, onEnter, onLeave) {\n\t// NOTE(chris): add save dragenter and dragleave events\n\t// that won't fire when hovering over child elements\n\n\tlet skipLeave = false;\n\tlet skipLeaveParent = true;\n\n\tfunction init(evt) {\n\t\tskipLeave = false;\n\t\tskipLeaveParent = true;\n\t\t// add global listeners\n\t\twindow.addEventListener('dragenter', globalDragenter, true);\n\t\twindow.addEventListener('dragleave', globalDragleave, true);\n\t\twindow.addEventListener('drop', globalDrop, true);\n\t\t// call enter\n\t\tonEnter(evt);\n\t\t// remove self\n\t\tel.removeEventListener('dragenter', init);\n\t}\n\n\tfunction cleanup(evt, wasDropped) {\n\t\t// remove global listeners\n\t\twindow.removeEventListener('dragenter', globalDragenter, true);\n\t\twindow.removeEventListener('dragleave', globalDragleave, true);\n\t\twindow.removeEventListener('drop', globalDrop, true);\n\t\t// call leave\n\t\tonLeave(evt, wasDropped);\n\t\t// add init\n\t\tel.addEventListener('dragenter', init);\n\t}\n\n\tfunction globalDragenter(evt) {\n\t\tskipLeaveParent = false;\n\t\tif (el != evt.target && !el.contains(evt.target)) {\n\t\t\tcleanup(evt);\n\t\t} else {\n\t\t\tskipLeave = true;\n\t\t}\n\t}\n\tfunction globalDragleave(evt) {\n\t\tif (el != evt.target && !el.contains(evt.target)) {\n\t\t\tif (skipLeaveParent) {\n\t\t\t\tskipLeaveParent = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (skipLeave) {\n\t\t\t\tskipLeave = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcleanup(evt);\n\t}\n\tfunction globalDrop(evt) {\n\t\tcleanup(evt, true);\n\t}\n\n\tel.addEventListener('dragenter', init);\n\n\treturn () => {\n\t\t// cleanup\n\t\tel.removeEventListener('dragenter', init);\n\t}\n}\n\nexport {\n\tisValidDragObject,\n\tgetValidTransferData,\n\tisValidTransferData,\n\tgetTransferData,\n\tconvertToValidDragObject,\n\tsetTransferData,\n\teventHasTypes,\n\tbindDragEnterLeave\n};\nexport default {\n\t...TYPE_CONSTANTS,\n\tisValidDragObject,\n\tgetValidTransferData,\n\tisValidTransferData,\n\tgetTransferData,\n\tconvertToValidDragObject,\n\tsetTransferData,\n\teventHasTypes,\n\tbindDragEnterLeave\n};\n","/**\n * TODO(chris): This needs serious rework!!!\n */\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.addEventListener('update-my-value', evt => {\n\t\t\t\tevt.preventDefault();\n\t\t\t\tbinding.value = evt.detail.item;\n\t\t\t});\n\t\t\tel.addEventListener('dragstart', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragstart', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\tx: evt.offsetX / el.offsetWidth,\n\t\t\t\t\t\ty: evt.offsetY / el.offsetHeight,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t\tel.addEventListener('dragend', evt => {\n\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragend', {\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\titem: binding.value,\n\t\t\t\t\t\toriginalEvent: evt\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropcage') {\n\t\t\tlet hitbox = null;\n\t\t\tel.addEventListener('dragover', evt => {\n\t\t\t\tif (hitbox)\n\t\t\t\t\treturn;\n\t\t\t\thitbox = el.getBoundingClientRect();\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragenter', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t\twindow.addEventListener('dragleave', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\tlet pos;\n\t\t\t\tif (typeof evt.clientX === 'undefined')\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.pageX + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.pageY + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\telse\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tx: evt.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,\n\t\t\t\t\t\ty: evt.clientY + document.body.scrollTop + document.documentElement.scrollTop\n\t\t\t\t\t};\n\t\t\t\tif (pos.x > hitbox.left + hitbox.width - 1 || pos.x < hitbox.left || pos.y > hitbox.top + hitbox.height - 1 || pos.y < hitbox.top) {\n\t\t\t\t\thitbox = null;\n\t\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t});\n\t\t\twindow.addEventListener('drop', evt => {\n\t\t\t\tif (!hitbox)\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\thitbox = null;\n\t\t\t\treturn el.dispatchEvent(new CustomEvent('calendar-dragleave', {\n\t\t\t\t\tdetail: { originalEvent: evt }\n\t\t\t\t}));\n\t\t\t});\n\t\t} else if (binding.arg == 'dropzone') {\n\t\t\tel.addEventListener(\n\t\t\t\tbinding.modifiers.once ? 'dragenter' : 'dragover',\n\t\t\t\tevt => {\n\t\t\t\t\tconst timestamp = binding.value instanceof Function\n\t\t\t\t\t\t? binding.value(evt)\n\t\t\t\t\t\t: binding.value;\n\t\t\t\t\tconst detail = timestamp.timestamp ? timestamp : { timestamp };\n\t\t\t\t\tel.dispatchEvent(new CustomEvent('calendar-dragchange', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg == 'draggable') {\n\t\t\tel.dispatchEvent(new CustomEvent('update-my-value', {\n\t\t\t\tcancelable: true,\n\t\t\t\tdetail: {\n\t\t\t\t\titem: binding.value\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n}","import DragAndDrop from '../../../helpers/DragAndDrop.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\n/**\n * TODO(chris): this needs serious rework!\n */\n\nexport default {\n\tname: \"CalendarDragAndDrop\",\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tevents: Vue.computed(() => this.correctedEvents),\n\t\t\tbackgrounds: Vue.computed(() => this.backgrounds),\n\t\t\tdropAllowed: Vue.computed(() => this.dragging && this.dropAllowed)\n\t\t};\n\t},\n\tinject: {\n\t\tmode: \"mode\",\n\t\tdropableEvents: \"dropableEvents\"\n\t},\n\tprops: {\n\t\tevents: Array,\n\t\tbackgrounds: Array\n\t},\n\temits: [\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tallowed: false,\n\t\t\tdraggedInternalEvent: null,\n\t\t\tdraggedExternalEvent: null,\n\t\t\ttargetTimestamp: 0,\n\t\t\ttargetGridEnds: null,\n\t\t\tdropAllowed: false,\n\n\t\t\tshadowPreview: false // TODO(chris): IMPLEMENT! (use background instead of event as preview)\n\t\t};\n\t},\n\tcomputed: {\n\t\tcorrectedEvents() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.draggedInternalEvent) {\n\t\t\t\t\tconst index = this.events.findIndex(e => e.id == this.draggedInternalEvent.id);\n\t\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1, this.previewEvent);\n\t\t\t\t\telse\n\t\t\t\t\t\treturn this.events.toSpliced(index, 1);\n\t\t\t\t}\n\t\t\t\tif (this.previewEvent && !this.shadowPreview)\n\t\t\t\t\treturn [...this.events, this.previewEvent];\n\t\t\t}\n\n\t\t\treturn this.events;\n\t\t},\n\t\tcorrectedBackgrounds() {\n\t\t\tif (this.dragging) {\n\t\t\t\tif (this.shadowPreview) {\n\t\t\t\t\t// TODO(chris): how to get the length\n\t\t\t\t\treturn [...this.backgrounds, {\n\t\t\t\t\t\tstart: new Date(this.targetTimestamp),\n\t\t\t\t\t\tclass: 'shadow-preview'\n\t\t\t\t\t}];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.backgrounds;\n\t\t},\n\t\tpreviewEvent() {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn null;\n\t\t\tif (!this.targetTimestamp)\n\t\t\t\treturn null;\n\n\t\t\tconst event = this.draggedInternalEvent || this.draggedExternalEvent;\n\n\t\t\tif (!event)\n\t\t\t\treturn null;\n\t\t\t\n\t\t\t// TODO(chris): calculate length correctly from orig\n\t\t\tlet length = event.end - event.start;\n\t\t\tif (this.targetGridEnds)\n\t\t\t\tlength = this.targetGridEnds.find(end => end >= this.targetTimestamp + length) - this.targetTimestamp;\n\t\t\t\n\t\t\treturn {\n\t\t\t\torig: event.orig,\n\t\t\t\tstart: this.targetTimestamp,\n\t\t\t\tend: this.targetTimestamp + length\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tonDragstart(evt) {\n\t\t\tconst data = DragAndDrop.convertToTransferData(evt.detail.item.orig);\n\t\t\tif (DragAndDrop.isValidDragObject(data)) {\n\t\t\t\tDragAndDrop.setTransferData(evt.detail.originalEvent, data);\n\t\t\t\tthis.draggedInternalEvent = evt.detail.item;\n\t\t\t}\n\t\t},\n\t\tonDragend() {\n\t\t\tthis.draggedInternalEvent = null;\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragenter(evt) {\n\t\t\tthis.dragging = true;\n\n\t\t\tif (!this.draggedInternalEvent) {\n\t\t\t\tconst event = DragAndDrop.getValidTransferData(evt.detail.originalEvent);\n\t\t\t\tif (event) {\n\t\t\t\t\tthis.draggedExternalEvent = {\n\t\t\t\t\t\tid: event.id,\n\t\t\t\t\t\ttype: event.type,\n\t\t\t\t\t\tstart: event.isostart\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isostart).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\tend: event.isoend\n\t\t\t\t\t\t\t? luxon.DateTime.fromISO(event.isoend).setZone(this.timezone)\n\t\t\t\t\t\t\t: luxon.DateTime.local().setZone(this.timezone),\n\t\t\t\t\t\torig: event\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tthis.draggedExternalEvent = null;\n\t\t\t\t}\n\t\t\t\tthis.dropAllowed = this.dropableEvents(event, this.mode);\n\t\t\t} else {\n\t\t\t\tthis.dropAllowed = this.dropableEvents(this.draggedInternalEvent, this.mode);\n\t\t\t}\n\t\t},\n\t\tonDragleave() {\n\t\t\tthis.dragging = false;\n\t\t},\n\t\tonDragchange(evt) {\n\t\t\tthis.targetTimestamp = evt.detail.timestamp;\n\t\t\t\n\t\t\tthis.targetGridEnds = evt.detail.ends || null;\n\t\t},\n\t\tonDrop(evt) {\n\t\t\tif (!this.dragging || !this.dropAllowed)\n\t\t\t\treturn;\n\n\t\t\tthis.$emit('drop', evt, this.previewEvent.start, this.previewEvent.end);\n\t\t\tthis.dropAllowed = false;\n\t\t\tthis.dragging = false;\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\n\t`\n}\n","/**\n * TODO(chris): use click-directive\n */\nimport DatePicker from './Header/Datepicker.js';\n\nexport default {\n\tname: \"CalendarHeader\",\n\tcomponents: {\n\t\tDatePicker\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tmodeOptions: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t},\n\t\tbtnMonth: Boolean,\n\t\tbtnWeek: Boolean,\n\t\tbtnDay: Boolean,\n\t\tbtnList: Boolean\n\t},\n\temits: [\n\t\t\"next\",\n\t\t\"prev\",\n\t\t\"click:mode\",\n\t\t\"update:date\",\n\t\t\"update:mode\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\topen: false\n\t\t};\n\t},\n\tmethods: {\n\t\tclickMode(evt, mode) {\n\t\t\tthis.$emit('click:mode', evt);\n\t\t\tif (!evt.defaultPrevented)\n\t\t\t\tthis.$emit('update:mode', mode);\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}\n","// TODO(chris): translate aria-labels\n\nexport default {\n\tname: \"CalendarHeaderDatepicker\",\n\tcomponents: {\n\t\tVueDatePicker\n\t},\n\tinject: [\n\t\t\"locale\",\n\t\t\"timezone\"\n\t],\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tlistLength: {\n\t\t\ttype: Number,\n\t\t\tdefault: 7\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\"\n\t],\n\tcomputed: {\n\t\tconvertedDate() {\n\t\t\t// convert to target TZ then strip TZ Information\n\t\t\t// so the datepicker can work with local times\n\t\t\treturn this.date.setZone(this.timezone).setZone('local', { keepLocalTime: true });\n\t\t},\n\t\tcurrent() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn {month: this.convertedDate.month-1, year: this.convertedDate.year};\n\t\t\tcase \"list\":\n\t\t\t\treturn [this.convertedDate.startOf('day').ts, this.convertedDate.startOf('day').plus({ days: this.listLength }).ts - 1];\n\t\t\tcase \"week\":\n\t\t\t\treturn [this.convertedDate.startOf('week', { useLocaleWeeks: true }).ts, this.convertedDate.endOf('week', { useLocaleWeeks: true }).ts];\n\t\t\tcase \"day\":\n\t\t\t\treturn this.convertedDate;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\ttitle() {\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\treturn this.date.toLocaleString({ month: 'long', year: 'numeric' });\n\t\t\tcase \"week\":\n\t\t\t\tvar year = this.date.localWeekYear;\n\t\t\t\tvar week = this.date.toFormat('nn');\n\t\t\t\treturn this.$p.t('calendar/year_kw', { year, week });\n\t\t\tcase \"list\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL) + '-' + this.date.plus({ days: this.listLength - 1 }).toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tcase \"day\":\n\t\t\t\treturn this.date.toLocaleString(luxon.DateTime.DATE_FULL);\n\t\t\tdefault:\n\t\t\t\treturn 'View not Supported';\n\t\t\t}\n\t\t},\n\t\tweekStart() {\n\t\t\treturn luxon.Info.getStartOfWeek(this.date)%7;\n\t\t}\n\t},\n\tmethods: {\n\t\tupdate(value) {\n\t\t\tlet date;\n\t\t\tswitch (this.mode) {\n\t\t\tcase \"month\":\n\t\t\t\tvalue.month++;\n\t\t\t\tdate = luxon.DateTime.fromObject(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"list\":\n\t\t\tcase \"week\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value[0]).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tcase \"day\":\n\t\t\t\tdate = luxon.DateTime.fromJSDate(value).setZone(this.timezone, { keepLocalTime: true }).setLocale(this.locale);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn; // Don't update if the value is invalid!\n\t\t\t}\n\t\t\tthis.$emit(\"update:date\", date);\n\t\t},\n\t\tweekNumbers(date) {\n\t\t\treturn luxon.DateTime.fromJSDate(date, { locale: this.locale }).localWeekNumber;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t title\"\n\t\t:month-picker=\"mode == 'month'\"\n\t\t:week-picker=\"mode == 'week'\"\n\t\t:range=\"mode == 'list' ? { autoRange: listLength - 1 } : false\"\n\t\t:text-input=\"mode == 'day'\"\n\t\t:week-start=\"weekStart\"\n\t\t:week-numbers=\"{ type: weekNumbers }\"\n\t\t:clearable=\"false\"\n\t\t:enable-time-picker=\"false\"\n\t\t:config=\"{ keepActionRow: mode != 'month' }\"\n\t\t:action-row=\"{ showSelect: false, showCancel: false, showNow: mode != 'month', showPreview: false }\"\n\t\tauto-apply\n\t\tsix-weeks\n\t\tteleport\n\t\t:locale=\"locale\"\n\t\t:now-button-label=\"$p.t('calendar/today')\"\n\t\t:week-num-name=\"$p.t('calendar/kw')\"\n\t/>\n\t`\n}\n","export default {\n\tname: 'CalendarSlider',\n\tinject: {\n\t\ttime: {\n\t\t\tfrom: \"sliderTime\",\n\t\t\tdefault: \".3s\"\n\t\t}\n\t},\n\temits: [\n\t\t'slid'\n\t],\n\tdata() {\n\t\treturn {\n\t\t\ttarget: 0,\n\t\t\textrasAfter: 0,\n\t\t\textrasBefore: 0,\n\t\t\trunning: false,\n\t\t\tpromiseResolve: null\n\t\t}\n\t},\n\tcomputed: {\n\t\titemsAfter() {\n\t\t\treturn [...Array(this.extrasAfter)].map((i, k) => 1+k);\n\t\t},\n\t\titemsBefore() {\n\t\t\treturn [...Array(this.extrasBefore)].map((i, k) => k-this.extrasBefore);\n\t\t},\n\t\tstyleSlider() {\n\t\t\tconst style = {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%'\n\t\t\t};\n\t\t\tif (this.running) {\n\t\t\t\tstyle.left = (-this.target * 100) + '%';\n\t\t\t\tstyle.transition = 'left ' + this.time + ' ease-in-out';\n\t\t\t}\n\t\t\treturn style;\n\t\t},\n\t\tstyleBefore() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tright: '100%',\n\t\t\t\twidth: (this.extrasBefore * 100) + '%'\n\t\t\t};\n\t\t},\n\t\tstyleAfter() {\n\t\t\treturn {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\theight: '100%',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tleft: '100%',\n\t\t\t\twidth: (this.extrasAfter * 100) + '%'\n\t\t\t};\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\treturn this.slidePages(-1);\n\t\t},\n\t\tnextPage() {\n\t\t\treturn this.slidePages(1);\n\t\t},\n\t\tslidePages(dir) {\n\t\t\treturn new Promise(resolve => {\n\t\t\t\tthis.promiseResolve = resolve;\n\t\t\t\tthis.running = true;\n\t\t\t\tconst newTarget = this.target + dir;\n\t\t\t\tif (newTarget > 0) {\n\t\t\t\t\tif (this.extrasAfter < newTarget)\n\t\t\t\t\t\tthis.extrasAfter = newTarget;\n\t\t\t\t} else if (newTarget < 0) {\n\t\t\t\t\tif (-this.extrasBefore > newTarget)\n\t\t\t\t\t\tthis.extrasBefore = -newTarget;\n\t\t\t\t}\n\t\t\t\tthis.target = newTarget;\n\t\t\t});\n\t\t},\n\t\tendSlide() {\n\t\t\tif (this.promiseResolve) {\n\t\t\t\tthis.promiseResolve(this.target);\n\t\t\t\tthis.promiseResolve = null;\n\t\t\t}\n\t\t\tthis.$emit('slid', this.target);\n\t\t\tthis.running = false;\n\t\t\tthis.target = 0;\n\t\t\tthis.extrasAfter = this.extrasBefore = 0;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\n\t\n\t`\n}\n","const clickListeners = [];\n\nfunction saveAddClickListener(el, source, value) {\n\tconst index = clickListeners.findIndex(data => data.el == el);\n\tif (index >= 0) {\n\t\tel.removeEventListener('click', clickListeners[index].listener);\n\t\tclickListeners.splice(index, 1);\n\t}\n\tconst listener = evt => {\n\t\tevt.preventDefault();\n\t\tevt.stopPropagation();\n\t\tconst customEvent = new CustomEvent('cal-click', {\n\t\t\tcancelable: true,\n\t\t\tbubbles: true,\n\t\t\tdetail: { source, value }\n\t\t});\n\t\tevt.target.dispatchEvent(customEvent);\n\t}\n\tclickListeners.push({el, listener});\n\tel.addEventListener('click', listener);\n}\n\nexport default {\n\tmounted(el, binding, vnode) {\n\t\tif (binding.arg == 'container') {\n\t\t\tel.addEventListener('cal-click', evt => {\n\t\t\t\tconst customEvent = new Event('click:' + evt.detail.source, {\n\t\t\t\t\tcancelable: true\n\t\t\t\t});\n\t\t\t\tbinding.instance.$emit('click:' + evt.detail.source, customEvent, evt.detail.value);\n\t\t\t\tif (!customEvent.defaultPrevented) {\n\t\t\t\t\tconst finalEvent = new CustomEvent('cal-click-default', {\n\t\t\t\t\t\tcancelable: true,\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tdetail: evt.detail\n\t\t\t\t\t});\n\t\t\t\t\tevt.target.dispatchEvent(finalEvent);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t},\n\tupdated(el, binding, vnode, prevVnode) {\n\t\tif (binding.arg != 'container') {\n\t\t\tsaveAddClickListener(el, binding.arg, binding.value);\n\t\t}\n\t}\n}","import BaseDraganddrop from './Base/DragAndDrop.js';\nimport BaseHeader from './Base/Header.js';\nimport BaseSlider from './Base/Slider.js';\nimport BsModal from '../Bootstrap/Modal.js';\n\nimport CalClick from '../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"CalendarBase\",\n\tcomponents: {\n\t\tBaseDraganddrop,\n\t\tBaseHeader,\n\t\tBaseSlider,\n\t\tBsModal\n\t},\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tlocale: Vue.computed(() => this.locale),\n\t\t\ttimezone: Vue.computed(() => this.timezone),\n\t\t\ttimeGrid: Vue.computed(() => this.timeGrid),\n\t\t\tdraggableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.draggableEvents)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.draggableEvents))\n\t\t\t\t\treturn event => this.draggableEvents.includes(event.type);\n\t\t\t\tif (this.draggableEvents instanceof Function)\n\t\t\t\t\treturn this.draggableEvents;\n\t\t\t\t\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\tdropableEvents: Vue.computed(() => {\n\t\t\t\tif (!this.onDrop)\n\t\t\t\t\treturn () => false;\n\n\t\t\t\tif (Array.isArray(this.dropableEvents))\n\t\t\t\t\treturn item => this.dropableEvents.includes(item.type);\n\t\t\t\tif (this.dropableEvents instanceof Function)\n\t\t\t\t\treturn this.dropableEvents;\n\n\t\t\t\treturn () => true;\n\t\t\t}),\n\t\t\thasDragoverFunc: Vue.computed(() => this.onDragover),\n\t\t\tmode: Vue.computed(() => this.mode)\n\t\t};\n\t},\n\tprops: {\n\t\tlocale: {\n\t\t\ttype: String,\n\t\t\tdefault: 'de'\n\t\t},\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: props => luxon.DateTime.now().setZone(props.timezone).startOf('day')\n\t\t},\n\t\tmodes: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: {}\n\t\t\t// TODO(chris): verfication functions\n\t\t},\n\t\tmode: String,\n\t\tmodeOptions: Object,\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tshowBtns: Boolean,\n\t\tbtnMonth: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnWeek: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnDay: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\tbtnList: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: undefined\n\t\t},\n\t\ttimeGrid: Array,\n\t\tdraggableEvents: [Boolean, Array, Function],\n\t\tdropableEvents: [Boolean, Array, Function],\n\t\tonDragover: Function,\n\t\tonDrop: Function\n\t},\n\temits: [\n\t\t\"click:next\",\n\t\t\"click:prev\",\n\t\t\"click:mode\",\n\t\t\"click:event\",\n\t\t\"click:day\",\n\t\t\"click:week\",\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\",\n\t\t\"drop\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tinternalView: null,\n\t\t\tinternalDate: null,\n\t\t\tmodalEvent: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tconvertedEvents() {\n\t\t\treturn this.events.map(orig => ({\n\t\t\t\tid: orig.type + orig[orig.type + '_id'],\n\t\t\t\ttype: orig.type,\n\t\t\t\tstart: luxon.DateTime.fromISO(orig.isostart).setZone(this.timezone),\n\t\t\t\tend: luxon.DateTime.fromISO(orig.isoend).setZone(this.timezone),\n\t\t\t\torig\n\t\t\t}));\n\t\t},\n\t\tconvertedBackgrounds() {\n\t\t\treturn this.backgrounds.map(bg => {\n\t\t\t\tconst res = { ...bg };\n\t\t\t\tif (res.start) {\n\t\t\t\t\tif (Number.isInteger(res.start))\n\t\t\t\t\t\tres.start = luxon.DateTime.fromMillis(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.start instanceof Date)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromJSDate(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.start === \n\t\t\t\t\t\t'string' || res.start instanceof String)\n\t\t\t\t\t\tres.start = luxon.DateTime.fromISO(res.start, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\tif (res.end) {\n\t\t\t\t\tif (Number.isInteger(res.end))\n\t\t\t\t\t\tres.end = luxon.DateTime.fromMillis(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (res.end instanceof Date)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromJSDate(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t\telse if (typeof res.end === \n\t\t\t\t\t\t'string' || res.end instanceof String)\n\t\t\t\t\t\tres.end = luxon.DateTime.fromISO(res.end, { zone: this.timezone, locale: this.locale });\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t});\n\t\t},\n\t\tsDate() {\n\t\t\tif (this.date instanceof luxon.DateTime)\n\t\t\t\treturn this.date;\n\t\t\treturn luxon.DateTime.fromJSDate(new Date(this.date)).setZone(this.timezone);\n\t\t},\n\t\tcDate: {\n\t\t\tget() {\n\t\t\t\tconst date = this.internalDate ? this.internalDate : this.sDate;\n\t\t\t\treturn date.setLocale(this.locale);\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalDate = value;\n\t\t\t\tthis.$emit('update:date', value, this.cMode);\n\t\t\t}\n\t\t},\n\t\tsMode() {\n\t\t\t// choose default mode\n\t\t\tlet mode = this.mode;\n\t\t\tif (mode)\n\t\t\t\tmode = mode.toLowerCase();\n\t\t\tif (!mode || !this.modes[mode])\n\t\t\t\tmode = Object.keys(this.modes).find(Boolean); // start with first entry as active mode\n\t\t\treturn mode || '';\n\t\t},\n\t\tcMode: {\n\t\t\tget() {\n\t\t\t\treturn this.internalView ? this.internalView : this.sMode;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tthis.internalView = value;\n\t\t\t\tthis.$emit('update:mode', value, this.cDate);\n\t\t\t}\n\t\t}\n\t},\n\twatch: {\n\t\tsDate(n, o) {\n\t\t\tif (this.sDate.isValid && !this.sDate.hasSame(this.internalDate, 'day'))\n\t\t\t\tthis.internalDate = this.sDate;\n\t\t},\n\t\tsMode() {\n\t\t\tif (this.sMode)\n\t\t\t\tthis.internalView = this.sMode;\n\t\t}\n\t},\n\tmethods: {\n\t\tclickPrev() {\n\t\t\tconst evt = new Event('click:prev', {cancelable: true});\n\t\t\tthis.$emit('click:prev', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.prevPage();\n\t\t},\n\t\tclickNext() {\n\t\t\tconst evt = new Event('click:next', {cancelable: true});\n\t\t\tthis.$emit('click:next', evt);\n\t\t\tif (evt.defaultPrevented)\n\t\t\t\treturn;\n\n\t\t\t// default: switch page\n\t\t\tthis.$refs.mode.nextPage();\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\t// TODO(chris): implement\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\tif (this.cMode != 'day' && this.modes['day']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = evt.detail.value;\n\t\t\t\t\tthis.cMode = 'day';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'week':\n\t\t\t\tif (this.cMode != 'week' && this.modes['week']) {\n\t\t\t\t\tevt.stopPropagation();\n\t\t\t\t\tthis.cDate = luxon.DateTime.fromObject({\n\t\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t\t}, {\n\t\t\t\t\t\tzone: this.cDate.zoneName,\n\t\t\t\t\t\tlocale: this.cDate.locale\n\t\t\t\t\t});\n\t\t\t\t\tthis.cMode = 'week';\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tonDropItem(evt, start, end) {\n\t\t\tthis.$emit('drop', evt, start, end);\n\t\t},\n\t\tshowEventModal(eventObj) {\n\t\t\tthis.modalEvent = eventObj;\n\t\t\tthis.$refs.modal.show();\n\t\t},\n\t\thideEventModal() {\n\t\t\tif (this.modalEvent)\n\t\t\t\tthis.modalEvent.closeFn = undefined;\n\t\t\tthis.$refs.modal.hide();\n\t\t\tthis.modalEvent = null;\n\t\t},\n\t\tonModalHidden() {\n\t\t\tif (this.modalEvent.closeFn)\n\t\t\t\tthis.modalEvent.closeFn();\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.hideEventModal();\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetRoomInfo(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getRoomplan',\n\t\t\tparams: { ort_kurzbz, start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlan(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLvPlan',\n\t\t\tparams: { start_date, end_date, lv_id }\n\t\t};\n\t},\n\teventsPersonal(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsPersonal',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\teventsLv(lv_id, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/lvPlan/eventsLv',\n\t\t\tparams: { lv_id, start_date, end_date }\n\t\t};\n\t},\n\tgetStunden() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/Stunden'\n\t\t};\n\t},\n\tgetOrtReservierungen(ort_kurzbz, start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/LvPlan/getReservierungen/${ort_kurzbz}`,\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLvPlanReservierungen(start_date, end_date) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/getReservierungen',\n\t\t\tparams: { start_date, end_date }\n\t\t};\n\t},\n\tgetLehreinheitStudiensemester(lehreinheit_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/getLehreinheitStudiensemester/${lehreinheit_id}`\n\t\t};\n\t},\n\tstudiensemesterDateInterval(date) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvPlan/studiensemesterDateInterval/${date}`\n\t\t};\n\t},\n\tLvPlanEvents(start_date, end_date, lv_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/LvPlan/LvPlanEvents',\n\t\t\tparams: { \n\t\t\t\tstart_date: start_date, \n\t\t\t\tend_date: end_date, \n\t\t\t\tlv_id: lv_id \n\t\t\t}\n\t\t};\n\t},\n\tgetLv(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/LvPlan/getLv/' + lehrveranstaltung_id\n\t\t};\n\t}\n};","import CalDnd from '../../../../../directives/Calendar/DragAndDrop.js';\nimport CalClick from '../../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"GridLineEvent\",\n\tdirectives: {\n\t\tCalDnd,\n\t\tCalClick\n\t},\n\tinject: {\n\t\tdraggableEvents: \"draggableEvents\",\n\t\tmode: \"mode\"\n\t},\n\tprops: {\n\t\tevent: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn (value.start && value.end && value.orig);\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tisHeaderOrFooter() {\n\t\t\treturn ['header', 'footer'].includes(this.event.orig);\n\t\t},\n\t\tdraggable() {\n\t\t\treturn !this.isHeaderOrFooter && this.draggableEvents(this.event.orig, this.mode);\n\t\t},\n\t\tclasses() {\n\t\t\tconst classes = [];\n\t\t\tif (this.isHeaderOrFooter) {\n\t\t\t\tclasses.push('event-' + this.event.orig);\n\t\t\t} else {\n\t\t\t\tif (this.event.startsHere)\n\t\t\t\t\tclasses.push('event-begin');\n\t\t\t\tif (this.event.endsHere)\n\t\t\t\t\tclasses.push('event-end');\n\t\t\t}\n\t\t\treturn classes\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t{{ event.orig }}\n\t\t\n\t\n\t`\n}\n","import GridLine from './Grid/Line.js';\nimport GridLineEvent from './Grid/Line/Event.js';\n\nimport CalDnd from '../../../directives/Calendar/DragAndDrop.js';\n\nexport default {\n\tname: \"CalendarGrid\",\n\tcomponents: {\n\t\tGridLine,\n\t\tGridLineEvent\n\t},\n\tdirectives: {\n\t\tCalDnd\n\t},\n\tinject: {\n\t\toriginalEvents: \"events\",\n\t\toriginalBackgrounds: \"backgrounds\",\n\t\tdropAllowed: \"dropAllowed\"\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tflipAxis: Vue.computed(() => this.flipAxis),\n\t\t\taxisRow: Vue.computed(() => this.axisRow)\n\t\t};\n\t},\n\tprops: {\n\t\taxisMain: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item => item instanceof luxon.DateTime);\n\t\t\t}\n\t\t},\n\t\taxisParts: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn value.every(item =>\n\t\t\t\t\titem instanceof luxon.Duration\n\t\t\t\t\t|| Number.isInteger(item)\n\t\t\t\t\t|| (\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\titem.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.start)\n\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\titem.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(item.end)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tflipAxis: Boolean,\n\t\tallDayEvents: Boolean,\n\t\taxisMainCollapsible: Boolean,\n\t\tsnapToGrid: Boolean\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tdragging: false,\n\t\t\tresizeObserver: null,\n\t\t\tmutationObserver: null,\n\t\t\tuserScroll: true\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisRow() {\n\t\t\treturn this.flipAxis ? 'column' : 'row';\n\t\t},\n\t\taxisCol() {\n\t\t\treturn this.flipAxis ? 'row' : 'column';\n\t\t},\n\t\taxisPartsWithBreaks() {\n\t\t\treturn this.axisParts.reduce((res, tu, index) => {\n\t\t\t\tconst start = tu.start || tu;\n\t\t\t\tconst end = tu.end;\n\n\t\t\t\tif (res.length) {\n\t\t\t\t\tconst lastTuEnd = res.pop();\n\t\t\t\t\tif (Array.isArray(lastTuEnd)) {\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd[0],\n\t\t\t\t\t\t\tend: start,\n\t\t\t\t\t\t\tindex: lastTuEnd[1]\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (lastTuEnd != start) {\n\t\t\t\t\t\t// add pause\n\t\t\t\t\t\tres.push({\n\t\t\t\t\t\t\tstart: lastTuEnd,\n\t\t\t\t\t\t\tend: start\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!end) {\n\t\t\t\t\tres.push([start, index]);\n\t\t\t\t} else {\n\t\t\t\t\tres.push({\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend,\n\t\t\t\t\t\tindex\n\t\t\t\t\t});\n\t\t\t\t\tres.push(end);\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t}, []).slice(0, -1);\n\t\t},\n\t\taxisPartsSave() {\n\t\t\tif (!this.axisParts[this.axisParts.length - 1].end)\n\t\t\t\treturn this.axisParts.slice(0, -1);\n\t\t\treturn this.axisParts;\n\t\t},\n\t\tstart() {\n\t\t\treturn this.axisPartsWithBreaks[0].start;\n\t\t},\n\t\tend() {\n\t\t\treturn this.axisPartsWithBreaks[this.axisPartsWithBreaks.length - 1].end;\n\t\t},\n\t\tends() {\n\t\t\tconst ends = [];\n\t\t\tconst partsEnds = this.axisPartsWithBreaks\n\t\t\t\t.filter(p => p.index !== undefined)\n\t\t\t\t.map(p => p.end);\n\t\t\tfor (var date of this.axisMain)\n\t\t\t\tfor (var part of partsEnds)\n\t\t\t\t\tends.push(date.plus(part));\n\n\t\t\treturn ends;\n\t\t},\n\t\taxisMainBorders() {\n\t\t\treturn this.axisMain.reduce(\n\t\t\t\t(res, curr) => res.concat([curr.plus(this.start), curr.plus(this.end)]),\n\t\t\t\t[]\n\t\t\t);\n\t\t},\n\t\teventsAllDay() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn [];\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => event.orig.allDayEvent));\n\t\t},\n\t\teventsNormal() {\n\t\t\tif (!this.allDayEvents)\n\t\t\t\treturn this.events;\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents.filter(event => !event.orig.allDayEvent));\n\t\t},\n\t\tevents() {\n\t\t\treturn this.mapIntoMainAxis(this.originalEvents);\n\t\t},\n\t\tbackgrounds() {\n\t\t\treturn this.mapIntoMainAxis(this.originalBackgrounds);\n\t\t},\n\t\thasValidEvents() {\n\t\t\treturn this.events.find(e => e.length);\n\t\t},\n\t\tstyleGridCols() {\n\t\t\tlet cols = 'repeat(' + this.axisMain.length + ', 1fr)';\n\t\t\tif (this.axisMainCollapsible) {\n\t\t\t\tif (this.hasValidEvents)\n\t\t\t\t\tcols = this.events\n\t\t\t\t\t\t.map(e => e.length\n\t\t\t\t\t\t\t? '1fr'\n\t\t\t\t\t\t\t: 'var(--fhc-calendar-axis-collapsible, .5fr)')\n\t\t\t\t\t\t.join(' ');\n\t\t\t}\n\t\t\treturn cols;\n\t\t},\n\t\tstyleGridRows() {\n\t\t\tconst gridlines = {};\n\n\t\t\tthis.axisPartsWithBreaks.forEach(part => {\n\t\t\t\tlet ts = part.start.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('ps_' + part.index);\n\t\t\t\tts = part.end.toMillis();\n\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\tgridlines[ts] = ['t_' + ts];\n\t\t\t\tif (part.index !== undefined)\n\t\t\t\t\tgridlines[ts].push('pe_' + part.index);\n\t\t\t});\n\n\t\t\tthis.eventsNormal.forEach((events, mainIndex) => {\n\t\t\t\tlet day = this.axisMain[mainIndex];\n\t\t\t\tevents.forEach(event => {\n\t\t\t\t\tif (!event.startsHere && !event.endsHere)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (event.startsHere) {\n\t\t\t\t\t\tlet ts = event.start.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t\tif (event.endsHere) {\n\t\t\t\t\t\tlet ts = event.end.diff(day).toMillis();\n\t\t\t\t\t\tif (!gridlines[ts])\n\t\t\t\t\t\t\tgridlines[ts] = ['t_' + ts, 'e_' + ts];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn Object.keys(gridlines).sort((a,b) => parseInt(a)-parseInt(b)).map((start, i, keys) => {\n\t\t\t\tlet end = keys[i + 1];\n\t\t\t\tif (!end) {\n\t\t\t\t\tgridlines[start].push('end');\n\t\t\t\t\treturn '[' + gridlines[start].join(' ') + ']';\n\t\t\t\t}\n\t\t\t\treturn '[' + gridlines[start].join(' ') + '] ' + (end - start) + 'fr';\n\t\t\t}).join(' ');\n\t\t}\n\t},\n\tmethods: {\n\t\tmapIntoMainAxis(target) {\n\t\t\tconst result = Array.from({length: this.axisMain.length}, () => Array());\n\n\t\t\ttarget.forEach(event => {\n\t\t\t\tconst start = event.start || this.axisMainBorders[0].plus(-1);\n\t\t\t\tconst end = event.end || this.axisMainBorders[this.axisMainBorders.length - 1].plus(1);\n\n\t\t\t\tfor (var i = 0; i < this.axisMain.length; i++) {\n\t\t\t\t\tlet laneStart = this.axisMainBorders[i * 2];\n\t\t\t\t\tlet laneEnd = this.axisMainBorders[i * 2 + 1];\n\t\t\t\t\tif (event.orig?.allDayEvent) {\n\t\t\t\t\t\tlaneStart = laneStart.startOf('day');\n\t\t\t\t\t\tlaneEnd = laneEnd.endOf('day');\n\t\t\t\t\t}\n\t\t\t\t\tif (start < laneEnd && end > laneStart) {\n\t\t\t\t\t\tconst startsHere = start >= laneStart;\n\t\t\t\t\t\tconst endsHere = end <= laneEnd;\n\t\t\t\t\t\tresult[i].push({\n\t\t\t\t\t\t\t...event,\n\t\t\t\t\t\t\tstartsHere,\n\t\t\t\t\t\t\tendsHere\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn result;\n\t\t},\n\n\t\t/* DRAG AND DROP */\n\t\tgetPageTop(el) {\n\t\t\tlet pageTop = el.offsetTop;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageTop += this.getPageTop(el.offsetParent);\n\t\t\treturn pageTop;\n\t\t},\n\t\tgetPageLeft(el) {\n\t\t\tlet pageLeft = el.offsetLeft;\n\t\t\tif (el.offsetParent)\n\t\t\t\tpageLeft += this.getPageLeft(el.offsetParent);\n\t\t\treturn pageLeft;\n\t\t},\n\t\tgetTimestampFromMouse(evt, dayTimestamp) {\n\t\t\tlet mouse, mouseFrac;\n\t\t\tif (this.flipAxis) {\n\t\t\t\tmouse = evt.pageX - this.getPageLeft(this.$refs.body) + this.$refs.main.scrollLeft;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetWidth;\n\t\t\t} else {\n\t\t\t\tmouse = evt.pageY - this.getPageTop(this.$refs.body) + this.$refs.main.scrollTop;\n\t\t\t\tmouseFrac = mouse / this.$refs.body.offsetHeight;\n\t\t\t}\n\n\t\t\treturn dayTimestamp + this.start + Math.floor((this.end - this.start) * mouseFrac);\n\t\t},\n\n\t\t/* SCROLLING */\n\t\tenableAutoScroll() {\n\t\t\tif (!this.resizeObserver)\n\t\t\t\tthis.resizeObserver = new ResizeObserver(this.scrollToEarliestEvent);\n\t\t\tthis.resizeObserver.observe(this.$refs.body);\n\n\t\t\tif (!this.mutationObserver)\n\t\t\t\tthis.mutationObserver = new MutationObserver(mutations => {\n\t\t\t\t\tif (mutations.some(m => m.addedNodes.length && [].some.call(m.addedNodes, el => el.matches && el.matches('.fhc-calendar-base-grid-line-event'))))\n\t\t\t\t\t\tthis.scrollToEarliestEvent();\n\t\t\t\t});\n\t\t\tthis.mutationObserver.observe(this.$refs.body, {\n\t\t\t\tsubtree: true,\n\t\t\t\tchildList: true\n\t\t\t});\n\n\t\t\tthis.scrollToEarliestEvent();\n\t\t},\n\t\tdisableAutoScroll() {\n\t\t\tif (this.resizeObserver)\n\t\t\t\tthis.resizeObserver.disconnect();\n\t\t\tthis.resizeObserver = null;\n\n\t\t\tif (this.mutationObserver)\n\t\t\t\tthis.mutationObserver.disconnect();\n\t\t\tthis.mutationObserver = null;\n\t\t},\n\t\tscrollToEarliestEvent() {\n\t\t\tconst eventElements = this.$refs.scroller.querySelectorAll('.fhc-calendar-base-grid-line-event');\n\n\t\t\tlet earliestEventOffset = [0, null];\n\t\t\tfor (var el of eventElements.values()) {\n\t\t\t\tconst top = el.offsetTop;\n\t\t\t\tif (!earliestEventOffset[1] || top < earliestEventOffset[0])\n\t\t\t\t\tearliestEventOffset = [top, el];\n\t\t\t}\n\n\t\t\tthis.userScroll = false;\n\t\t\tif (earliestEventOffset[1]) {\n\t\t\t\tearliestEventOffset[1].scrollIntoView({ behavior: \"smooth\" });\n\t\t\t} else {\n\t\t\t\tthis.$refs.scroller.scrollTo(0, 0);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tthis.disableAutoScroll();\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t end > date))}\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import LineEvent from './Line/Event.js';\nimport LineBackground from './Line/Background.js';\n\n/**\n * TODO(chris):\n * Event overflow for Month mode (more-button)\n */\n\nexport default {\n\tname: \"GridLine\",\n\tcomponents: {\n\t\tLineEvent,\n\t\tLineBackground\n\t},\n\tinject: {\n\t\taxisRow: \"axisRow\"\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tevents: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tbackgrounds: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\tcomputed: {\n\t\teventsWithRowInfo() {\n\t\t\tconst events = [];\n\t\t\tthis.events.forEach(event => {\n\t\t\t\tconst rows = [1, -1];\n\t\t\t\tif (event.startsHere) {\n\t\t\t\t\trows[0] = 't_' + event.start.diff(this.date).toMillis();\n\t\t\t\t}\n\t\t\t\tif (event.endsHere) {\n\t\t\t\t\trows[1] = 't_' + event.end.diff(this.date).toMillis();\n\t\t\t\t}\n\n\t\t\t\tevents.push({\n\t\t\t\t\t...event,\n\t\t\t\t\trows\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn events;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n\t`\n}\n","export default {\n\tname: \"GridLineBackground\",\n\tinject: {\n\t\tflipAxis: \"flipAxis\"\n\t},\n\tprops: {\n\t\tstart: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tend: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tbackground: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (!value.start && !value.end)\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.start && !(value.start instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\tif (value.end && !(value.end instanceof luxon.DateTime))\n\t\t\t\t\treturn false;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tstyles() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.style;\n\n\t\t\tconst perc = (this.end.ts - this.start.ts) / 100;\n\t\t\t\n\t\t\tlet border = {};\n\t\t\tif (this.background.startsHere)\n\t\t\t\tborder[this.flipAxis ? 'left' : 'top'] = (this.background.start.diff(this.start)) / perc + '%';\n\t\t\tif (this.background.endsHere)\n\t\t\t\tborder[this.flipAxis ? 'right' : 'bottom'] = (this.end.diff(this.background.end)) / perc + '%';\n\n\t\t\tif (!this.background.style)\n\t\t\t\treturn border;\n\t\t\t\n\t\t\treturn [this.background.style, border];\n\t\t},\n\t\tclasses() {\n\t\t\tif (!this.background.endsHere && !this.background.startsHere)\n\t\t\t\treturn this.background.class;\n\t\t\t\n\t\t\tconst result = [];\n\t\t\tif (this.background.class)\n\t\t\t\tresult.push(this.background.class);\n\t\t\tif (this.background.startsHere)\n\t\t\t\tresult.push('bg-begin');\n\t\t\tif (this.background.endsHere)\n\t\t\t\tresult.push('bg-end');\n\t\t\treturn result;\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ background.label }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDay\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleFull() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'long', year: 'numeric'});\n\t\t},\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({day: '2-digit', month: '2-digit', year: 'numeric'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric', month: 'numeric'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({day: 'numeric'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleFull }}\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelDow\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\ttitleLong() {\n\t\t\treturn this.date.toLocaleString({weekday: 'long'});\n\t\t},\n\t\ttitleShort() {\n\t\t\treturn this.date.toLocaleString({weekday: 'short'});\n\t\t},\n\t\ttitleNarrow() {\n\t\t\treturn this.date.toLocaleString({weekday: 'narrow'});\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t\n\t\t{{ titleLong }}\n\t\t{{ titleShort }}\n\t\t{{ titleNarrow }}\n\t\n\t`\n}\n","export default {\n\tname: \"LabelTime\",\n\tprops: {\n\t\tpart: {\n\t\t\ttype: [luxon.Duration, Number, Object],\n\t\t\trequired: true,\n\t\t\tvalidator(value) {\n\t\t\t\tif (value instanceof Object) {\n\t\t\t\t\tif (value instanceof luxon.Duration)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tlet start_ok = true;\n\t\t\t\t\tlet end_ok = true;\n\t\t\t\t\tif (value.start) {\n\t\t\t\t\t\tstart_ok = (\n\t\t\t\t\t\t\tvalue.start instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.start)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (value.end) {\n\t\t\t\t\t\tend_ok = (\n\t\t\t\t\t\t\tvalue.end instanceof luxon.Duration\n\t\t\t\t\t\t\t|| Number.isInteger(value.end)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn start_ok && end_ok;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tsanitizedTimestamps() {\n\t\t\treturn this.part.start || this.part.end ? this.part : { start: this.part };\n\t\t},\n\t\tstart() {\n\t\t\tif (!this.sanitizedTimestamps.start)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.start);\n\t\t},\n\t\tend() {\n\t\t\tif (!this.sanitizedTimestamps.end)\n\t\t\t\treturn null;\n\t\t\treturn this.formatTime(this.sanitizedTimestamps.end);\n\t\t}\n\t},\n\tmethods: {\n\t\tformatTime(date) {\n\t\t\treturn date.toISOTime({ suppressSeconds: true });\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t{{ start }}\n\t\t-\n\t\t{{ end }}\n\t
    \n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nimport { useResizeObserver } from '../../../../composables/Responsive.js';\n\nexport default {\n\tname: \"DayView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\toriginalEvents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\temptyMessage: String,\n\t\temptyMessageDetails: String\n\t},\n\temits: [\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tchosenEvent: null,\n\t\t\tgridMainRef: null\n\t\t};\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\treturn [this.day.startOf('day')];\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t},\n\t\tevents() {\n\t\t\treturn this.originalEvents\n\t\t\t\t.filter(event => event.start < this.day.plus({ days: 1 }) && event.end > this.day)\n\t\t\t\t.sort((a, b) => a.start.ts - b.start.ts)\n\t\t\t\t.map(evt => evt.orig);\n\t\t},\n\t\tcurrentEvent() {\n\t\t\tif (this.chosenEvent) {\n\t\t\t\tif (this.events.find(e => e == this.chosenEvent))\n\t\t\t\t\treturn this.chosenEvent;\n\t\t\t}\n\t\t\tlet first = null;\n\t\t\tif (this.events)\n\t\t\t\tfirst = this.events.find(Boolean); // undefined => none found\n\n\t\t\tif (first && first.type == 'loading')\n\t\t\t\treturn null; // null => loading\n\n\t\t\treturn first;\n\t\t},\n\t\tisToday() {\n\t\t\treturn this.day.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\twatch: {\n\t\tcompact() {\n\t\t\tif (this.compact) {\n\t\t\t\tif (this.chosenEvent) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.$emit('requestModalClose');\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\thandleClickDefaults(evt) {\n\t\t\tif (evt.detail.source == 'event') {\n\t\t\t\tthis.chosenEvent = evt.detail.value;\n\t\t\t\tif (this.compact) {\n\t\t\t\t\tthis.$emit('requestModalOpen', {\n\t\t\t\t\t\tevent: this.chosenEvent,\n\t\t\t\t\t\tcloseFn: () => { this.chosenEvent = null; }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tsetup() {\n\t\tconst container = Vue.ref(null); // use useTemplateRef when updating to Vue 3.5\n\t\tconst { compact } = useResizeObserver(container, 750);\n\n\t\treturn {\n\t\t\tcontainer, // must be exposed or it won't be set in Vue < 3.5\n\t\t\tcompact\n\t\t};\n\t},\n\tmounted() {\n\t\tthis.gridMainRef = this.$refs.grid.$refs.main;\n\t},\n\ttemplate: /* html */`\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ emptyMessage }}\n\t\t\t\n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t

    {{ emptyMessageDetails }}

    \n\t\t\t\n\t\t\n\t\n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport DayView from './Day/View.js';\n\nexport default {\n\tname: \"ModeDay\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tDayView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\",\n\t\t\"requestModalClose\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('day');\n\t\t\tlet last = this.focusDate.endOf('day');\n\t\t\t\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ days: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ days: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('day').diff(this.focusDate.startOf('day'), 'days').days;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(days) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ days });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(days) {\n\t\t\tconst day = this.focusDate.plus({ days });\n\t\t\treturn { ...this.$attrs, day };\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","/**\n * size returns the key of smallest threshold array (integer converts to\n * { compact: threshold }) entry that is bigger than the current width of\n * the element or 'full' if none is found.\n * compact is true if the smallest threshold array entry is bigger than the\n * current width or false otherwise.\n *\n * @param DOMElement|VueTemplateRef\t\telement\n * @param object|array|integer\t\t\tthreshold\n * @return object\t\t\t\t\t\t{ compact:Boolean, size:String }\n */\nexport function useResizeObserver(element, threshold) {\n\t/* Result Vars */\n\tconst compact = Vue.ref(false);\n\tconst size = Vue.ref(false);\n\n\t/* Helper Vars */\n\tconst mounted = Vue.ref(false);\n\tconst elementRef = Vue.computed(() => {\n\t\tif (!Vue.isRef(element))\n\t\t\treturn element;\n\t\t\n\t\tif (!element.value)\n\t\t\treturn element.value;\n\t\t\n\t\tif (element.value.$el) // Maybe there is a better test\n\t\t\treturn element.value.$el;\n\n\t\treturn element.value;\n\t});\n\tconst compareArray = Vue.computed(() => {\n\t\tconst input = Vue.isRef(threshold) ? threshold.value : threshold;\n\t\tif (Number.isInteger(input))\n\t\t\treturn [['compact', input]];\n\t\tif (Array.isArray(input))\n\t\t\treturn input.map((value, key) => [key, value]).sort((a, b) => a[1]-b[1]);\n\t\treturn Object.entries(input).sort((a, b) => a[1]-b[1]);\n\t});\n\n\t/* Helper Functions */\n\tfunction updateResultVars() {\n\t\tconst compare = threshold.value || threshold;\n\t\tif (elementRef.value.offsetWidth === undefined)\n\t\t\treturn;\n\n\t\tconst found = compareArray.value.find(compare => compare[1] > elementRef.value.offsetWidth);\n\n\t\tsize.value = found ? found[0] : 'full';\n\t\tcompact.value = (size.value == compareArray.value[0][0]);\n\t}\n\n\t/* Observer */\n\tconst observer = new ResizeObserver(() => {\n\t\tif (elementRef.value) {\n\t\t\tupdateResultVars();\n\t\t}\n\t});\n\t/* Observer Helper Functions */\n\tfunction addObserver() {\n\t\tif (!elementRef.value)\n\t\t\treturn;\n\n\t\tupdateResultVars();\n\t\tobserver.observe(elementRef.value);\n\t\tmounted.value = true;\n\t}\n\tfunction removeObserver() {\n\t\tif (mounted.value) {\n\t\t\tobserver.disconnect()\n\t\t}\n\t}\n\n\t/* Main Logic */\n\tVue.onMounted(addObserver);\n\tVue.onUnmounted(removeObserver);\n\t\n\tVue.watchEffect(() => {\n\t\tif (elementRef.value) {\n\t\t\tremoveObserver();\n\t\t\taddObserver();\n\t\t}\n\t});\n\n\treturn { compact, size };\n}","import BaseSlider from '../Base/Slider.js';\nimport WeekView from './Week/View.js';\n\nexport default {\n\tname: \"ModeWeek\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tWeekView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = this.focusDate.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = first.plus({ weeks: this.rangeOffset });\n\t\t\t\t} else {\n\t\t\t\t\tlast = last.plus({ weeks: this.rangeOffset });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('week', { useLocaleWeeks: true }).diff(this.focusDate.startOf('week', { useLocaleWeeks: true }), 'weeks').weeks;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$refs.view.$refs.grid.disableAutoScroll();\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(weeks) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ weeks });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t\t},\n\t\tviewAttrs(weeks) {\n\t\t\tconst day = this.focusDate.plus({ weeks });\n\t\t\treturn { ...this.$attrs, day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t\tthis.$refs.view.$refs.grid.enableAutoScroll();\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelDay from '../../Base/Label/Day.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelTime from '../../Base/Label/Time.js';\n\nexport default {\n\tname: \"WeekView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelDay,\n\t\tLabelDow,\n\t\tLabelTime\n\t},\n\tinject: {\n\t\ttimeGrid: \"timeGrid\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t},\n\t\tcollapseEmptyDays: Boolean\n\t},\n\tcomputed: {\n\t\tstart() {\n\t\t\treturn this.day.startOf('week', { useLocaleWeeks: true });\n\t\t},\n\t\taxisMain() {\n\t\t\treturn Array.from({ length: 7 }, (e, i) => this.start.plus({ days: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\tif (this.timeGrid) {\n\t\t\t\t// create {start, end} array\n\t\t\t\treturn this.timeGrid.map(tu => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tstart: luxon.Duration.fromISOTime(tu.start),\n\t\t\t\t\t\tend: luxon.Duration.fromISOTime(tu.end)\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// create 07:00-23:00\n\t\t\t\treturn Array.from({ length: 17 }, (e, i) => luxon.Duration.fromObject({ hours: i + 7 }));\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import BaseSlider from '../Base/Slider.js';\nimport MonthView from './Month/View.js';\n\nexport default {\n\tname: \"ModeMonth\",\n\tcomponents: {\n\t\tBaseSlider,\n\t\tMonthView\n\t},\n\tprops: {\n\t\tcurrentDate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:currentDate\",\n\t\t\"update:range\",\n\t\t\"click\",\n\t\t\"requestModalOpen\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tfocusDate: this.currentDate,\n\t\t\trangeOffset: 0\n\t\t};\n\t},\n\tcomputed: {\n\t\trange() {\n\t\t\tlet first = this.focusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\tlet last = first.plus({ days: 41 }).endOf('day'); // NOTE(chris): 6 weeks minus 1 day\n\n\t\t\tif (this.rangeOffset != 0) {\n\t\t\t\tconst nextFocusDate = this.focusDate.plus({ months: this.rangeOffset});\n\t\t\t\tconst nextRangeStart = nextFocusDate.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\t\tif (this.rangeOffset < 0) {\n\t\t\t\t\tfirst = nextRangeStart;\n\t\t\t\t} else {\n\t\t\t\t\tlast = nextRangeStart.plus({ days: 41 }).endOf('day');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn luxon.Interval.fromDateTimes(first, last);\n\t\t}\n\t},\n\twatch: {\n\t\tcurrentDate() {\n\t\t\tif (this.currentDate.locale != this.focusDate.locale) {\n\t\t\t\tthis.focusDate = this.currentDate;\n\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t} else {\n\t\t\t\tthis.rangeOffset = this.currentDate.startOf('month').diff(this.focusDate.startOf('month'), 'months').months;\n\t\t\t\tif (this.rangeOffset) {\n\t\t\t\t\tthis.$emit('update:range', this.range);\n\t\t\t\t\tthis.$refs.slider.slidePages(this.rangeOffset).then(this.updatePage);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\tprevPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target - 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.prevPage().then(this.updatePage);\n\t\t},\n\t\tnextPage() {\n\t\t\tthis.rangeOffset = this.$refs.slider.target + 1;\n\t\t\tthis.$emit('update:range', this.range);\n\t\t\tthis.$refs.slider.nextPage().then(this.updatePage);\n\t\t},\n\t\tupdatePage(months) {\n\t\t\tconst newFocusDate = this.focusDate.plus({ months });\n\t\t\tthis.focusDate = newFocusDate;\n\t\t\tthis.rangeOffset = 0;\n\t\t\tthis.$emit('update:currentDate', this.focusDate);\n\t\t\tthis.$emit('update:range', this.range);\n\t\t},\n\t\tviewAttrs(months) {\n\t\t\tconst day = this.focusDate.plus({ months });\n\t\t\treturn { day };\n\t\t},\n\t\thandleClickDefaults(evt) {\n\t\t\tswitch (evt.detail.source) {\n\t\t\tcase 'week':\n\t\t\t\t// default: Move to week if not in month\n\t\t\t\tlet dayInWeek = luxon.DateTime.fromObject({\n\t\t\t\t\tlocalWeekNumber: evt.detail.value.number,\n\t\t\t\t\tlocalWeekYear: evt.detail.value.year\n\t\t\t\t}, {\n\t\t\t\t\tzone: this.currentDate.zoneName,\n\t\t\t\t\tlocale: this.currentDate.locale\n\t\t\t\t});\n\n\t\t\t\tif (!this.focusDate.hasSame(dayInWeek.startOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.startOf('week', { useLocaleWeeks: true }));\n\t\t\t\t} else if (!this.focusDate.hasSame(dayInWeek.endOf('week', { useLocaleWeeks: true }), 'month')) {\n\t\t\t\t\tthis.$emit('update:currentDate', dayInWeek.endOf('week', { useLocaleWeeks: true }));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'day':\n\t\t\t\t// default: Set current-date\n\t\t\t\tthis.$emit('update:currentDate', evt.detail.value);\n\t\t\t\tbreak;\n\t\t\tcase 'event':\n\t\t\t\t// default: Request Modal\n\t\t\t\tthis.$emit('requestModalOpen', { event: evt.detail.value });\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$emit('update:range', this.range);\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\t`\n}\n","import CalendarGrid from '../../Base/Grid.js';\nimport LabelWeek from '../../Base/Label/Week.js';\nimport LabelDow from '../../Base/Label/Dow.js';\nimport LabelDay from '../../Base/Label/Day.js';\n\nexport default {\n\tname: \"MonthView\",\n\tcomponents: {\n\t\tCalendarGrid,\n\t\tLabelWeek,\n\t\tLabelDow,\n\t\tLabelDay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\t// NOTE(chris): snap events to day\n\t\t\tevents: Vue.computed(() => {\n\t\t\t\t//const events = [];\n\t\t\t\tconst events = this.events.map(event => {\n\t\t\t\t\tconst start = event.start.startOf('day');\n\t\t\t\t\tconst end = event.end.plus({ days: 1 }).startOf('day');\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...event,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tfor (var w = 5; w > -1; w--) {\n\t\t\t\t\tfor (var d = 6; d > -1; d--) {\n\t\t\t\t\t\tconst startdate = this.axisMain[w].plus(this.axisParts[d]);\n\t\t\t\t\t\tevents.unshift({\n\t\t\t\t\t\t\tstart: startdate,\n\t\t\t\t\t\t\tend: startdate.plus({ days: 1 }),\n\t\t\t\t\t\t\torig: 'header'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn events;\n\t\t\t})\n\t\t};\n\t},\n\tinject: {\n\t\tevents: \"events\",\n\t\ttimezone: \"timezone\"\n\t},\n\tprops: {\n\t\tday: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\taxisMain() {\n\t\t\tconst start = this.day.startOf('month').startOf('week', { useLocaleWeeks: true });\n\t\t\treturn Array.from({ length: 6 }, (e, i) => start.plus({ weeks: i }));\n\t\t},\n\t\taxisParts() {\n\t\t\treturn Array.from({ length: 8 }, (e, i) => luxon.Duration.fromObject({ days: i }));\n\t\t}\n\t},\n\tmethods: {\n\t\tisToday(date) {\n\t\t\treturn date.hasSame(luxon.DateTime.now().setZone(this.timezone), 'day');\n\t\t}\n\t},\n\ttemplate: /* html */`\n\t
    \n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t
    \n\t`\n}\n","import CalClick from '../../../../directives/Calendar/Click.js';\n\nexport default {\n\tname: \"LabelWeek\",\n\tdirectives: {\n\t\tCalClick\n\t},\n\tprops: {\n\t\tdate: {\n\t\t\ttype: luxon.DateTime,\n\t\t\trequired: true\n\t\t}\n\t},\n\tcomputed: {\n\t\tweeks() {\n\t\t\tconst firstDay = this.date.startOf('week', { useLocaleWeeks: true });\n\t\t\tconst lastDay = this.date.endOf('week', { useLocaleWeeks: true });\n\n\t\t\tconst weeks = [\n\t\t\t\t{ number: firstDay.localWeekNumber, year: firstDay.localWeekYear },\n\t\t\t\t{ number: lastDay.localWeekNumber, year: lastDay.localWeekYear }\n\t\t\t];\n\t\t\tif (weeks[0].number == weeks[1].number)\n\t\t\t\tweeks.pop();\n\t\t\treturn weeks;\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t\t{{ week.number }}\n\t\t\n\t
    \n\t`\n}\n","import FhcCalendar from \"./Base.js\";\n\nimport ApiLvPlan from '../../api/factory/lvPlan.js';\n\nimport { useEventLoader } from '../../composables/EventLoader.js';\n\nimport ModeDay from './Mode/Day.js';\nimport ModeWeek from './Mode/Week.js';\nimport ModeMonth from './Mode/Month.js';\n\nexport default {\n\tname: \"CalendarLvPlan\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tinject: [\n\t\t\"renderers\"\n\t],\n\tprops: {\n\t\ttimezone: {\n\t\t\ttype: String,\n\t\t\trequired: true\n\t\t},\n\t\tdate: {\n\t\t\ttype: [Date, String, Number, luxon.DateTime],\n\t\t\tdefault: luxon.DateTime.local()\n\t\t},\n\t\tmode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'Week'\n\t\t},\n\t\tgetPromiseFunc: {\n\t\t\ttype: Function,\n\t\t\trequired: true\n\t\t}\n\t},\n\temits: [\n\t\t\"update:date\",\n\t\t\"update:mode\",\n\t\t\"update:range\"\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tmodes: {\n\t\t\t\tday: Vue.markRaw(ModeDay),\n\t\t\t\tweek: Vue.markRaw(ModeWeek),\n\t\t\t\tmonth: Vue.markRaw(ModeMonth)\n\t\t\t},\n\t\t\tmodeOptions: {\n\t\t\t\tday: {\n\t\t\t\t\temptyMessage: Vue.computed(() => this.$p.t('lehre/noLvFound')),\n\t\t\t\t\temptyMessageDetails: Vue.computed(() => this.$p.t('lehre/noLvFound'))\n\t\t\t\t},\n\t\t\t\tweek: {\n\t\t\t\t\tcollapseEmptyDays: false\n\t\t\t\t}\n\t\t\t},\n\t\t\tteachingunits: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tbackgrounds() {\n\t\t\tlet now = luxon.DateTime.now().setZone(this.timezone);\n\n\t\t\tif (this.mode == 'Month')\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\t\tend: now.startOf('day')\n\t\t\t\t\t}\n\t\t\t\t];\n\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tclass: 'background-past',\n\t\t\t\t\tend: now,\n\t\t\t\t\tlabel: now.startOf('minute').toISOTime({ suppressSeconds: true, includeOffset: false })\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\teventStyle(event) {\n\t\t\tif (!event.farbe)\n\t\t\t\treturn undefined;\n\t\t\treturn '--event-bg:#' + event.farbe;\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.rangeInterval = rangeInterval;\n\t\t\tthis.$emit('update:range', rangeInterval);\n\t\t}\n\t},\n\tsetup(props, context) {\n\t\tconst rangeInterval = Vue.ref(null);\n\t\t\n\t\tconst { events, lv } = useEventLoader(rangeInterval, props.getPromiseFunc);\n\n\t\tVue.watch(lv, newValue => {\n\t\t\tcontext.emit('update:lv', newValue);\n\t\t});\n\n\t\treturn {\n\t\t\trangeInterval,\n\t\t\tevents,\n\t\t\tlv\n\t\t};\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getStunden())\n\t\t\t.then(res => {\n\t\t\t\treturn this.teachingunits = res.data.map(el => ({\n\t\t\t\t\tid: el.stunde,\n\t\t\t\t\tstart: el.beginn,\n\t\t\t\t\tend: el.ende\n\t\t\t\t}));\n\t\t\t});\n\t},\n\ttemplate: /* html */`\n\t $emit('update:date', newDate, newMode)\"\n\t\t@update:mode=\"(newMode, newDate) => $emit('update:mode', newMode, newDate)\"\n\t\t@update:range=\"updateRange\"\n\t>\n\t\t\n\t\t\n\t`\n}\n","// TODO(chris): load events that are longer than the interval without doubling it\n\nexport function useEventLoader(rangeInterval, getPromiseFunc) {\n\tlet loading_id = 0;\n\tconst events = Vue.ref([]);\n\tconst loadingEvents = Vue.ref([]);\n\tconst allEvents = Vue.computed(() => events.value.concat(loadingEvents.value));\n\tconst lv = Vue.ref(null);\n\tconst eventsLoaded = [];\n\n\tconst mergePromiseArr = (n, o) => {\n\t\tif (Array.isArray(n))\n\t\t\treturn o.concat(n);\n\t\treturn o.push(n), o;\n\t};\n\n\tconst markEventsLoaded = (start, end) => {\n\t\tlet result = [];\n\t\tif (!eventsLoaded.length) {\n\t\t\t// empty: add new chunk\n\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t} else {\n\t\t\tif (eventsLoaded[eventsLoaded.length-1] + 1 == start.ts) {\n\t\t\t\t// add to the end of last chunk\n\t\t\t\teventsLoaded[eventsLoaded.length-1] = end.ts;\n\t\t\t} else if (eventsLoaded[eventsLoaded.length-1] < start.ts) {\n\t\t\t\t// add new chunk after the last chunk\n\t\t\t\teventsLoaded.push(start.ts, end.ts);\n\t\t\t} else if (eventsLoaded[0] == end.ts + 1) {\n\t\t\t\t// add to the start of first chunk\n\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t} else if (eventsLoaded[0] > end.ts) {\n\t\t\t\teventsLoaded.unshift(start.ts, end.ts);\n\t\t\t} else {\n\t\t\t\tlet index = eventsLoaded.findIndex(e => e >= start.ts);\n\n\t\t\t\tif (index % 2) {\n\t\t\t\t\t// starts inside an existing chunk\n\t\t\t\t\tif (eventsLoaded[index] >= end.ts)\n\t\t\t\t\t\treturn []; // Already loaded\n\n\t\t\t\t\tlet indexIsLast = (index == eventsLoaded.length - 1);\n\n\t\t\t\t\tif (indexIsLast || eventsLoaded[index + 1] > end.ts) {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and merge with the next if necessary\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tif (!indexIsLast && eventsLoaded[index + 1] == end.ts + 1)\n\t\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\teventsLoaded[index] = end.ts;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// merge exising chunks\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 2] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 2] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet nStart = eventsLoaded[index] + 1;\n\t\t\t\t\t\tstart = start.plus(nStart - start.ts);\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index + 1] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded.splice(index, 2);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// starts between two chunks or before the first\n\t\t\t\t\tif (!index) {\n\t\t\t\t\t\t// extend the first chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[0] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[0] = start.ts;\n\t\t\t\t\t} else if (eventsLoaded[index] == start.ts) {\n\t\t\t\t\t\t// starts at the same position as an existing chunk\n\t\t\t\t\t\tif (eventsLoaded[index + 1] >= end.ts)\n\t\t\t\t\t\t\treturn []; // Already loaded\n\t\t\t\t\t\t// load the rest\n\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// extend an existing chunk\n\t\t\t\t\t\t// and load the rest if necessary\n\t\t\t\t\t\tif (eventsLoaded[index + 1] < end.ts) {\n\t\t\t\t\t\t\tlet rStart = eventsLoaded[index + 1] + 1;\n\t\t\t\t\t\t\tresult = mergePromiseArr(markEventsLoaded(start.plus(rStart - start.ts), end), result);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet nEnd = eventsLoaded[index] - 1;\n\t\t\t\t\t\tend = end.plus(nEnd - end.ts);\n\t\t\t\t\t\teventsLoaded[index] = start.ts;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (start.ts >= end.ts)\n\t\t\treturn result;\n\n\t\tloadingEvents.value.push({\n\t\t\tloading_id: loading_id++,\n\t\t\ttype: \"loading\",\n\t\t\tisostart: start.toISODate() + 'T' + start.toISOTime(),\n\t\t\tisoend: end.toISODate() + 'T' + end.toISOTime()\n\t\t});\n\n\t\treturn mergePromiseArr(getPromiseFunc(start, end), result);\n\t};\n\n\tVue.watchEffect(() => {\n\t\tconst range = Vue.toValue(rangeInterval);\n\t\tif (!(range instanceof luxon.Interval))\n\t\t\treturn;\n\t\tconst promises = markEventsLoaded(range.start, range.end);\n\t\tPromise\n\t\t\t.allSettled(promises)\n\t\t\t.then(results => {\n\t\t\t\tresults.forEach(res => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tres.status === 'fulfilled'\n\t\t\t\t\t\t&& res.value.meta.status === \"success\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (res.value.meta.lv)\n\t\t\t\t\t\t\tlv.value = res.value.meta.lv;\n\n\t\t\t\t\t\tevents.value = events.value.concat(res.value.data);\n\t\t\t\t\t\tloadingEvents.value = [];\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t})\n\n\treturn { events: allEvents, lv }\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAuthUID() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthUID'\n\t\t};\n\t},\n\tgetAuthInfo() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/AuthInfo/getAuthInfo'\n\t\t};\n\t}\n};","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanLehrveranstaltung',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tlv: null\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tcurrentLv() {\n\t\t\tif (isNaN(parseInt(this.propsViewData?.lv_id)))\n\t\t\t\treturn null;\n\t\t\treturn this.propsViewData.lv_id;\n\t\t},\n\t\tlvTitle() {\n\t\t\tif (this.currentLv === null)\n\t\t\t\treturn '';\n\t\t\tif (!this.lv)\n\t\t\t\treturn '';\n\n\t\t\tif (this.$p.user_language.value === 'English')\n\t\t\t\treturn this.lv.bezeichnung_english;\n\n\t\t\treturn this.lv.bezeichnung;\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"LvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tlv_id: this.currentLv\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsLv(this.propsViewData.lv_id, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tif (this.currentLv === null)\n\t\t\treturn;\n\t\tthis.$api\n\t\t\t.call(ApiLvPlan.getLv(this.propsViewData?.lv_id))\n\t\t\t.then(res => {\n\t\t\t\tthis.lv = res.data;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ lvTitle }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t('lehre/noLvFound') }}\n\t\t
    \n\t\t\n\t
    `\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\nimport ApiAuthinfo from '../../../api/factory/authinfo.js';\n\nexport const DEFAULT_MODE_LVPLAN = 'Week'\n\nexport default {\n\tname: 'LvPlanPersonal',\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops: {\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tstudiensemester_kurzbz: null,\n\t\t\tstudiensemester_start: null,\n\t\t\tstudiensemester_ende: null,\n\t\t\tuid: null,\n\t\t\tisMitarbeiter: false,\n\t\t\tisStudent: false\n\t\t};\n\t},\n\tcomputed:{\n\t\tcurrentDay() {\n\t\t\tif (!this.propsViewData?.focus_date || isNaN(new Date(this.propsViewData?.focus_date)))\n\t\t\t\treturn luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t\treturn this.propsViewData?.focus_date;\n\t\t},\n\t\tcurrentMode() {\n\t\t\tif (!this.propsViewData?.mode || !['day', 'week', 'month'].includes(this.propsViewData?.mode.toLowerCase()))\n\t\t\t\treturn DEFAULT_MODE_LVPLAN;\n\t\t\treturn this.propsViewData?.mode;\n\t\t},\n\t\tdownloadLinks() {\n\t\t\tif (!this.studiensemester_start || !this.studiensemester_ende || !this.uid)\n\t\t\t\treturn false;\n\n\t\t\tlet type = false;\n\t\t\ttype = this.isStudent ? 'student' : type;\n\t\t\ttype = this.isMitarbeiter ? 'lektor' : type;\n\t\t\tif (false === type)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst opts = { zone: this.viewData.timezone };\n\t\t\tconst start = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_start, opts)\n\t\t\t\t.toUnixInteger();\n\t\t\tconst ende = luxon.DateTime\n\t\t\t\t.fromISO(this.studiensemester_ende, opts)\n\t\t\t\t.toUnixInteger();\n\n\t\t\tconst download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t+ 'cis/private/lvplan/stpl_kalender.php'\n\t\t\t\t+ '?type=' + type\n\t\t\t\t+ '&pers_uid=' + this.uid\n\t\t\t\t+ '&begin=' + start\n\t\t\t\t+ '&ende=' + ende;\n\n\t\t\treturn [\n\t\t\t\t{ title: \"excel\", icon: 'fa-solid fa-file-excel', link: download_link + '&format=excel' },\n\t\t\t\t{ title: \"csv\", icon: 'fa-solid fa-file-csv', link: download_link + '&format=csv' },\n\t\t\t\t{ title: \"ical1\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=1&target=ical' },\n\t\t\t\t{ title: \"ical2\", icon: 'fa-regular fa-calendar', link: download_link + '&format=ical&version=2&target=ical' }\n\t\t\t];\n\t\t}\n\t},\n\tmethods: {\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\t\t\t\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"MyLvPlan\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tupdateRange(rangeInterval) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiLvPlan.studiensemesterDateInterval(\n\t\t\t\t\trangeInterval.end.startOf('week').toISODate()\n\t\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.studiensemester_kurzbz = res.data.studiensemester_kurzbz;\n\t\t\t\t\tthis.studiensemester_start = res.data.start;\n\t\t\t\t\tthis.studiensemester_ende = res.data.ende;\n\t\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.eventsPersonal(start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getLvPlanReservierungen(start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiAuthinfo.getAuthInfo())\n\t\t\t.then(res => {\n\t\t\t\tthis.uid = res.data.uid;\n\t\t\t\tthis.isMitarbeiter = res.data.isMitarbeiter;\n\t\t\t\tthis.isStudent = res.data.isStudent;\n\t\t\t});\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    \n\t\t\t{{ $p.t('lehre/stundenplan') }}\n\t\t\t\n\t\t\t\t{{ studiensemester_kurzbz }}\n\t\t\t\n\t\t

    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t`\n};\n","import BsModal from '../../../../../Bootstrap/Modal.js';\n\nconst pruefungen = {};\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tmixins: [\n\t\tBsModal\n\t],\n\tprops: {\n\t\tpruefungenData: Array|null,\n\t\tbezeichnung: String,\n\t\t/*\n\t\t * NOTE(chris): \n\t\t * Hack to expose in \"emits\" declared events to $props which we use \n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t*/\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function\n\t},\n\tdata: () => ({\n\t\tresult: true,\n\t}),\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\treturn BsModal.popup.bind(this)(null, options);\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetStudentenMail(lehreinheit_id) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Lehre/lvStudentenMail',\n\t\t\tparams: { lehreinheit_id }\n\t\t};\n\t},\n\tgetLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`\n\t\t};\n\t},\n\tgetStudentPruefungen(lehrveranstaltung_id) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`\n\t\t};\n\t}\n};","import ApiLehre from '../../../../../../api/factory/lehre.js';\n\nconst infos = {};\n\nexport default {\n\tprops:{\n\t\tstudien_semester: String,\n\t\tlehrveranstaltung_id: Number,\n\t},\n\tdata: () => ({\n\t\tbezeichnung: null,\n\t\tstudiengang_kuerzel: null,\n\t\tsemester: null,\n\t\torgform_kurzbz: null,\n\t\tsprache: null,\n\t\tects: null,\n\t\tincoming: null,\n\t\tresult: true,\n\t\tinfo: null,\n\t}),\n\tcomputed: {\n\t\tlektorNamesLinks(){\n\t\t\tlet lektorenLinks = {};\n\t\t\tthis.info.lektoren.forEach(e => {\n\t\t\t\tlet name = ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim();\n\t\t\t\tlektorenLinks[name] = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + `/Cis/Profil/View/${e.uid}`;\n\t\t\t});\n\t\t\treturn lektorenLinks;\n\t\t},\n\t\tlektorNames(){\n\t\t\treturn this.info.lektoren.map((e)=>((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tlvLeitung() {\n\t\t\treturn this.info.lvLeitung && this.info.lvLeitung.length ? this.info.lvLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim()) : null;\n\t\t},\n\t\toe() {\n\t\t\treturn this.info.oe.organisationseinheittyp ? (this.info.oe.organisationseinheittyp + ' ' + this.info.oe.bezeichnung) : '';\n\t\t},\n\t\toeLeitung() {\n\t\t\tif (!this.info.oeLeitung || !this.info.oeLeitung.length)\n\t\t\t\treturn ['-'];\n\t\t\treturn this.info.oeLeitung.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tkoordinator() {\n\t\t\tif (!this.info.koordinator || !this.info.koordinator.length)\n\t\t\t\treturn null;\n\t\t\treturn this.info.koordinator.map(e => ((e.titelpre || '') + ' ' + (e.vorname || '') + ' ' + (e.nachname || '') + ' ' + (e.titelpost || '')).trim());\n\t\t},\n\t\tcurrentLang() {\n\t\t\tif (!this.info)\n\t\t\t\treturn null;\n\t\t\tif (this.info.lastLang)\n\t\t\t\treturn this.info.lastLang;\n\t\t\tif (!this.info.lvinfo)\n\t\t\t\treturn null;\n\t\t\treturn this.info.lvinfoDefaultLang && this.info.lvinfo[this.info.lvinfoDefaultLang] ? this.info.lvinfoDefaultLang : Object.keys(this.info.lvinfo).shift();\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api.call(ApiLehre.getLvInfo(this.studien_semester, this.lehrveranstaltung_id))\n\t\t.then(\n\t\t\tres => res.data\n\t\t).then(data =>{\n\t\t\tObject.assign(this, \n\t\t\t\t{\n\t\t\t\t\tbezeichnung : data.bezeichnung,\n\t\t\t\t\tstudiengang_kuerzel: data.studiengang_kuerzel,\n\t\t\t\t\tsemester: data.semester,\n\t\t\t\t\torgform_kurzbz: data.orgform_kurzbz,\n\t\t\t\t\tsprache: data.sprache,\n\t\t\t\t\tects: data.ects,\n\t\t\t\t\tincoming: data.incoming ?? '-',\n\t\t\t\t});\n\t\t})\n\n\t\tif (infos[this.lehrveranstaltung_id]) {\n\t\t\tthis.info = infos[this.lehrveranstaltung_id];\n\t\t} else {\n\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Info/' + this.studien_semester + '/' + this.lehrveranstaltung_id).then(res => {\n\t\t\t\tthis.info = infos[this.lehrveranstaltung_id] = res.data.retval || [];\n\t\t\t}).catch(() => this.info = {});\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t\t\t

    {{$p.t('lvinfo/lehrveranstaltungsinformationen')}}

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    {{$p.t('lehre/lehrveranstaltung')}}{{bezeichnung}}
    {{$p.t('lehre/studiengang')}}{{studiengang_kuerzel}}
    {{$p.t('lehre/semester')}}{{semester}}
    {{$p.t('lehre/studiensemester')}}{{studien_semester}}
    {{$p.t('lehre/organisationsform')}}{{orgform_kurzbz}}
    {{$p.t('lehre/lehrbeauftragter')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    {{$p.t('lehre/lvleitung')}}\n\t\t\t\t\t\t\t\t
      \n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{{name}}\n\t\t\t\t\t\t\t\t\t
    • \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    {{$p.t('global/sprache')}}{{sprache}}
    {{$p.t('lehre/ects')}}{{ects}}
    {{$p.t('lehre/incomingplaetze')}}{{incoming}}
    {{$p.t('lehre/organisationseinheit')}}\n\t\t\t\t\t\t\t\t{{oe}}
    \n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{{$p.t('global/leitung')}}: {{oeLeitung.join(', ')}}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t
    \n\t\n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    1\" class=\"text-end\">\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    `\n}\n","const categories = {};\nconst loadingModules = {};\n\nfunction extractCategory(obj, category) {\n\treturn obj.filter(e => e.category == category).reduce((res, elem) => {\n\t\tif (!res[elem.phrase])\n\t\t\tres[elem.phrase] = elem.text;\n\t\treturn res;\n\t}, {});\n}\nfunction reloadRefs(category) {\n\twhile (loadingModules[category].length) {\n\t\tvar v = loadingModules[category].pop();\n\t\tv[0].value = getValueForLoadedPhrase(category, v[1], v[2]);\n\t\tVue.triggerRef(v[0]);\n\t\t/*Vue.unref(v);*/\n\t}\n}\nfunction loadLazy(category, val, phrase, params) {\n\t// NOTE(chris): load module if it's not loaded yet\n\tif (loadingModules[category]) {\n\t\tloadingModules[category].push([val, phrase, params]);\n\t\tif (categories[category]) // NOTE(chris): this is for safety in case the loading finished the moment before the val was pushed into the array\n\t\t\treloadRefs(category);\n\t\treturn;\n\t}\n\tloadingModules[category] = [[val, phrase, params]];\n\n\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Phrasen/loadModule/' + category).then(res => {\n\t\tif (res.data.retval)\n\t\t\tcategories[category] = extractCategory(res.data.retval, category);\n\t\telse\n\t\t\tcategories[category] = {};\n\n\t\treloadRefs(category);\n\t}).catch(err => console.error(err));\n}\nfunction getValueForLoadedPhrase(category, phrase, params) {\n\tlet result = categories[category][phrase];\n\tif (!result)\n\t\treturn '<< PHRASE ' + phrase + '>>';\n\tif (params)\n\t\tresult = result.replace(/\\{([^}]*)\\}/g, (match, p1) => params[p1] === undefined ? match : params[p1]);\n\treturn result;\n}\n\n\nconst phrasen = {\n\tt_ref(category, phrase, params) {\n\t\tif (params === undefined && (\n\t\t\t(Array.isArray(category) && category.length == 2) ||\n\t\t\t(category.split && category.split('/').length == 2))\n\t\t\t) {\n\t\t\tparams = phrase;\n\t\t\t[category, phrase] = category.split ? category.split('/') : category;\n\t\t}\n\t\tif (phrase === undefined) {\n\t\t\tconsole.error('invalid input');\n\t\t\treturn '';\n\t\t}\n\t\tif (!categories[category]) {\n\t\t\t\n\t\t\tvar initialval = '';\n \t\t\tif (window.FHC_JS_PHRASES_STORAGE_OBJECT !== undefined) {\n \t\t\t\tvar tmp_category = extractCategory(FHC_JS_PHRASES_STORAGE_OBJECT, category);\n\t\t\t\tif(tmp_category[phrase] !== undefined ) {\n\t\t\t\t\tinitialval = tmp_category[phrase];\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (!categories[category] || Object.keys(categories[category]).length === 0) {\n\t\t\t\tcategories[category] = undefined;\n\t\t\t\tlet val = Vue.ref(initialval);\n\t\t\t\tloadLazy(category, val, phrase, params);\n\t\t\t\treturn val;\n\t\t\t}\n\t\t}\n\t\tvar result = getValueForLoadedPhrase(category, phrase, params);\n\t\treturn Vue.ref(result);\n\t},\n\tt(category, phrase, params) {\n\t\treturn Vue.unref(this.t_ref(category, phrase, params));\n\t}\n};\n\nexport default {\n\tdata: () => {\n\t\treturn {\n\t\t\tp: phrasen\n\t\t}\n\t}\n}\n\n// Composable (wrapper for mixin)\nexport function usePhrasen() {\n\n\tfunction t(category, phrase, params) {\n\t\treturn phrasen.t(category, phrase, params);\n\t}\n\n\treturn {\t\t\n\t\tt,\n\t}\n\n}\n","\nexport default {\n\tprops:{\n\t\tmenu:{\n\t\t\ttype:Array,\n\t\t\tdefault:null,\n\t\t},\n\t\tcontainerStyles: Array,\n\t\trowStyles: Array,\n\t\thasLvPlanEintraege: {\n\t\t\trequired:false,\n\t\t\tdefault:true,\n\t\t\ttype:Boolean,\n\t\t},\n\t},\n\tdata(){\n\t\treturn{\n\t\t\t\n\t\t}\n\t},\n\tmethods:{\n\t\tc4_disabled: function (menuItem) {\n\t\t\tif (!this.c4_link(menuItem) && !menuItem.c4_moodle_links?.length) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (menuItem.id == \"addon_fhtw_menu_lvplan_lva\" && !this.hasLvPlanEintraege){\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tc4_target: function (menuItem) {\n\t\t\tif (menuItem.c4_moodle_links?.length > 0) return null;\n\t\t\treturn menuItem.c4_target ?? null;\n\t\t},\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) \n\t\t\t{\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\tgetMenuName(menuItem) {\n\t\t\tif(menuItem.phrase) {\n\t\t\t\treturn this.$p.t(menuItem.phrase)\n\t\t\t} else {\n\t\t\t\treturn menuItem.name\n\t\t\t}\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    {{$p.t('lehre','lehrveranstaltungsUnavailable')}}
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t

    {{ getMenuName(menuItem) }}

    \n\t\t\t\t\t\t
    {{text}}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetLvMenu(lvid, studiensemester_kurzbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/LvMenu/getLvMenu/${lvid}/${studiensemester_kurzbz}`\n\t\t};\n\t}\n};","import BsModal from \"../../Bootstrap/Modal.js\";\nimport LvMenu from \"./LvMenu.js\";\n\nimport ApiAddons from '../../../api/factory/addons.js';\n\nexport default {\n \n props:{\n event:{\n type:Object,\n required:true,\n default:null,\n },\n\t\tstudiensemester: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t\t// prop used to preselect a menu item and skip the grid overview\n\t\tpreselectedMenu: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t}\n },\n data(){\n return {\n result: false,\n menu: [],\n\t\t\tisMenuSelected:false,\n\t\t\thasLvPlanEintraege: true,\n\t\t\tlvEvaluierungMessage: \"\",\n }\n },\n mixins:[BsModal],\n components:{\n BsModal,\n\t\tLvMenu,\n },\n\tinject: [\"studium_studiensemester\"],\n methods:{\n \n hiddenModal: function(){\n\t\t\tthis.isMenuSelected = false;\n },\n showModal: function(){\n\t\t\tif (!this.preselectedMenu) {\n this.$api\n\t\t\t\t\t.call(ApiAddons.getLvMenu(this.event.lehrveranstaltung_id, (this.studiensemester ?? this.event.studiensemester_kurzbz)))\n .then(res => {\n \t\t\t\t\tif (res.data) {\n \t\t\t\t\t\tthis.menu = res.data;\n \t\t\t\t\t}\n \t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.isMenuSelected = true;\n\t\t\t}\n\n\t\t\t// check lv evaluierung info\n\t\t\tif (this.studium_studiensemester) {\n\t\t\t\tthis.$fhcApi.factory.studium.getLvEvaluierungInfo(this.studium_studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.lvEvaluierungMessage = res.message;\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// check if the lv has lvplan entries for this studiensemester\n\t\t\tif (this.studiensemester && this.event) {\n\t\t\t\treturn this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id)\n\t\t\t\t\t.then(data => data.data)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif (Array.isArray(res) && res.length > 0) {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.hasLvPlanEintraege = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t\n },\n },\n\tmounted(){\n this.modal = this.$refs.modalContainer;\n },\n\tbeforeUnmount(){\n\t\tthis.$refs.modalContainer.hide();\n\t},\n template:/*html*/`\n \n\n\t\t\n \n \n \n\n \n `,\n};","import MylvSemesterStudiengang from \"./Semester/Studiengang.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengang\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudien_semester: Vue.computed(() => this.semester) \n\t\t}\n\t},\n\tprops: {\n\t\tsemester: [String, Number],\n\t\tlvs: Array\n\t},\n\tcomputed: {\n\t\tready() { return this.lvs !== null; },\n\t\tstudiengaenge() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.studiengang_kz + '#' + lv.semester, \n\t\t\t\t\t{\n\t\t\t\t\t\tstudiengang_kz: lv.studiengang_kz, \n\t\t\t\t\t\tbezeichnung: lv.sg_bezeichnung,\n\t\t\t\t\t\tsg_bezeichnung_eng: lv.sg_bezeichnung_eng,\n\t\t\t\t\t\tkuerzel: lv.studiengang_kuerzel, \n\t\t\t\t\t\tsemester: lv.semester\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t).values()].sort((a, b) => a.bezeichnung.toLowerCase() == b.bezeichnung.toLowerCase() ? a.semester > b.semester : a.bezeichnung.toLowerCase() > b.bezeichnung.toLowerCase());\n\t\t},\n\t},\n\tmethods: {\n\t\tlvsForStudiengang(studiengang) {\n\t\t\treturn this.lvs.filter(lv => lv.studiengang_kz == studiengang.studiengang_kz && lv.semester == studiengang.semester);\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","import MylvSemesterStudiengangLv from \"./Studiengang/Lv.js\";\nimport Phrasen from \"../../../../mixins/Phrasen.js\";\n\nexport default {\n\tcomponents: {\n\t\tMylvSemesterStudiengangLv\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tprops: {\n\t\tbezeichnung: String,\n\t\tkuerzel: String,\n\t\tsemester: [String,Number],\n\t\tlvs: Array,\n\t\tsg_bezeichnung_eng: String\n\t},\n\tcomputed: {\n\t\tlehrveranstaltungen() {\n\t\t\treturn [... new Map(\n\t\t\t\tthis.lvs\n\t\t\t\t.map(lv => [\n\t\t\t\t\tlv.lehrveranstaltung_id, \n\t\t\t\t\tlv\n\t\t\t\t])\n\t\t\t).values()]\n\t\t}\n\t},\n\tmethods: {\n\t\tnote(lv) {\n\t\t\treturn lv.benotung ? lv.znote || lv.lvnote || null : null;\n\t\t}\n\t},\n\ttemplate: `
    \n\t\t
    \n\t\t\t

    {{$p.user_language.value === 'English' ? sg_bezeichnung_eng : bezeichnung}} - {{kuerzel}}\n\t\t\t\t{{semester}}.{{$p.t('lehre/semester')}}\n\t\t\t

    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","import LvPruefungen from \"./Lv/Pruefungen.js\";\nimport LvInfo from \"./Lv/Info.js\";\nimport Phrasen from \"../../../../../mixins/Phrasen.js\";\nimport LvUebersicht from \"../../LvUebersicht.js\";\n\nimport ApiLehre from '../../../../../api/factory/lehre.js';\nimport ApiAddons from '../../../../../api/factory/addons.js';\n\n// TODO(chris): L10n\n\nexport default {\n\tcomponents:{\n\t\tLvUebersicht,\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tinject: ['studien_semester'],\n\tprops: {\n\t\tlehrveranstaltung_id: Number,\n\t\tbezeichnung: String,\n\t\tbezeichnung_eng: String,\n\t\tmodule: String,\n\t\tfarbe: String,\n\t\tlvinfo: Boolean,\n\t\tbenotung: Boolean,\n\t\tlvnote: String,\n\t\tlvnotebez: Array,\n\t\tznote: String,\n\t\tznotebez: Array,\n\t\tstudiengang_kuerzel: String,\n\t\tsemester: [String, Number],\n\t\torgform_kurzbz: String,\n\t\tsprache: String,\n\t\tects: String,\n\t\tincoming: Number,\n\t\tpositiv: Boolean,\n\t\tnote_index: String\n\t},\n\tdata: () => {\n\t\treturn {\n\t\t\tpruefungenData: null,\n\t\t\tinfo: null,\n\t\t\tmenu: null,\n\t\t\tpreselectedMenuItem: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\tgradeColor() {\n\t\t\t// early return if value is null or undefined\n\t\t\tif (this.positiv == null) return;\n\t\t\t// returns a suitable color for the given grade\n\t\t\tif (this.positiv)\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-success)';\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\treturn 'var(--fhc-danger)';\n\t\t\t}\n\t\t},\n\t\tis_organisatorische_einheit(){\n\t\t\treturn this.menu == \"organisatorische_einheit\";\n\t\t},\n\t\temptyMenu(){\n\t\t\treturn !this.menu || !Array.isArray(this.menu) || Array.isArray(this.menu) && this.menu.length == 0;\n\t\t},\n\t\tbodyStyle() {return {};\n\t\t\t/*const bodyStyle = {};\n\t\t\tif (this.farbe)\n\t\t\t\tbodyStyle['background-color'] = '#' + this.farbe;\n\t\t\treturn bodyStyle;*/\n\t\t},\n\t\tgrade() {\n\t\t\tconst languageIndex = this.$p.user_language.value === 'English' ? 1 : 0\n\t\t\tif(this.benotung && this.znotebez?.length) {\n\t\t\t\treturn this.znotebez[languageIndex]\n\t\t\t} else if(this.benotung && this.lvnotebez?.length) {\n\t\t\t\treturn this.lvnotebez[languageIndex]\n\t\t\t} else return null\n\t\t},\n\t\tLvHasPruefungenInformation(){\n\t\t\treturn this.pruefungenData && this.pruefungenData.length > 0;\n\t\t},\n\t},\n\tmethods: {\n\t\t\n\t\tfetchMenu(lehrveranstaltung_id = this.lehrveranstaltung_id, studien_semester = this.studien_semester) {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiAddons.getLvMenu(lehrveranstaltung_id, studien_semester))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.menu = res.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.$fhcAlert.handleSystemError(error);\n\t\t\t\t\tthis.menu = [];\n\t\t\t\t});\n\t\t},\n\n\t\tc4_link(menuItem) {\n\t\t\tif (!menuItem) return null;\n\t\t\tif (Array.isArray(menuItem.c4_moodle_links) && menuItem.c4_moodle_links.length) {\n\t\t\t\treturn '#';\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn menuItem.c4_link ?? null;\n\t\t\t}\n\t\t},\n\t\topenLvOption(menuItem){\n\t\t\tif (menuItem.id == \"core_menu_mailanstudierende\"){\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else if (menuItem.id == \"core_menu_digitale_anwesenheitslisten\") {\n\t\t\t\twindow.location.href = menuItem.c4_link;\n\t\t\t} else{\n\t\t\t\tthis.preselectedMenuItem = menuItem;\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\topenPruefungen() {\n\t\t\t// early return if the pruefungenData is empty or not set\n\t\t\tif (!this.LvHasPruefungenInformation) return;\n\n\t\t\tLvPruefungen.popup({\n\t\t\t\tpruefungenData: this.pruefungenData, \n\t\t\t\tbezeichnung: this.bezeichnung\n\t\t\t});\n\t\t},\n\t\topenInfos() {\n\t\t\tif (!this.info) {\n\t\t\t\tthis.info = true;\n\t\t\t\t// TODO(chris): load all this params on ajax?\n\t\t\t\tLvInfo.popup({\n\t\t\t\t\tlehrveranstaltung_id: this.lehrveranstaltung_id, \n\t\t\t\t\tbezeichnung: this.bezeichnung,\n\t\t\t\t\tbezeichnung_eng: this.bezeichnung_eng,\n\t\t\t\t\tstudiengang_kuerzel: this.studiengang_kuerzel,\n\t\t\t\t\tsemester: this.semester,\n\t\t\t\t\tstudien_semester: this.studien_semester,\n\t\t\t\t\torgform_kurzbz: this.orgform_kurzbz,\n\t\t\t\t\tsprache: this.sprache,\n\t\t\t\t\tects: this.ects,\n\t\t\t\t\tincoming: this.incoming\n\t\t\t\t}).then(() => this.info = false).catch(() => this.info = false);\n\t\t\t}\n\t\t}\n\t},\n\twatch:{\n\t\tstudien_semester(newValue){\n\t\t\tthis.fetchMenu(this.lehrveranstaltung_id, newValue);\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.$api\n\t\t\t.call(ApiLehre.getStudentPruefungen(this.lehrveranstaltung_id))\n\t\t\t.then(res => res.data)\n\t\t\t.then(pruefungen => {\n\t\t\t\tthis.pruefungenData = pruefungen;\n\t\t\t}); \n\t},\n\tmounted() {\n\t\tthis.fetchMenu(this.lehrveranstaltung_id, this.studien_semester);\n\t},\n\ttemplate: /*html*/`
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t\t
    {{ $p.t('lehre/organisationseinheit') }}:
    \n\t\t\t
    {{$p.user_language.value === 'English' ? bezeichnung_eng : bezeichnung}}
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    `\n};","import MylvSemester from \"./Semester.js\";\nimport Phrasen from \"../../../mixins/Phrasen.js\";\n\n// TODO(chris): phrase: global/studiensemester_auswaehlen\n// TODO(chris): phrase: next & prev +aria-label\n\nexport default {\n\tcomponents: {\n\t\tMylvSemester\n\t},\n\tmixins: [\n\t\tPhrasen\n\t],\n\tdata: () => {\n\t\treturn {\n\t\t\tfirstLoad: true,\n\t\t\tstudiensemester: null,\n\t\t\tlvs: {},\n\t\t\tcurrentSemester: null\n\t\t};\n\t},\n\tcomputed: {\n\t\tready() {\n\t\t\treturn this.studiensemester !== null && (!this.firstLoad || this.current.lvs !== null);\n\t\t},\n\t\tcurrent() {\n\t\t\tif (this.currentSemester === null)\n\t\t\t\treturn { semester: null, lvs: [] };\n\t\t\tif (this.lvs[this.currentSemester] === undefined) {\n\t\t\t\tthis.lvs[this.currentSemester] = {\n\t\t\t\t\tsemester: this.currentSemester, \n\t\t\t\t\tlvs: null\n\t\t\t\t};\n\t\t\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Lvs/' + this.currentSemester).then(res => {\n\t\t\t\t\tthis.lvs[this.currentSemester].lvs = res.data.retval || [];\n\t\t\t\t\tthis.firstLoad = false;\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn this.lvs[this.currentSemester];\n\t\t},\n\t\tnearestSem() {\n\t\t\tlet now = Date.now();\n\t\t\tlet nearestSem = null;\n\t\t\tlet nearestSemDiff = 0;\n\t\t\tthis.studiensemester.forEach(sem => {\n\t\t\t\tlet start = new Date(sem.start);\n\t\t\t\tlet end = new Date(sem.ende);\n\t\t\t\tif (now >= start && now <= end) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = 0;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet diff = Math.min(Math.abs(now - start), Math.abs(now - end));\n\t\t\t\tif (nearestSem === null || diff < nearestSemDiff) {\n\t\t\t\t\tnearestSem = sem.studiensemester_kurzbz;\n\t\t\t\t\tnearestSemDiff = diff;\n\t\t\t\t}\n\n\t\t\t});\n\t\t\treturn nearestSem;\n\t\t},\n\t\tcurrentIsFirst() {\n\t\t\treturn this.studiensemester[0].studiensemester_kurzbz == this.currentSemester;\n\t\t},\n\t\tcurrentIsLast() {\n\t\t\treturn this.studiensemester[this.studiensemester.length-1].studiensemester_kurzbz == this.currentSemester;\n\t\t}\n\t},\n\tmethods: {\n\t\tprevSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex--;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tnextSem() {\n\t\t\tthis.$refs.studiensemester.selectedIndex++;\n\t\t\tthis.$refs.studiensemester.dispatchEvent(new Event('change', { bubbles: true }));\n\t\t},\n\t\tupdateRouter(val) {\n\t\t\tthis.$router.push(`/Cis/MyLv/${val}`);\n\t\t}\n\t},\n\tcreated() {\n\t\taxios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Studiensemester').then(res => {\n\t\t\tthis.studiensemester = res.data.retval || [];\n\t\t\tconst routerStudiensemester = this.$route.params.studiensemester;\n\t\t\tif (routerStudiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == routerStudiensemester).length)\n\t\t\t\tthis.currentSemester = routerStudiensemester;\n\t\t\telse\n\t\t\t\tthis.currentSemester = this.nearestSem;\n\t\t});\n\t},\n\tbeforeRouteUpdate(to, from, next){\n\t\tif (to.params.studiensemester && this.studiensemester.filter(s => s.studiensemester_kurzbz == to.params.studiensemester).length && to.params.studiensemester != this.currentSemester)\n\t\t\tthis.currentSemester = to.params.studiensemester;\n\t\tnext();\n\n\t},\n\ttemplate: `\n\n\t

    {{$p.t('lehre/myLV')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t{{$p.t('lehre/noLvFound')}}\n\t\t
    \n\t\t\n\t
    \n\t
    \n\t\t\n\t
    `\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport const CoreFetchCmpt = {\n\temits: ['dataFetched'], // this component can emit the event dataFetched that it is catched by this component itself\n\tprops: {\n\t\trefresh: { // to refresh this component\n\t\t\ttype: Boolean\n\t\t},\n\t\tapiFunction: { // the function to call, must return a Promise\n\t\t\trequired: true,\n\t\t\ttype: Function\n\t\t},\n\t\tapiFunctionParameters: {} // parameters for the apiFunction, type mixed, optional\n\t},\n\twatch: {\n\t\t/**\n\t\t * If the refresh property is changed then call fetchData\n\t\t */\n\t\trefresh: function (newValue, oldValue) {\n\t\t\tthis.fetchData();\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tloading: false, // if in loading or not\n\t\t\terror: false, // if an error occurred while loading data\n\t\t\terrorMessage: null // the error message\n\t\t};\n\t},\n\tcreated: function() {\n\t\tthis.fetchData();\n\t},\n\tmethods: {\n\t\t/**\n\t\t *\n\t\t */\n\t\tfetchData: function() {\n\t\t\tthis.loading = true; // loader started\n\t\t\tthis.error = false;\n\t\t\tthis.errorMessage = null;\n\n\t\t\t// Checks if the apifunction is a callable function\n\t\t\tif (typeof this.apiFunction == \"function\")\n\t\t\t{\n\t\t\t\t// Call the function stored in apiFunction\n\t \t\tlet apiFunctionResult = this.apiFunction(this.apiFunctionParameters);\n\n\t\t\t\t// It is expected that the function returns a Promise\n\t\t\t\tif (apiFunctionResult instanceof Promise)\n\t\t\t\t{\n\t\t\t\t\tapiFunctionResult\n\t\t\t\t\t\t.then(this.successHandler) // on success\n\t\t\t\t\t\t.catch(this.errorHandler) // on error\n\t\t\t\t\t\t.finally(this.finallyHandler); // finally in any case\n\t\t\t\t}\n\t\t\t\telse // otherwise display an error\n\t\t\t\t{\n\t\t\t\t\tthis.setError(\"The called apiFunction does not return a Promise\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // otherwise display an error\n\t\t\t{\n\t\t\t\tthis.setError(\"Property apiFunction is not a function\");\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsetError: function(errorMessage) {\n\t\t\tthis.loading = false; // loading ended\n\t\t\tthis.error = true; // error occurred\n\t\t\tthis.errorMessage = errorMessage; // save the error message\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tsuccessHandler: function(response) {\n\t\t\tthis.$emit('dataFetched', response ? response.data : undefined); // trigger the event dataFetched\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\terrorHandler: function(error) {\n\t\t\tif (error.response?.data?.retval)\n\t\t\t\tthis.setError(error.response.data.retval);\n\t\t\telse if (error.data?.message)\n\t\t\t\tthis.setError(error.data.message);\n\t\t\telse\n\t\t\t\tthis.setError(error.message);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\tfinallyHandler: function() {\n\t\t\tthis.loading = false; // loading ended\n\t\t}\n\t},\n\ttemplate: `\n\t\t\n\t\t\t
    Loading...
    \n\t\t
    \n\t\t\n\t\t\t
    {{ errorMessage }}
    \n\t\t
    \n\t\t\n\t`\n};\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t}\n\t},\n\temits: {\n\t\tswitchFilter: ['filterId'],\n\t\tapplyFilterConfig: ['filterFields'],\n\t\tsaveCustomFilter: ['customFilterName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tcurrentFields: []\n\t\t};\n\t},\n\tcomputed: {\n\t\ttypes() {\n\t\t\treturn this.columns.reduce((a,c) => {\n\t\t\t\tlet type = c.type.toLowerCase();\n\t\t\t\tif (type.indexOf('int') >= 0)\n\t\t\t\t\ta[c.name] = 'Numeric';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('varchar') >= 0 || \n\t\t\t\t\ttype.indexOf('text') >= 0 || \n\t\t\t\t\ttype.indexOf('bpchar') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Text';\n\t\t\t\telse if (\n\t\t\t\t\ttype.indexOf('timestamp') >= 0 || \n\t\t\t\t\ttype.indexOf('date') >= 0\n\t\t\t\t)\n\t\t\t\t\ta[c.name] = 'Date';\n\t\t\t\telse\n\t\t\t\t\ta[c.name] = '';\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t}\n\t},\n\twatch: {\n\t\tfields(n) {\n\t\t\tthis.currentFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\tswitchFilter(evt) {\n\t\t\tthis.$emit('switchFilter', evt.currentTarget.value);\n\t\t},\n\t\tapplyFilterConfig() {\n\t\t\tconst filteredFields = this.currentFields.filter(el => el.name != FILTER_COMPONENT_NEW_FILTER);\n\t\t\tif (filteredFields.filter(el => el.condition == \"\").length)\n\t\t\t\talert(\"Please fill all the filter options\");\n\t\t\telse\n\t\t\t\tthis.$emit('applyFilterConfig', filteredFields);\n\t\t},\n\t\taddField(evt) {\n\t\t\tthis.currentFields.push({\n\t\t\t\tname: FILTER_COMPONENT_NEW_FILTER\n\t\t\t});\n\t\t},\n\t\tremoveField(index) {\n\t\t\tthis.currentFields.splice(index, 1);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\tFilter {{ index + 1 }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\tfields: Array,\n\t\tselected: {\n\t\t\ttype: Array,\n\t\t\tdefault: []\n\t\t},\n\t\tnames: {\n\t\t\ttype: Object,\n\t\t\tdefault: {}\n\t\t}\n\t},\n\temits: {\n\t\thide: ['fieldName'],\n\t\tshow: ['fieldName']\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tselectedFields: []\n\t\t};\n\t},\n\twatch: {\n\t\tselected(n) {\n\t\t\tthis.selectedFields = n;\n\t\t}\n\t},\n\tmethods: {\n\t\ttoggle(field) {\n\t\t\tif (this.selectedFields.indexOf(field) != -1)\n\t\t\t{\n\t\t\t\tthis.selectedFields.splice(this.selectedFields.indexOf(field), 1);\n\t\t\t\tthis.$emit('hide', field);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.selectedFields.push(field);\n\t\t\t\tthis.$emit('show', field);\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ names[fieldToDisplay] || fieldToDisplay }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\n\t`\n};\n\n","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nconst DEFAULT_ICONS = {\n\tjsonLines: 'fa-file-lines',\n\txlsx: 'fa-file-excel',\n\tpdf: 'fa-file-pdf',\n\thtml: 'fa-file-code',\n\tjson: 'fa-file',\n\tcsv: 'fa-file-csv'\n};\nconst DEFAULT_LABELS = {\n\tjsonLines: 'Download as JSONLINES',\n\txlsx: 'Download as XLSX',\n\tpdf: 'Download as PDF',\n\thtml: 'Download as HTML',\n\tjson: 'Download as JSON',\n\tcsv: 'Download as CSV '\n};\n\n\n/**\n *\n */\nexport default {\n\tprops: {\n\t\ttabulator: Object,\n\t\tconfig: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\ticonClass: [String, Array, Object]\n\t},\n\tcomputed: {\n\t\tcurrentConfig() {\n\t\t\tif (!this.config)\n\t\t\t\treturn false;\n\n\t\t\tlet config = this.config;\n\n\t\t\tif (config instanceof Function)\n\t\t\t\treturn [config];\n\n\t\t\tif (config === null)\n\t\t\t\treturn [];\n\n\t\t\tif (this.config === true)\n\t\t\t\tconfig = ['csv'];\n\n\t\t\tif (Object.prototype.toString.call(config) === \"[object String]\")\n\t\t\t\tconfig = config.split(',');\n\n\t\t\tif (typeof config === 'object' && !Array.isArray(config)) {\n\t\t\t\tlet newConfig = [];\n\t\t\t\tfor (var k in config) {\n\t\t\t\t\tvar v = config[k], type;\n\t\t\t\t\t\n\t\t\t\t\tif (!v)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\n\t\t\t\t\tif (Object.prototype.toString.call(v) === \"[object String]\") {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(v);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: v === k ? DEFAULT_LABELS[type] : k,\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\t\tif(type !== null) {\n\t\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\t\tlabel: v,\n\t\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\talert('neither ' + k + ' nor ' + v + ' are supported download file types');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (typeof v === 'object' && !Array.isArray(v)) {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tif (v.formatter === undefined)\n\t\t\t\t\t\t\t\tv.formatter = type;\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = DEFAULT_LABELS[type];\n\t\t\t\t\t\t\tif (v.icon === undefined)\n\t\t\t\t\t\t\t\tv.icon = DEFAULT_ICONS[type];\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (v.label === undefined)\n\t\t\t\t\t\t\t\tv.label = k;\n\t\t\t\t\t\t\tnewConfig.push(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = this.stringToFileFormatter(k);\n\t\t\t\t\t\tif (type !== null) {\n\t\t\t\t\t\t\tnewConfig.push({\n\t\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[type],\n\t\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[type],\n\t\t\t\t\t\t\t\tformatter: type\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\talert(k + ' is not a supported download file type');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig = newConfig;\n\t\t\t}\n\n\t\t\tif (Array.isArray(config))\n\t\t\t{\n\t\t\t\tconfig = config.map(el => {\n\t\t\t\t\tif (Object.prototype.toString.call(el) === \"[object String]\") {\n\t\t\t\t\t\tlet formatter = this.stringToFileFormatter(el);\n\t\t\t\t\t\tif (formatter === null)\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ticon: 'fa-solid ' + DEFAULT_ICONS[formatter],\n\t\t\t\t\t\t\tlabel: DEFAULT_LABELS[formatter],\n\t\t\t\t\t\t\tformatter\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (el instanceof Function)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tformatter: el\n\t\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (typeof el === 'object' && !Array.isArray(el) && el !== null) {\n\t\t\t\t\t\tif (el.formatter instanceof Function)\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t\tif (this.validateFileFormatter(el.formatter))\n\t\t\t\t\t\t\treturn el;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn null;\n\t\t\t\t}).filter(el => el !== null);\n\n\t\t\t\tif (config.length < 2)\n\t\t\t\t\treturn config;\n\n\t\t\t\tif (config.filter(el => el.label || el.icon).length == config.length)\n\t\t\t\t\treturn config;\n\n\t\t\t\talert('Config not valid');\n\t\t\t}\n\n\t\t\treturn [];\n\t\t}\n\t},\n\tmethods: {\n\t\tstringToFileFormatter(input) {\n\t\t\tlet lcInput = input.toLowerCase();\n\t\t\t\n\t\t\tif (lcInput == 'jsonlines')\n\t\t\t\treturn 'jsonLines';\n\t\t\t\n\t\t\tif (['xlsx', 'pdf', 'html', 'json', 'csv'].includes(lcInput))\n\t\t\t\treturn lcInput;\n\n\t\t\treturn null;\n\t\t},\n\t\tvalidateFileFormatter(input) {\n\t\t\tlet formatter = this.stringToFileFormatter(input);\n\t\t\tif (!formatter) {\n\t\t\t\talert(input + ' is not a supported file formatter');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (formatter == 'xlsx') {\n\t\t\t\tif (!window.XLSX) {\n\t\t\t\t\talert('XLSX Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (formatter == 'pdf') {\n\t\t\t\tif (!window.jspdf) {\n\t\t\t\t\talert('jsPDF Library not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar doc = new jspdf.jsPDF({});\n\t\t\t\tif (!doc.autoTable) {\n\t\t\t\t\talert('jsPDF-AutoTable Plugin not loaded');\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tdownload(config) {\n\t\t\tthis.tabulator.download(config.formatter, config.file, config.options)\n\t\t}\n\t},\n\ttemplate: `\n\t\n\t`\n};\n\n","const elementDataMap = new WeakMap();\n\nexport default {\n\tmounted(el, binding) {\n\t\tlet open = false;\n\t\telementDataMap.set(el, evt => {\n\t\t\tif (!open)\n\t\t\t\treturn;\n\n\t\t\tif (el.contains(evt.target))\n\t\t\t\treturn;\n\n\t\t\tconst collapse = bootstrap.Collapse.getInstance(el)\n\t\t\tif (collapse)\n\t\t\t\tcollapse.hide();\n\t\t});\n\t\tel.addEventListener('shown.bs.collapse', () => {\n\t\t\topen = true;\n\t\t});\n\t\tel.addEventListener('hide.bs.collapse', () => {\n\t\t\topen = false;\n\t\t});\n\t\tdocument.addEventListener('click', elementDataMap.get(el), true);\n\t},\n\tbeforeUnmount(el, binding) {\n\t\tdocument.removeEventListener('click', elementDataMap.get(el));\n\t\tdelete el.collapsibleAutoHideFunc;\n\t}\n}","/**\n * This may need changes if Tabulator gets updated!\n *\n * Current working Version: 5.5.2\n * \n * This is a copy of the fitDataStretch function. The only difference\n * is the check for frozen columns on line 22.\n */\n\nexport default window.Tabulator?.extendModule(\"layout\", \"modes\", {\n\tfitDataStretchFrozen(columns, forced) {\n\t\tvar colsWidth = 0,\n\t\ttableWidth = this.table.rowManager.element.clientWidth,\n\t\tgap = 0,\n\t\tlastCol = false;\n\n\t\tcolumns.forEach((column, i) => {\n\t\t\tif (!column.widthFixed) {\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible && !column.definition.frozen) {\n\t\t\t\tlastCol = column;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\tif (lastCol){\n\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tlastCol.setWidth(0);\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\tif (gap > 0) {\n\t\t\t\tlastCol.setWidth(gap);\n\t\t\t} else {\n\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t}\n\t}\n});\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tsaveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/saveCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tcustomFilterName: wsParams.customFilterName\n\t\t\t}\n\t\t};\n\t},\n\tremoveCustomFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeCustomFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tapplyFilterFields(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/applyFilterFields',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterFields: wsParams.filterFields\n\t\t\t}\n\t\t};\n\t},\n\taddFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/addFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tremoveFilterField(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/filter/removeFilterField',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterField: wsParams.filterField\n\t\t\t}\n\t\t};\n\t},\n\tgetFilterById(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType,\n\t\t\t\tfilterId: wsParams.filterId\n\t\t\t}\n\t\t};\n\t},\n\tgetFilter(wsParams) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/filter/getFilter',\n\t\t\tparams: {\n\t\t\t\tfilterUniqueId: wsParams.filterUniqueId,\n\t\t\t\tfilterType: wsParams.filterType\n\t\t\t}\n\t\t};\n\t}\n};","/**\n * Copyright (C) 2022 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nimport {CoreFetchCmpt} from '../../components/Fetch.js';\nimport FilterConfig from './Filter/Config.js';\nimport FilterColumns from './Filter/Columns.js';\nimport TableDownload from './Table/Download.js';\nimport collapseAutoClose from '../../directives/collapseAutoClose.js';\n\nimport moduleLayoutFitDataStretchFrozen from '../../tabulator/layouts/fitDataStretchFrozen.js';\n\nimport ApiFilter from '../../api/factory/filter.js';\n\n//\nconst FILTER_COMPONENT_NEW_FILTER = 'Filter Component New Filter';\nconst FILTER_COMPONENT_NEW_FILTER_TYPE = 'Filter Component New Filter Type';\n\nvar _uuid = 0;\n\n/**\n *\n */\nexport const CoreFilterCmpt = {\n\tcomponents: {\n\t\tCoreFetchCmpt,\n\t\tFilterConfig,\n\t\tFilterColumns,\n\t\tTableDownload\n\t},\n\tdirectives: {\n\t\tcollapseAutoClose\n\t},\n\temits: [\n\t\t'nwNewEntry',\n\t\t'click:new',\n\t\t'tableBuilt',\n\t\t'uuidDefined',\n\t\t'headerFilterOn'\n\t],\n\tprops: {\n\t\tonNwNewEntry: Function, // NOTE(chris): Hack to get the nwNewEntry listener into $props\n\t\ttitle: String,\n\t\tdescription: String,\n\t\tsideMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tfilterType: {\n\t\t\ttype: String\n\t\t},\n\t\ttabulatorOptions: Object,\n\t\ttabulatorEvents: Array,\n\t\ttableOnly: Boolean,\n\t\tnoColumnFilter:Boolean,\n\t\treload: Boolean,\n\t\treloadBtnInfotext: String,\n\t\tdownload: {\n\t\t\ttype: [Boolean, String, Function, Array, Object],\n\t\t\tdefault: false\n\t\t},\n\t\tnewBtnShow: Boolean,\n\t\tnewBtnClass: [String, Array, Object],\n\t\tnewBtnDisabled: Boolean,\n\t\tnewBtnLabel: String,\n\t\tuniqueId: String,\n\n\t\tidField: String,\n\t\tparentIdField: String,\n\t\tcountOnly: Boolean,\n\t\tuseSelectionSpan: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tdata: function() {\n\t\treturn {\n\t\t\tuuid: 0,\n\t\t\t// FilterCmpt properties\n\t\t\tfilterName: null,\n\t\t\tfilterActive: false,\n\t\t\tfields: null,\n\t\t\tdataset: null,\n\t\t\tdatasetMetadata: null,\n\t\t\tselectedFields: null,\n\t\t\tfilterFields: null,\n\n\t\t\tavailableFilters: null,\n\t\t\tselectedFilter: null,\n\n\t\t\t// FetchCmpt binded properties\n\t\t\tfetchCmptRefresh: false,\n\t\t\tfetchCmptApiFunction: null,\n\t\t\tfetchCmptApiFunctionParams: null,\n\t\t\tfetchCmptDataFetched: null,\n\n\t\t\tfetchResult: null,\n\n\t\t\ttabulator: null,\n\t\t\ttableBuilt: false,\n\t\t\ttabulatorHasSelector: false,\n\t\t\tselectedData: [],\n\t\t\tpersistence: {\n\t\t\t\tsort: true,\n\t\t\t\tcolumns: true,\n\t\t\t\tfilter: false,\n\t\t\t\theaderFilter: false,\n\t\t\t\tgroup: false,\n\t\t\t\tpage: false,\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tnotSelectedFields() {\n\t\t\tif (!this.fields || !this.selectedFields)\n\t\t\t\treturn null;\n\t\t\treturn this.fields.filter(x => this.selectedFields.indexOf(x) === -1)\n\t\t},\n\t\tfilteredData() {\n\t\t\tif (!this.dataset)\n\t\t\t\treturn [];\n\t\t\treturn JSON.parse(JSON.stringify(this.dataset));\n\t\t},\n\t\tfilteredColumns() {\n\t\t\tlet fields = JSON.parse(JSON.stringify(this.fields)) || [];\n\t\t\tlet selectedFields = JSON.parse(JSON.stringify(this.selectedFields)) || [];\n\n\t\t\tlet columns = null;\n\n\t\t\t// If the tabulator options has been provided and it contains the property columns\n\t\t\tif (this.tabulatorOptions && this.tabulatorOptions.hasOwnProperty('columns'))\n\t\t\t\tcolumns = this.tabulatorOptions.columns;\n\n\t\t\t// If columns is not an array or it is an array with less elements then the array fields\n\t\t\tif (!Array.isArray(columns) || (Array.isArray(columns) && columns.length < fields.length))\n\t\t\t{\n\t\t\t\tcolumns = []; // set it as an empty array\n\n\t\t\t\t// Loop throught all the retrieved columns from database\n\t\t\t\tfor (let field of fields)\n\t\t\t\t{\n\t\t\t\t\t// Create a new column having the title equal to the field name\n\t\t\t\t\tlet column = {\n\t\t\t\t\t\ttitle: field,\n\t\t\t\t\t\tfield: field\n\t\t\t\t\t};\n\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\tcolumn.visible = selectedFields.indexOf(field) >= 0;\n\n\t\t\t\t\t// Add the new column to the list of columns\n\t\t\t\t\tcolumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse // the property columns has been provided in the tabulator options\n\t\t\t{\n\t\t\t\t// Loop throught the property columns of the tabulator options\n\t\t\t\tfor (let col of columns)\n\t\t\t\t{\n\t\t\t\t\t// If the column has to be displayed or not\n\t\t\t\t\t/* fields.indexOf(col.field) == -1; ensures displaying formatter colums\n\t\t\t\t\te.g. column with rowSelection checkboxes or with custom formatted action buttons */\n\t\t\t\t\tcol.visible = selectedFields.indexOf(col.field) >= 0 || fields.indexOf(col.field) == -1;\n\n\t\t\t\t\tif (col.hasOwnProperty('resizable'))\n\t\t\t\t\t\tcol.resizable = col.visible;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columns;\n\t\t},\n\t\tfieldIdsForVisibilty() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn [];\n\t\t\treturn this.tabulator.getColumns().filter(col => {\n\t\t\t\tlet def = col.getDefinition();\n\t\t\t\treturn !def.frozen && def.title && def.formatter != \"responsiveCollapse\";\n\t\t\t}).map(col => col.getField());\n\t\t},\n\t\tfieldNames() {\n\t\t\tif (!this.tableBuilt)\n\t\t\t\treturn {};\n\t\t\treturn this.tabulator.getColumns().reduce((res, col) => {\n\t\t\t\tres[col.getField()] = col.getDefinition().title;\n\t\t\t\treturn res;\n\t\t\t}, {});\n\t\t},\n\t\tidExtra() {\n\t\t\tif (!this.uuid)\n\t\t\t\treturn '';\n\t\t\treturn '-' + this.uuid;\n\t\t},\n\t\tcolumnsForFilter() {\n\t\t\tif (!this.filteredColumns || !this.datasetMetadata)\n\t\t\t\treturn [];\n\t\t\tconst filterTitles = this.filteredColumns.reduce((a,c) => {\n\t\t\t\ta[c.field] = c.title;\n\t\t\t\treturn a;\n\t\t\t}, {});\n\t\t\treturn this.datasetMetadata.map(el => ({...el, ...{title: filterTitles[el.name]}}));\n\t\t}\n\t},\n\tmethods: {\n\t\treloadTable() {\n\t\t\tif (this.tableOnly)\n\t\t\t\tthis.tabulator.setData();\n\t\t\telse\n\t\t\t\tthis.getFilter();\n\t\t},\n\t\tasync initTabulator() {\n\t\t\tlet placeholder = '< Phrasen Plugin not loaded! >';\n\t\t\tif (this.$p) {\n\t\t\t\tawait this.$p.loadCategory('ui');\n\t\t\t\tplaceholder = this.$p.t('ui/keineDatenVorhanden');\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\t// prefetch data to get fields & selectedFields for filteredColumns & filteredData\n\t\t\t\tawait new Promise(resolve => {\n\t\t\t\t\tconst filterId = window.location.hash ? window.location.hash.slice(1) : null;\n\n\t\t\t\t\tconst resolvePromiseFunc = data => {\n\t\t\t\t\t\tthis.setRenderData(data);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t};\n\t\t\t\t\t// get the filter data\n\t\t\t\t\tif (filterId === null)\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t\t\t{ filterId },\n\t\t\t\t\t\t\tresolvePromiseFunc\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Define a default tabulator options in case it was not provided\n\t\t\tlet tabulatorOptions = {...{\n\t\t\t\t\tlayout: \"fitDataStretchFrozen\",\n\t\t\t\t\tmovableColumns: true,\n\t\t\t\t\tcolumnDefaults:{\n\t\t\t\t\t\ttooltip: true\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tpersistence: this.persistence,\n\t\t\t\t}, ...(this.tabulatorOptions || {})};\n\n\t\t\t// set default height if no height property is set\n\t\t\tif (tabulatorOptions.height === undefined &&\n\t\t\t\ttabulatorOptions.minHeight === undefined &&\n\t\t\t\ttabulatorOptions.maxHeight === undefined) {\n\t\t\t\ttabulatorOptions.height = 500;\n\t\t\t}\n\n\t\t\tif (!this.tableOnly) {\n\t\t\t\ttabulatorOptions.data = this.filteredData;\n\t\t\t\ttabulatorOptions.columns = this.filteredColumns;\n\t\t\t} else {\n\t\t\t\ttabulatorOptions.columns.forEach(col => {\n\t\t\t\t\tif (col.visible === undefined)\n\t\t\t\t\t\tcol.visible = true;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (tabulatorOptions.selectable || tabulatorOptions.selectableRows || (tabulatorOptions.columns && tabulatorOptions.columns.filter(el => el.formatter == 'rowSelection').length))\n\t\t\t\tthis.tabulatorHasSelector = true;\n\n\t\t\tif (this.idField) {\n\t\t\t\t// enable nested tabulator if parent Id given\n\t\t\t\tif (this.parentIdField) tabulatorOptions.dataTree = true;\n\t\t\t\t// set tabulator index\n\t\t\t\ttabulatorOptions.index = this.idField;\n\t\t\t}\n\n\t\t\t// Start the tabulator with the build options\n\t\t\tthis.tabulator = new Tabulator(\n\t\t\t\tthis.$refs.table,\n\t\t\t\ttabulatorOptions\n\t\t\t);\n\t\t\t// If event handlers have been provided\n\t\t\tif (Array.isArray(this.tabulatorEvents) && this.tabulatorEvents.length > 0)\n\t\t\t{\n\t\t\t\t// Attach all the provided event handlers to the started tabulator\n\t\t\t\tfor (let evt of this.tabulatorEvents)\n\t\t\t\t\tthis.tabulator.on(evt.event, evt.handler);\n\t\t\t}\n\t\t\tthis.tabulator.on('tableBuilt', () => {this.tableBuilt = true; this.$emit('tableBuilt');});\n\t\t\tthis.tabulator.on(\"rowSelectionChanged\", data => {\n\t\t\t\tthis.selectedData = data;\n\t\t\t});\n\n\t\t\t// if nested tabulator, restructure data\n\t\t\tif (this.parentIdField && this.idField) {\n\t\t\t\tthis.tabulator.on(\"dataLoading\", data => {\n\t\t\t\t\tlet toDelete = [];\n\n\t\t\t\t\t// loop through all data\n\t\t\t\t\tfor (let childIdx = 0; childIdx < data.length; childIdx++)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet child = data[childIdx];\n\n\t\t\t\t\t\t// if it has parent id, it is a child\n\t\t\t\t\t\tif (child[this.parentIdField])\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// append the child on the right place. If parent found, mark original sw child on 0 level for deleting\n\t\t\t\t\t\t\tif (this.appendChild(data, child)) toDelete.push(childIdx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// delete the marked children from 0 level\n\t\t\t\t\tfor (let counter = 0; counter < toDelete.length; counter++)\n\t\t\t\t\t{\n\t\t\t\t\t\t// decrease index by counter as index of data array changes after every deletion\n\t\t\t\t\t\tdata.splice(toDelete[counter] - counter, 1);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.tableOnly) {\n\t\t\t\tthis.tabulator.on('tableBuilt', () => {\n\t\t\t\t\tconst cols = this.tabulator.getColumns();\n\t\t\t\t\tthis.fields = cols.map(col => col.getField());\n\t\t\t\t\tthis.selectedFields = cols.filter(col => col.isVisible()).map(col => col.getField());\n\t\t\t\t\tif (this.tabulator.options.persistence.headerFilter)\n\t\t\t\t\t\tthis._setHeaderFilter();\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t\tthis.tabulator.on(\"dataFiltered\", filters => {\n\t\t\t\tthis.filterActive = filters.length > 0;\n\t\t\t\tthis.$emit(\"headerFilterOn\", this.filterActive);\n\t\t\t});\n\t\t},\n\t\tupdateTabulator() {\n\t\t\tif (this.tabulator) {\n\t\t\t\tif (this.tableBuilt)\n\t\t\t\t\tthis._updateTabulator();\n\t\t\t\telse\n\t\t\t\t\tthis.tabulator.on('tableBuilt', this._updateTabulator);\n\t\t\t}\n\t\t},\n\t\t_updateTabulator() {\n\t\t\tthis.tabulatorHasSelector = this.tabulatorOptions.selectable || this.tabulatorOptions.selectableRows || this.filteredColumns.filter(el => el.formatter == 'rowSelection').length;\n\t\t\tthis.tabulator.setColumns(this.filteredColumns);\n\t\t\tthis.tabulator.setData(this.filteredData);\n\t\t\tthis._setHeaderFilter()\n\t\t},\n\t\tclearFilters()\n\t\t{\n\t\t\tlet existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, \"\");\n\t\t\t});\n\t\t\tthis.tabulator.clearFilter();\n\t\t\tthis.filterActive = false;\n\t\t},\n\t\t_setHeaderFilter()\n\t\t{\n\t\t\tconst existingFilters = this.tabulator.getHeaderFilters();\n\t\t\texistingFilters.forEach(filter => {\n\t\t\t\tthis.tabulator.setHeaderFilterValue(filter.field, filter.value);\n\t\t\t});\n\t\t},\n\t\tgetFilter() {\n\t\t\tif (this.selectedFilter === null)\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilter(wsParams)),\n\t\t\t\t\tnull,\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t\telse\n\t\t\t\tthis.startFetchCmpt(\n\t\t\t\t\twsParams => this.$api.call(ApiFilter.getFilterById(wsParams)),\n\t\t\t\t\t{\n\t\t\t\t\t\tfilterId: this.selectedFilter\n\t\t\t\t\t},\n\t\t\t\t\tthis.render\n\t\t\t\t);\n\t\t},\n\t\tsetRenderData(data) {\n\t\t\tthis.fetchResult = data;\n\t\t\tthis.filterName = data.filterName;\n\t\t\tthis.dataset = data.dataset;\n\t\t\tthis.datasetMetadata = data.datasetMetadata;\n\n\t\t\tthis.fields = data.fields;\n\t\t\tthis.selectedFields = data.selectedFields;\n\t\t\tthis.filterFields = [];\n\n\t\t\tfor (let i = 0; i < data.datasetMetadata.length; i++)\n\t\t\t{\n\t\t\t\tfor (let j = 0; j < data.filters.length; j++)\n\t\t\t\t{\n\t\t\t\t\tif (data.datasetMetadata[i].name == data.filters[j].name)\n\t\t\t\t\t{\n\t\t\t\t\t\tlet filter = data.filters[j];\n\t\t\t\t\t\tfilter.type = data.datasetMetadata[i].type;\n\n\t\t\t\t\t\tthis.filterFields.push(filter);\n\t\t\t\t\t\t//break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\trender(response) {\n\t\t\tlet data = response;\n\n\t\t\tthis.setRenderData(data);\n\n\t\t\t// If the side menu is active\n\t\t\tif (this.sideMenu === true)\n\t\t\t{\n\t\t\t\tthis.setSideMenu(data);\n\t\t\t}\n\t\t\telse // otherwise use the dropdown in the filter options\n\t\t\t{\n\t\t\t\tthis.setDropDownMenu(data);\n\t\t\t}\n\t\t\tthis.updateTabulator();\n\t\t},\n\t\t/**\n\t\t * Set the menu\n\t\t */\n\t\tsetSideMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tlink: link + personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc,\n\t\t\t\t\tsubscriptDescription: personalFilters[filtersCount].subscriptDescription,\n\t\t\t\t\tsubscriptLinkClass: personalFilters[filtersCount].subscriptLinkClass,\n\t\t\t\t\tsubscriptLinkValue: personalFilters[filtersCount].subscriptLinkValue,\n\t\t\t\t\tsort: filtersCount,\n\t\t\t\t\tonClickCall: this.handlerGetFilterById,\n\t\t\t\t\tonClickSubscriptCall: this.handlerRemoveCustomFilter\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\n\t\t\tthis.$emit(\n\t\t\t\t'nwNewEntry',\n\t\t\t\t{\n\t\t\t\t\tlink: \"#\",\n\t\t\t\t\tdescription: \"Filters\",\n\t\t\t\t\ticon: \"filter\",\n\t\t\t\t\tchildren: filtersArray\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t * Set the drop down menu\n\t\t */\n\t\tsetDropDownMenu(data) {\n\t\t\tlet filters = data.sideMenu.filters;\n\t\t\tlet personalFilters = data.sideMenu.personalFilters;\n\t\t\tlet filtersArray = [];\n\n\t\t\tfor (let filtersCount = 0; filtersCount < filters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = filters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: filters[filtersCount].filter_id,\n\t\t\t\t\toption: filters[filtersCount].filter_id,\n\t\t\t\t\tdescription: filters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (let filtersCount = 0; filtersCount < personalFilters.length; filtersCount++)\n\t\t\t{\n\t\t\t\tlet link = personalFilters[filtersCount].link;\n\n\t\t\t\tif (link == null) link = '#';\n\n\t\t\t\tfiltersArray[filtersArray.length] = {\n\t\t\t\t\tid: personalFilters[filtersCount].filter_id,\n\t\t\t\t\toption: personalFilters[filtersCount].filter_id,\n\t\t\t\t\tdescription: personalFilters[filtersCount].desc\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tthis.availableFilters = filtersArray;\n\t\t},\n\t\t/**\n\t\t * Used to start/refresh the FetchCmpt\n\t\t */\n\t\tstartFetchCmpt(apiFunction, apiFunctionParameters, dataFetchedCallback) {\n\t\t\t// Assign the function api of the FetchCmpt binded property\n\t\t\tthis.fetchCmptApiFunction = apiFunction;\n\n\t\t\t// In case a null value is provided set the parameters as an empty object\n\t\t\tif (apiFunctionParameters == null) apiFunctionParameters = {};\n\n\t\t\t// Always needed parameters\n\t\t\tapiFunctionParameters.filterUniqueId = FHC_JS_DATA_STORAGE_OBJECT.called_path + \"/\" + FHC_JS_DATA_STORAGE_OBJECT.called_method;\n\t\t\tapiFunctionParameters.filterType = this.filterType;\n\n\t\t\tif (this.uniqueId)\n\t\t\t\tapiFunctionParameters.filterUniqueId += '_' + this.uniqueId;\n\n\t\t\t// Assign parameters to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptApiFunctionParams = apiFunctionParameters;\n\t\t\t// Assign data fetch callback to the FetchCmpt binded properties\n\t\t\tthis.fetchCmptDataFetched = dataFetchedCallback;\n\t\t\t// Set the FetchCmpt binded property refresh to have the component to refresh\n\t\t\t// NOTE: this should be the last one to be called because it triggers the FetchCmpt to start to refresh\n\t\t\tthis.fetchCmptRefresh === true ? this.fetchCmptRefresh = false : this.fetchCmptRefresh = true;\n\t\t},\n\n\t\t// ------------------------------------------------------------------------------------------------------------------\n\t\t// Event handlers\n\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerSaveCustomFilter(customFilterName) {\n\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.saveCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tcustomFilterName\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\t\t/**\n\t\t *\n\t\t */\n\t\thandlerRemoveCustomFilter(event) {\n\t\t\tlet filterId = event.currentTarget.getAttribute(\"href\").substring(1);\n\t\t\tif (filterId === this.selectedFilter)\n\t\t\t\tthis.selectedFilter = null;\n\t\t\t//\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.removeCustomFilter(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterId: filterId\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t/*\n\t\t *\n\t\t */\n\t\thandlerGetFilterById: function(event) {\n\n\t\t\tlet filterId = null;\n\n\t\t\t// Get the attribute href if side menu is rendered\n\t\t\tlet attr = event.currentTarget.getAttribute(\"href\");\n\n\t\t\t// Otherwise get the value of the drop down menu\n\t\t\tif (attr == null)\n\t\t\t{\n\t\t\t\tfilterId = event.currentTarget.value;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfilterId = attr.substring(1);\n\t\t\t}\n\n\t\t\tthis.switchFilter(filterId);\n\t\t},\n\t\tswitchFilter(filterId) {\n\t\t\tthis.selectedFilter = filterId;\n\t\t\tthis.getFilter();\n\t\t},\n\t\tapplyFilterConfig(filterFields) {\n\t\t\tthis.selectedFilter = null;\n\t\t\tthis.startFetchCmpt(\n\t\t\t\twsParams => this.$api.call(ApiFilter.applyFilterFields(wsParams)),\n\t\t\t\t{\n\t\t\t\t\tfilterFields\n\t\t\t\t},\n\t\t\t\tthis.getFilter\n\t\t\t);\n\t\t},\n\n\t\t// append child to it's parent\n\t\tappendChild(data, child) {\n\t\t\t// get parent id\n\t\t\tlet parentId = child[this.parentIdField];\n\n\t\t\t// loop thorugh all data\n\t\t\tfor (let parentIdx = 0; parentIdx < data.length; parentIdx++)\n\t\t\t{\n\t\t\t\tlet parent = data[parentIdx];\n\n\t\t\t\t// if it's the parent\n\t\t\t\tif (parent[this.idField] == parentId)\n\t\t\t\t{\n\t\t\t\t\t// create children array if not done yet\n\t\t\t\t\tif (!parent._children) parent._children = [];\n\n\t\t\t\t\t// if child is not included in children array, append the child\n\t\t\t\t\tif (!parent._children.includes(child)) parent._children.push(child);\n\n\t\t\t\t\t// parent found\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// search children for parents\n\t\t\t\telse if (parent._children) this.appendChild(parent._children, child);\n\t\t\t}\n\n\t\t\t// parent not found\n\t\t\treturn false;\n\t\t}\n\t},\n\tbeforeCreate() {\n\t\tif (!this.tableOnly == !this.filterType)\n\t\t\talert('You can not have a filter-type in table-only mode!');\n\t},\n\tcreated() {\n\t\tif (this.sideMenu && (!this.$props.onNwNewEntry || !(this.$props.onNwNewEntry instanceof Function)))\n\t\t\talert('\"nwNewEntry\" listener is mandatory when sideMenu is true');\n\t\tthis.uuid = _uuid++;\n\t\tthis.$emit('uuidDefined', this.uuid)\n\t},\n\tmounted() {\n\t\tthis.initTabulator().then(() => {\n\t\t\tif (!this.tableOnly) {\n\t\t\t\tthis.selectedFilter = window.location.hash ? window.location.hash.slice(1) : null;\n\t\t\t\tthis.render(this.fetchResult);\n\t\t\t}\n\t\t});\n\n\t},\n\ttemplate: `\n\t\t\n\t\t\n\t\t\n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    \n\t\t\t\t\t{{ title }}\n\t\t\t\t

    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ selectedData.length }} ausgewählt\n\t\t\t\t\t\t Mit {{ selectedData.length }} ausgewählten:\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t[ {{ filterName }} ]\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\n\n\t\t\n\t\t
    \n\t`\n};\n","export default {\n props: {\n data: Object,\n title: { type: String },\n },\n data() {\n return {};\n },\n created(){\n\n },\n template: /*html*/`\n\t`,\n};\n","export default {\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {}\n\t},\n\ttemplate: /*html*/`\n
    \n
    \n {{$p.t('profil','fhAusweisStatus',[data])}}\n
    \n
    `,\n}","export default {\n\t//TODO: To be implemented\n\tprops: {\n\t\tdata: {\n\t\t\ttype: String,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmobile: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\thideCollapse: function () {\n\t\t\tthis.collapseOpen = false;\n\t\t},\n\t\tshowCollapse: function () {\n\t\t\tthis.collapseOpen = true;\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcollapseOpen: false,\n\t\t};\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    `,\n};\n","export default {\n props:{\n data:Object,\n view:String,\n withZustelladresse:{\n type:Boolean,\n default:true,\n },\n },\n data(){\n return{}\n },\n created(){\n \n },\n template:/*html*/`\n \n
    \n \n \n
    \n \n
    \n \n
    \n
    \n
    {{$p.t('person','strasse')}}
    \n {{data.strasse}} \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('global','typ')}}
    \n {{data.typ}} \n
    \n
    \n \n
    \n
    \n
    {{$p.t('person','ort')}}
    \n {{data.ort}} \n
    \n
    \n
    \n
    \n
    {{$p.t('person','plz')}}
    \n {{data.plz}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('person','zustelladresse')}}
    \n
    \n \n
    \n
    \n
    \n
    \n`\n};","export default{\n props:{\n view:String,\n data:Object,\n },\n data(){\n return {\n\n }\n },\n created(){\n\n }, \n template:/*html*/`\n\t\n`,\n};","export default {\n\tdata() {\n\t\treturn {};\n\t},\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Array,\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n
    \n
    \n {{title}}\n
    \n
    \n \n
    \n
    \n\t\t\t\t\n
    \n
    \n
    \n
    `,\n};\n","export default {\n\tdata() {\n\t\treturn {}\n\t},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t}\n\t},\n\tinject: {\n\t\t// inject info that should not be displayed\n\t\t'studiengang_kz': {\n\t\t\tfrom: 'studiengang_kz',\n\t\t\tdefault: false\n\t\t},\n\t},\n\tcomputed: {\n\t\tgetLinkGruppeListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.gruppe?.value && this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value + '&grp=' + this.data.gruppe.value : ''\n\t\t},\n\t\tgetLinkVerbandListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.verband?.value && this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value\n\t\t\t\t+ '&verband=' + this.data.verband.value : ''\n\t\t},\n\t\tgetLinkSemesterListe() {\n\t\t\tif(this.studiengang_kz === false) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t\treturn this.data.semester?.value ? FHC_JS_DATA_STORAGE_OBJECT.app_root \n\t\t\t\t+ 'cis/private/stud_in_grp.php?kz='+this.studiengang_kz+'&sem=' + this.data.semester.value : ''\n\t\t}\n\t},\n\tcreated() {\n\t\t//TODO: check if data.Telefon is a valid telefon number to call before using it as a tel: link\n\t},\n\ttemplate: `\n
    \n
    {{title}}
    \n
    \n
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{entry.label }}
    \n\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{entry.value ?? '-'}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ entry.value }}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{{ entry.value ?? '-'}}\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    `\n};","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t\n\tprofilViewData(uid) {\n\t\tlet url = \"/api/frontend/v1/Profil/profilViewData\";\n\t\tif(uid){\n\t\t\turl += `/${uid}`;\n\t\t}\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: url\n\t\t};\n\t},\n\tfotoSperre(value) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/fotoSperre/${value}`\n\t\t};\n\t\t\n\t},\n\tisStudent(uid) {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/isStudent',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tisMitarbeiter(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/isMitarbeiter/${uid}`\n\t\t};\n\t},\n\tgetZustellAdresse() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellAdresse'\n\t\t};\n\t},\n\tgetZustellKontakt() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getZustellKontakt'\n\t\t};\n\t},\n\tgetGemeinden(nation, zip) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/Profil/getGemeinden/${nation}/${zip}`\n\t\t};\n\t\t\n\t},\n\tgetAllNationen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Profil/getAllNationen'\n\t\t};\n\t},\n};","import DmsItem from './Dms/Item.js';\n\nexport default {\n\tcomponents: {\n\t\tDmsItem\n\t},\n\temits: [\n\t\t'update:modelValue'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [ FileList, Array ],\n\t\t\trequired: true\n\t\t},\n\t\tmultiple: Boolean,\n\t\tid: String,\n\t\tname: String,\n\t\tinputClass: [String, Array, Object],\n\t\tnoList: Boolean,\n\t\taccept: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tmethods: {\n\t\tstringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n\t\taddFiles(event) {\n\t\t\tif (!this.multiple)\n\t\t\t\treturn this.$emit('update:modelValue', event.target.files);\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst doubles = [];\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tdt.items.add(file);\n\t\t\t\tdoubles.push(this.stringifyFile(file));\n\t\t\t}\n\t\t\tfor (var file of event.target.files) {\n\t\t\t\t// NOTE(chris): deep check (with FileReader) would require an async function so we only check the basic attributes\n\t\t\t\tif (doubles.indexOf(this.stringifyFile(file)) < 0)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t},\n\t\tremoveFile(id) {\n\t\t\tconst fileToRemove = Array.from(this.modelValue)[id];\n\t\t\t\n\t\t\tconst dt = new DataTransfer();\n\t\t\tfor (var file of this.modelValue) {\n\t\t\t\tif (file !== fileToRemove)\n\t\t\t\t\tdt.items.add(file);\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (!n)\n\t\t\t\treturn;\n\t\t\tif (n instanceof FileList) {\n\t\t\t\tif (!this.$refs.upload) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn this.$refs.upload.files = n;\n\t\t\t}\n\n\t\t\tconst dt = new DataTransfer();\n\t\t\tconst dms = [];\n\t\t\tfor (var file of n) {\n\t\t\t\tif (file instanceof File) {\n\t\t\t\t\tdt.items.add(file);\n\t\t\t\t} else {\n\t\t\t\t\tconst dmsFile = new File([JSON.stringify(file)], file.name, {\n\t\t\t\t\t\ttype: 'application/x.fhc-dms+json'\n\t\t\t\t\t});\n\t\t\t\t\tdt.items.add(dmsFile);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('update:modelValue', dt.files);\n\t\t}\n\t},\n\ttemplate: `\n\t
    \n\t\t\n\t\t
      \n\t\t\t\n\t\t\t\n\t\t
    \n\t
    `\n}","export default {\n\temits: [\n\t\t'delete'\n\t],\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: [File, Object],\n\t\t\trequired: true\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpreview: ''\n\t\t};\n\t},\n\twatch: {\n\t\tmodelValue(n) {\n\t\t\tif (n.type == 'application/x.fhc-dms+json') {\n\t\t\t\tn.text().then(result => {\n\t\t\t\t\tconst obj = JSON.parse(result);\n\t\t\t\t\tthis.preview = obj.preview || '';\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\ttemplate: `\n\t
  • \n\t\t\n\t\t{{ modelValue.name }}\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t
  • `\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\t//! API calls for profil update requests\n\tgetStatus() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getStatus'\n\t\t};\n\t},\n\tgetTopic() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getTopic'\n\t\t};\n\t},\n\tacceptProfilRequest({profil_update_id, uid, status_message, topic, requested_change}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/acceptProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\tstatus_message,\n\t\t\t\ttopic,\n\t\t\t\trequested_change\n\t\t\t}\n\t\t};\n\t},\n\tdenyProfilRequest({profil_update_id, uid, topic, status_message}) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/denyProfilRequest',\n\t\t\tparams: {\n\t\t\t\tprofil_update_id,\n\t\t\t\tuid,\n\t\t\t\ttopic,\n\t\t\t\tstatus_message\n\t\t\t}\n\t\t};\n\t},\n\tinsertFile(dms, replace = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/insertFile/${replace}`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tupdateProfilbild(dms) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/updateProfilbild`,\n\t\t\tparams: dms\n\t\t};\n\t},\n\tgetProfilUpdateWithPermission(filter) {\n\t\tconst url_filter = (filter !== '') ? '/' + encodeURIComponent(filter) : '';\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/getProfilUpdateWithPermission' + url_filter\n\t\t};\n\t},\n\tgetProfilRequestFiles(requestID) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: `/api/frontend/v1/ProfilUpdate/getProfilRequestFiles/${requestID}`\n\t\t};\n\t},\n\tselectProfilRequest(uid = null, id = null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/selectProfilRequest',\n\t\t\tparams: {\n\t\t\t\t...(uid ? { uid } : {}),\n\t\t\t\t...(id ? { id } : {})\n\t\t\t}\n\t\t};\n\t},\n\tinsertProfilRequest(topic, payload, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/insertProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tupdateProfilRequest(topic, payload, ID, fileID = null) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/updateProfilRequest',\n\t\t\tparams: {\n\t\t\t\ttopic,\n\t\t\t\tpayload,\n\t\t\t\tID,\n\t\t\t\t...(fileID ? { fileID } : {})\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProfilRequest(requestID) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/ProfilUpdate/deleteProfilRequest',\n\t\t\tparams: { requestID }\n\t\t};\n\t}\n};","import Dms from \"../../../../Form/Upload/Dms.js\";\nimport BsModal from \"../../../../Bootstrap/Modal.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tdmsData: [],\n\t\t};\n\t},\n\tcomponents: {\n\t\tDms,\n\t\tBsModal,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\ttitel: {\n\t\t\ttype: String,\n\t\t},\n\t\tfiles: {\n\t\t\ttype: Array,\n\t\t},\n\t\tupdateID: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\tmethods:{\n\t\tasync uploadImage(){\n\t\t\tif(this.dmsData){\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", this.dmsData[0]);\n\t\t\t\tawait this.$api\n\t\t\t\t\t.call(ApiProfilUpdate.updateProfilbild(formData))\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('global','hochgeladen'));\n\t\t\t\t\t\tthis.modal.hide();\n\t\t\t\t\t});\t\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t\tif (this.files) {\n\t\t\tthis.dmsData = this.files;\n\t\t}\n\t},\n\tpopup(options) {\n\t\t\tBsModal.popup.bind(this);\n\t\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/`\n\n\t\n\t\t\n\t\t\n\t\n `,\n};\n","import ApiProfil from '../../../../api/factory/profil.js';\nimport ImageUpload from '../../Profil/ProfilModal/EditProfilComponents/ImageUpload.js';\n\nexport default {\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t\tfotoStatus:{\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t}\n\t},\n\tcomponents:{\n\t\tImageUpload,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFotoSperre: this.data.foto_sperre,\n\t\t};\n\t},\n\temits: [\"showEditProfilModal\"],\n\tinject:[\"isEditable\"],\n\n\tmethods: {\n\t\tshowModal(){\n\t\t\tthis.$refs.imageUpload.show();\n\t\t},\n\t\tsperre_foto_function() {\n\t\t\t//TODO: refactor\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.fotoSperre(!this.FotoSperre))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.FotoSperre = res.data.foto_sperre;\n\t\t\t\t});\n\t\t}\n\t},\n\tcomputed: {\n\t\tget_image_base64_src: function () {\n\t\t\tif (!this.data.foto) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn \"data:image/jpeg;base64,\" + this.data.foto;\n\t\t},\n\t\tname: function () {\n\t\t\treturn {vorname: this.data.Vorname, nachname: this.data.Nachname};\n\t\t},\n\t\tprofilInfo: function () {\n\t\t\tlet res = {};\n\t\t\tlet notIncludedProperties = [\n\t\t\t\t\"Vorname\",\n\t\t\t\t\"Nachname\",\n\t\t\t\t\"foto_sperre\",\n\t\t\t\t\"foto\",\n\t\t\t];\n\t\t\tObject.keys(this.data).forEach((key) => {\n\t\t\t\tif (!notIncludedProperties.includes(key)) {\n\t\t\t\t\tres[key] = this.data[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t},\n\ttemplate: /*html*/ `\n\n
    \n\t\n
    \n
    \n
    \n \n
    \n
    \n {{title}}\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \"profile\n \n
    \n \n
    \n\t\t\t\t\t\t
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','vorname')}}
    \n {{name.vorname}} \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','nachname')}}
    \n {{name.nachname}} \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{$p.t('profil',bez)}}
    \n {{wert?wert:'-'}} \n
    \n
    \n
    \n
    \n
    \n`,\n};\n","import Kontakt from \"../ProfilComponents/Kontakt.js\";\nimport EditKontakt from \"./EditProfilComponents/EditKontakt.js\";\nimport Adresse from \"../ProfilComponents/Adresse.js\";\nimport EditAdresse from \"./EditProfilComponents/EditAdresse.js\";\nimport Status from \"./EditProfilComponents/Status.js\";\nimport TextInputDokument from \"./EditProfilComponents/TextInputDokument.js\";\n\nexport default {\n\tname: 'EditProfilSelect',\n\tcomponents: {\n\t\tKontakt,\n\t\tEditKontakt,\n\t\tAdresse,\n\t\tEditAdresse,\n\t\tStatus,\n\t\tTextInputDokument,\n\t},\n\tinject: [\"profilUpdateTopic\", \"isMitarbeiter\"],\n\tprops: {\n\t\tlist: Object,\n\n\t\t//? Prop used to determine how many options the select should initially show\n\t\tsize: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t//? Content for the aria label of the select\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tprofilUpdate: String,\n\t\ttopic: String,\n\t\tbreadcrumb: String,\n\t},\n\temits: {\n\t\t//? update:modelValue event is needed to notify the v-model when the value has changed\n\t\t[\"update:profilUpdate\"]: null,\n\t\t[\"update:topic\"]: null,\n\t\t[\"update:breadcrumb\"]: null,\n\t\tsubmit: null,\n\t\tselect: null,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\tbreadcrumbItems: [],\n\t\t\tmodal_topic: this.topic,\n\t\t\tproperties: null,\n\t\t};\n\t},\n\n\tmethods: {\n\t\taddItem: function () {\n\t\t\tthis.view =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? \"EditKontakt\"\n\t\t\t\t\t: \"EditAdresse\";\n\n\t\t\t//? updates the topic when a Kontakt or an Address should be added\n\t\t\tthis.modal_topic =\n\t\t\t\tthis.modal_topic == this.profilUpdateTopic[\"Private Kontakte\"]\n\t\t\t\t\t? this.profilUpdateTopic[\"Add Kontakt\"]\n\t\t\t\t\t: this.profilUpdateTopic[\"Add Adresse\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.breadcrumbItems.push(this.modal_topic);\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\n\t\t\tthis.data =\n\t\t\t\tthis.view == \"EditAdresse\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tadresse_id: null,\n\t\t\t\t\t\tstrasse: null,\n\t\t\t\t\t\ttyp: null,\n\t\t\t\t\t\tplz: null,\n\t\t\t\t\t\tort: null,\n\t\t\t\t\t\tzustelladresse: false,\n\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t//? add flag\n\t\t\t\t\t\tadd: true,\n\t\t\t\t\t\tkontakt_id: null,\n\t\t\t\t\t\tkontakttyp: null,\n\t\t\t\t\t\tkontakt: null,\n\t\t\t\t\t\tanmerkung: null,\n\t\t\t\t\t\tzustellung: false,\n\t\t\t\t\t};\n\t\t},\n\n\t\tdeleteItem: function (item) {\n\t\t\t//? delete flag\n\t\t\titem.data.delete = true;\n\t\t\tthis.$emit(\"update:profilUpdate\", item.data);\n\t\t\t//? updates the topic when a Kontakt or an Address should be deleted\n\n\t\t\tthis.modal_topic = this.modal_topic == this.profilUpdateTopic[\"Private Adressen\"]\n\t\t\t\t? this.profilUpdateTopic[\"Delete Adresse\"]\n\t\t\t\t: this.profilUpdateTopic[\"Delete Kontakt\"];\n\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\t\t\tthis.$emit(\"submit\");\n\t\t},\n\n\t\tprofilUpdateEmit: function (event) {\n\t\t\t//? passes the updated profil information to the parent component\n\t\t\tthis.$emit(\"update:profilUpdate\", event);\n\t\t},\n\n\t\tupdateOptions: function (event, item) {\n\t\t\tthis.properties = item;\n\t\t\tthis.data = item.data;\n\t\t\tthis.view = item.view;\n\t\t\tif (item.title) {\n\t\t\t\t//? emits the selected topic to the parent component\n\t\t\t\tthis.modal_topic = item.topic;\n\t\t\t\tthis.$emit(\"update:topic\", this.modal_topic);\n\n\t\t\t\t//? emits the new item for the breadcrumb in the parent component\n\t\t\t\tthis.breadcrumbItems.push(item.title);\n\t\t\t} else {\n\t\t\t\tif (item.data.kontakttyp) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakttyp);\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.kontakt);\n\t\t\t\t} else if (item.data.strasse) {\n\t\t\t\t\tthis.breadcrumbItems.push(item.data.strasse);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit(\"update:breadcrumb\", this.breadcrumbItems);\n\t\t},\n\t},\n\tcomputed: {},\n\tcreated() {\n\t\t//? JSON parse and stringify are used to deep clone the objects\n\t\tthis.properties = {...this.list};\n\t\tthis.data = this.list.data\n\t\t\t? JSON.parse(JSON.stringify(this.list.data))\n\t\t\t: null;\n\t\tthis.view = this.list.view\n\t\t\t? JSON.parse(JSON.stringify(this.list.view))\n\t\t\t: null;\n\t},\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ `\n \n \n `,\n};\n","export default {\n props: {\n data: Object,\n },\n\n data() {\n return {\n originalValue: null,\n zustellKontakteCount: null,\n };\n },\n\n inject: [\"getZustellkontakteCount\"],\n\n methods: {\n updateValue: function (event, bind) {\n if (bind === \"zustellung\") {\n this.data[bind] = event.target.checked;\n } else {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n },\n\n computed: {\n showZustellKontakteWarning: function () {\n\t // if the kontakt is already a zustellungskontakt when the user is editing the kontakt, then no warning is shown and the zustellung will be overwritten\n\t if (JSON.parse(this.originalValue).zustellung) {\n\t return false;\n\t }\n\t const kontakteOfSelectedType = this.zustellKontakteCount.filter((element) => {\n\t\t return element.kontakttyp === this.data?.kontakttyp\n\t });\n // if zustellKontakteCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellKontakteCount.some((element) => element.kontakt_id === this.data.kontakt_id)) {\n return this.data.zustellung && kontakteOfSelectedType.length;\n }\n return this.kontakteOfSelectedType.length >= 2 && this.data.zustellung;\n },\n isChanged: function () {\n //? returns true if the original passed data object was changed\n if (!this.data.kontakt || !this.data.kontakttyp) {\n return false;\n }\n return JSON.stringify(this.data) !== this.originalValue;\n },\n },\n\n created() {\n this.originalValue = JSON.stringify(this.data);\n this.zustellKontakteCount = this.getZustellkontakteCount();\n },\n \n template:\n /*html*/\n `\n\n
    \n\n
    \n\n\n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}
    \n\n \n
    \n\n
    \n
    \n\n \n\n\n
    \n
    {{data.kontakttyp?data.kontakttyp:$p.t('global','kontakt')}}
    \n\n \n
    \n\n
    \n
    \n\n
    \n
    {{$p.t('global','anmerkung')}}
    \n\n \n
    \n\n
    \n\n \n
    \n
    \n {{$p.t('profilUpdate','zustell_kontakte_warning')}}\n
    \n
    \n \n\n
    \n {{$p.t('profilUpdate','zustellungsKontakt')}}\n\n \n
    \n
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nimport ApiProfil from '../../../../../api/factory/profil.js';\n\nexport default {\n components: {\n AutoComplete: primevue.autocomplete,\n\tDms: Dms\n },\n\n props: {\n data: Object,\n files: {\n type: Array,\n default: []\n },\n },\n\n inject: [\"getZustelladressenCount\", \"updateFileID\", \"isMitarbeiter\"],\n\n data() {\n return {\n gemeinden: [],\n ortschaftnamen: [],\n selectedNation: null,\n nationenList: [],\n originalValue: null,\n zustellAdressenCount: null,\n\t dmsData: [],\n\t fileschanged: false\n };\n },\n\n watch: {\n \"data.gemeinde\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n \"data.ort\": function (newValue, oldValue) {\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n },\n },\n\n methods: {\n\n autocompleteSearchGemeinden: function (event) {\n this.gemeinden = this.gemeinden.map((gemeinde) => gemeinde);\n },\n\n autocompleteSearchOrtschaftsnamen: function (event) {\n this.ortschaftnamen = this.ortschaftnamen.map((ortschaft) => ortschaft);\n },\n\n getGemeinde: function () {\n //? only query the gemeinde is the nation is Austria and the PLZ is greater than 999 and less than 32000\n if (\n this.data.nation &&\n this.data.nation === \"A\" &&\n this.data.plz &&\n this.data.plz > 999 &&\n this.data.plz < 32000\n ) {\n this.$api\n .call(ApiProfil.getGemeinden(this.data.nation, this.data.plz))\n .then((res) => {\n if (res.data.length) {\n this.gemeinden = [\n ...new Set(\n res.data.map((element) => {\n return element.name;\n })\n ),\n ];\n this.ortschaftnamen = [\n ...new Set(\n res.data.map((element) => {\n return element.ortschaftsname;\n })\n ),\n ];\n }\n });\n } else {\n this.gemeinden = [];\n }\n },\n\n updateValue: function (event, bind) {\n //? sets the value of a property to null when an empty string is entered to keep the isChanged function valid\n if (bind === \"zustelladresse\") {\n this.data[bind] = event.target.checked;\n\t } else if(bind === 'files') {\n\t\t if(this.dmsData.length > 0 && this.dmsData[0].type !== 'application/x.fhc-dms+json') {\n\t\t this.fileschanged = true;\n\t\t }\n\t\t this.updateFileID(this.dmsData);\n } else {\n this.data[bind] = event.target.value === \"\" ? null : event.target.value;\n }\n\n this.$emit(\"profilUpdate\", this.isChanged ? this.data : null);\n // update the zustellAdressen count\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n\tdeleteDmsData: function() {\n\t\tthis.dmsData = [];\n\t\tthis.updateValue(null, 'files');\n\t}\n },\n\n computed: {\n showZustellAdressenWarning: function () {\n\n\t // if the address was already a zustellungsadresse when editing the address, then the warning will not be shown and the zustellungsadresse will just be overwritten\n\t if (JSON.parse(this.originalValue).zustelladresse){\n\t\treturn false;\n\t }\n // if zustellAdressenCount is not 0 and the own kontakt has the flag zustellung set to true\n if (!this.zustellAdressenCount.includes(this.data.adresse_id)) {\n return this.data.zustelladresse && this.zustellAdressenCount.length;\n }\n return this.zustellAdressenCount.length >= 2 && this.data.zustelladresse;\n },\n isChanged: function () {\n if (\n !this.data.strasse ||\n !this.data.plz ||\n !this.data.ort ||\n !this.data.typ ||\n this.dmsData.length === 0\n ) {\n return false;\n }\n\n const datachanged = this.originalValue !== JSON.stringify(this.data);\n return datachanged || this.fileschanged;\n },\n },\n\n created() {\n // get all available nationen\n this.$api\n .call(ApiProfil.getAllNationen())\n .then(res => {\n this.nationenList = res.data;\n this.getGemeinde();\n });\n \n this.originalValue = JSON.stringify(this.data);\n this.zustellAdressenCount = this.getZustelladressenCount();\n },\n\n mounted() {\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n\n template: /*html*/ `\n
    \n \n
    \n
    \n\t {{$p.t('profilUpdate','zustell_adressen_warning')}}\n
    \n
    \n \n\n\n
    \n
    \n \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','nation')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','plz')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','gemeinde')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','ort')}}*
    \n \n
    \n
    \n\n \n
    \n
    \n
    {{$p.t('person','strasse')}}*
    \n \n
    \n
    \n \n \n
    \n
    \n
    {{$p.t('profilUpdate','kontaktTyp')}}*
    \n \n
    \n
    \n\n\t
    \n\t\t
    \n\t\t\t
    {{$p.t('profilUpdate','meldebestaetigung')}}*
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t
     
    \n\t\t\t\n\t\t
    \n\t
    \n\n
    \n `,\n};\n","import Adresse from \"../../ProfilComponents/Adresse.js\";\nimport Kontakt from \"../../ProfilComponents/Kontakt.js\";\n\nimport ApiProfilUpdate from '../../../../../api/factory/profilUpdate.js';\n\nexport default {\n components: {\n Adresse,\n Kontakt,\n },\n inject: [\"profilUpdateTopic\"],\n data() {\n return {\n files: null,\n };\n },\n methods: {\n getDocumentLink: function (dms_id) {\n return (\n FHC_JS_DATA_STORAGE_OBJECT.app_root +\n FHC_JS_DATA_STORAGE_OBJECT.ci_router +\n `/Cis/ProfilUpdate/show/${dms_id}`\n );\n },\n },\n computed: {\n getComponentView: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Private Adressen\"] ||\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Adresse\"]\n ) {\n return \"Adresse\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Private Kontakte\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Kontakt\";\n } else {\n return \"text_input\";\n }\n },\n cardHeader: function () {\n if (\n this.topic == this.profilUpdateTopic[\"Delete Addresse\"] ||\n this.topic == this.profilUpdateTopic[\"Delete Kontakt\"]\n ) {\n return \"Delete\";\n } else if (\n this.topic == this.profilUpdateTopic[\"Add Adresse\"] ||\n this.topic == this.profilUpdateTopic[\"Add Kontakt\"]\n ) {\n return \"Add\";\n } else {\n return \"Update\";\n }\n },\n },\n props: {\n data: { type: Object },\n view: { type: String },\n status: { type: String },\n status_message: { type: String },\n status_timestamp: { type: String },\n updateID: { type: Number },\n topic: { type: String },\n },\n created() {\n this.$api\n .call(ApiProfilUpdate.getProfilRequestFiles(this.updateID))\n .then((res) => {\n this.files = res.data;\n });\n },\n template: /*html*/ `\n
    \n\n
    \n
    \n
    {{$p.t('global','status')}}
    \n {{status}} \n
    \n
    \n\n
    \n
    \n
    {{$p.t('global','datum')}}
    \n {{status_timestamp}} \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    {{$p.t('profilUpdate','statusMessage')}}
    \n \n
    \n
    \n
    \n\n\n
    \n
    \n \n {{cardHeader}} \n
    \n
    \n \n \n \n
    \n
    \n\n\t
    \n\t\t
    {{$p.t('profilUpdate','nachweisdokumente')}}
    \n\t\t
    \n\t\t\t{{file.name}}\n\t\t
    \n\t
    \n `,\n};\n","import Dms from \"../../../../Form/Upload/Dms.js\";\n\nexport default {\n data() {\n return {\n dmsData: [],\n originalValue: null,\n };\n },\n components: {\n Dms,\n },\n props: {\n data: {\n type: Object,\n },\n withFiles: {\n type: Boolean,\n default: false,\n },\n files: {\n type: Array,\n },\n updateID: {\n type: Boolean,\n },\n },\n inject:[\"updateFileID\"],\n computed: {\n didFilesChange: function () {\n this.updateFileID(this.dmsData);\n let res = false;\n //? case in which the profilRequest has already associated files \n if(this.files){ \n Array.from(this.dmsData).forEach((file) => {\n if (this.files.some((f) => f.name !== file.name)) {\n res = true;\n }\n });\n return !(this.dmsData.length == this.files.length) || res;\n }\n //? case in which the user creates a new profilRequest\n else{ \n return Array.from(this.dmsData).length? true:false;\n }\n },\n didDataChange: function(){\n return JSON.stringify(this.data) !== this.originalValue;\n },\n isChanged: function () {\n if (this.withFiles) {\n if(this.updateID){\n return (this.didDataChange || this.didFilesChange) && this.dmsData.length;\n }\n return this.didDataChange && this.didFilesChange;\n }\n return this.didDataChange\n },\n },\n emits: [\"profilUpdate\"],\n watch: {\n //? watcher to trigger the event emit when a file was uploaded or removed\n dmsData(value) {\n this.emitChanges();\n },\n },\n methods: {\n stringifyFile(file) {\n\t\t\treturn JSON.stringify({\n\t\t\t\tlastModified: file.lastModified,\n\t\t\t\tlastModifiedDate: file.lastModifiedDate,\n\t\t\t\tname: file.name,\n\t\t\t\tsize: file.size,\n\t\t\t\ttype: file.type\n\t\t\t});\n\t\t},\n emitChanges: function () {\n if (this.isChanged) {\n \n this.$emit(\n \"profilUpdate\", { value: this.data.value }\n );\n } else {\n this.$emit(\"profilUpdate\", null);\n }\n },\n },\n mounted() {\n this.originalValue = JSON.stringify(Vue.toRaw(this.data));\n\n if (this.files) {\n this.dmsData = this.files;\n }\n },\n template: /*html*/`\n\n

    {{$p.t('profilUpdate','profilUpdateInformationMessage',[data.titel])}}

    \n\n
    \n
    {{data.titel?data.titel:$p.t('global','titel')}}
    \n\n \n\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n `,\n};\n","import BsModal from './Bootstrap/Modal.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal\n\t},\n\tprops: {\n\t\ttimeout: {\n\t\t\ttype: Number,\n\t\t\tdefault: 300\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tt: null,\n\t\t\tstate: 0\n\t\t}\n\t},\n\tmethods: {\n\t\tshow() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.timeout) {\n\t\t\t\t\t\tthis.state = 1;\n\t\t\t\t\t\tthis.t = window.setTimeout(() => this.$refs.modal.show(), this.timeout);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else\n\t\t\t\t\t\treturn this.$refs.modal.show();\n\t\t\t\tcase 4:\n\t\t\t\t\treturn window.setTimeout(() => this.show(), 1);\n\t\t\t}\n\t\t},\n\t\thide() {\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 1:\n\t\t\t\t\treturn window.clearTimeout(this.t);\n\t\t\t\tcase 2:\n\t\t\t\t\treturn window.setTimeout(() => this.hide(), 1);\n\t\t\t\tcase 3:\n\t\t\t\t\tthis.$refs.modal.hide();\n\t\t\t}\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.$refs.modal.$refs.modal.addEventListener('show.bs.modal', () => {\n\t\t\tthis.state = 2;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('shown.bs.modal', () => {\n\t\t\tthis.state = 3;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hide.bs.modal', () => {\n\t\t\tthis.state = 4;\n\t\t});\n\t\tthis.$refs.modal.$refs.modal.addEventListener('hidden.bs.modal', () => {\n\t\t\tthis.state = 0;\n\t\t});\n\t},\n\ttemplate: `\n\t\n\t\tLoading...\n\t`\n}","import BsModal from \"../../../Bootstrap/Modal.js\";\nimport Alert from \"../../../Bootstrap/Alert.js\";\nimport EditProfilSelect from \"./EditProfilSelect.js\";\nimport Loader from \"../../../Loader.js\";\n\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\nexport default {\n\tcomponents: {\n\t\tBsModal,\n\t\tAlert,\n\t\tEditProfilSelect,\n\t\tLoader,\n\t},\n\tmixins: [BsModal],\n\tprops: {\n\t\tisMitarbeiter: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tvalue: Object,\n\t\ttitel: String,\n\t\tzustelladressenCount: Function,\n\t\tzustellkontakteCount: Function,\n\t\t/*\n\t\t * NOTE(chris):\n\t\t * Hack to expose in \"emits\" declared events to $props which we use\n\t\t * in the v-bind directive to forward all events.\n\t\t * @see: https://github.com/vuejs/core/issues/3432\n\t\t */\n\t\tonHideBsModal: Function,\n\t\tonHiddenBsModal: Function,\n\t\tonHidePreventedBsModal: Function,\n\t\tonShowBsModal: Function,\n\t\tonShownBsModal: Function,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\ttopic: null,\n\t\t\tprofilUpdate: null,\n\t\t\teditData: this.value,\n\t\t\tfileID: null,\n\t\t\tbreadcrumb: null,\n\t\t\tloading: false,\n\t\t\tresult: false,\n\t\t\tinfo: null,\n\t\t};\n\t},\n\tinject: [\"setLoading\"],\n\tprovide() {\n\t\treturn {\n\t\t\tupdateFileID: this.updateFileIDFunction,\n\t\t\tisMitarbeiter: this.isMitarbeiter\n\t\t};\n\t},\n\n\tmethods: {\n\t\tupdateFileIDFunction: function (newFileID) {\n\t\t\tthis.fileID = newFileID;\n\t\t},\n\n\t\thandleFailedError: function (err) {\n\t\t\tconsole.error(err);\n\t\t\tthis.loading = false;\n\t\t\tthis.setLoading(false);\n\t\t\tthis.result = false;\n\t\t\tthis.hide();\n\t\t},\n\n\t\tasync submitProfilChange() {\n\n\t\t\t//? check if data is valid before making a request\n\t\t\tif (this.topic && this.profilUpdate) {\n\t\t\t\t//? if profil update contains any attachment\n\t\t\t\tif (this.fileID) {\n\t\t\t\t\tconst fileData = await this.uploadFiles(this.fileID);\n\n\t\t\t\t\tthis.fileID = fileData ? fileData : null;\n\t\t\t\t}\n\n\t\t\t\t//? inserts new row in public.tbl_cis_profil_update\n\t\t\t\t//* calls the update api call if an update field is present in the data that was passed to the modal\n\t\t\t\tconst handleApiResponse = (res) => {\n\t\t\t\t\t//? toggles the loading to false and closes the loading modal\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\tthis.result = false;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ein Fehler ist aufgetreten: \" + JSON.stringify(res.data.retval)\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.result = true;\n\t\t\t\t\t\tAlert.popup(\n\t\t\t\t\t\t\t\"Ihre Anfrage wurde erfolgreich gesendet. Bitte warten Sie, während sich das Team um Ihre Anfrage kümmert.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t//* v-show on EditProfil modal binded to this.loading\n\t\t\t\t//? hides the EditProfil modal and shows the loading modal by calling a callback that was passed as prop from the parent component\n\t\t\t\tthis.loading = true;\n\t\t\t\tthis.setLoading(true);\n\n\t\t\t\t//? if an updateID is present, updateProfilRequest is called, else insertProfilRequest is called\n\t\t\t\tthis.editData.updateID ?\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.updateProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.editData.updateID,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t})\n\t\t\t\t\t:\n\t\t\t\t\tthis.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertProfilRequest(\n\t\t\t\t\t\t\tthis.topic,\n\t\t\t\t\t\t\tthis.profilUpdate,\n\t\t\t\t\t\t\tthis.fileID ? this.fileID[0] : null\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\thandleApiResponse(res);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => this.$fhcAlert.handleSystemError)\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tthis.loading = false;\n\t\t\t\t\t\t\tthis.setLoading(false);\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tuploadFiles: async function (files) {\n\t\t\tif (files[0].type !== \"application/x.fhc-dms+json\") {\n\t\t\t\tlet formData = new FormData();\n\t\t\t\tformData.append(\"files[]\", files[0]);\n\t\t\t\tconst result = this.editData.updateID\n\t\t\t\t\t? //? updating old attachment by replacing\n\t\t\t\t\t //* second parameter of api request insertFile checks if the file has to be replaced or not\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(\n\t\t\t\t\t\t\tformData,\n\t\t\t\t\t\t\tthis.editData.updateID\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t})\n\t\t\t\t\t: //? fresh insert of new attachment\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.insertFile(formData))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data?.map((file) => file.dms_id);\n\t\t\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\t//? attachment hasn't been replaced\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t},\n\tcomputed: {\n\t\tshowFooter: function () {\n\t\t\tswitch (this.value.view) {\n\t\t\t\tcase 'Status':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Kontakt':\n\t\t\t\t\treturn false;\n\t\t\t\tcase 'Adresse':\n\t\t\t\t\treturn false;\n\t\t\t\tdefault:\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\tif (this.editData.topic) {\n\t\t\t//? if the topic was passed through the prop add it to the component\n\t\t\tthis.topic = this.editData.topic;\n\t\t}\n\t},\n\tmounted() {\n\t\tthis.modal = this.$refs.modalContainer.modal;\n\t},\n\tpopup(options) {\n\t\tBsModal.popup.bind(this);\n\t\treturn BsModal.popup(null, options);\n\t},\n\ttemplate: /*html*/ `\n\n\t\n\t\n\t\n\t\n \n`,\n};\n","import EditProfil from \"../ProfilModal/EditProfil.js\";\n\nimport ApiProfil from '../../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../../api/factory/profilUpdate.js';\n\n//? EditProfil is the modal used to edit the profil updates\nexport default {\n\tcomponents: {EditProfil},\n\tprops: {\n\t\tdata: {\n\t\t\ttype: Object,\n\t\t},\n\t},\n\n\tinject: [\n\t\t\"getZustellkontakteCount\",\n\t\t\"getZustelladressenCount\",\n\t\t\"profilUpdateStates\",\n\t\t\"profilUpdateTopic\",\n\t],\n\n\temits: [\"fetchUpdates\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowUpdateModal: false,\n\t\t\tcontent: null,\n\t\t\teditProfilTitle: this.$p.t(\"profil\", \"profilBearbeiten\"),\n\t\t};\n\t},\n\n\tmethods: {\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.updateEditModal.result) {\n\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showUpdateModal = false;\n\t\t},\n\n\t\tasync showEditProfilModal(updateRequest) {\n\n\t\t\tlet view = this.getView(updateRequest.topic, updateRequest.status);\n\n\t\t\tlet data = null;\n\t\t\tlet content = null;\n\t\t\tlet files = null;\n\t\t\tlet withFiles = false;\n\n\t\t\tif (view === \"TextInputDokument\") {\n\t\t\t\tdata = {\n\t\t\t\t\ttitel: updateRequest.topic,\n\t\t\t\t\tvalue: updateRequest.requested_change.value,\n\t\t\t\t};\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tif (files) {\n\t\t\t\t\twithFiles = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata = updateRequest.requested_change;\n\t\t\t}\n\n\t\t\tcontent = {\n\t\t\t\tupdateID: updateRequest.profil_update_id,\n\t\t\t\tview: view,\n\t\t\t\tdata: data,\n\t\t\t\twithFiles: withFiles,\n\t\t\t\ttopic: updateRequest.topic,\n\t\t\t\tfiles: files,\n\t\t\t};\n\n\t\t\tif (view === \"EditAdresse\") {\n\n\t\t\t\tconst isMitarbeiter = await this.$api.call(ApiProfil.isMitarbeiter(updateRequest.uid)).then((res) => res.data);\n\n\t\t\t\tif (isMitarbeiter) {\n\t\t\t\t\tcontent[\"isMitarbeiter\"] = isMitarbeiter;\n\t\t\t\t}\n\n\t\t\t\tconst filesFromDatabase =\n\t\t\t\t\tawait this.$api\n\t\t\t\t\t\t.call(ApiProfilUpdate.getProfilRequestFiles(\n\t\t\t\t\t\t\tupdateRequest.profil_update_id\n\t\t\t\t\t\t))\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\treturn res.data;\n\t\t\t\t\t\t});\n\n\t\t\t\tfiles = filesFromDatabase;\n\t\t\t\tcontent[\"files\"] = files;\n\t\t\t}\n\n\t\t\t//? adds the status information if the profil update request was rejected or accepted\n\t\t\tif (updateRequest.status !== this.profilUpdateStates[\"Pending\"]) {\n\t\t\t\tcontent[\"status\"] = updateRequest.status;\n\t\t\t\tcontent[\"status_message\"] = updateRequest.status_message;\n\t\t\t\tcontent[\"status_timestamp\"] = updateRequest.status_timestamp;\n\t\t\t}\n\n\t\t\t//? update data of the reactive content\n\t\t\tthis.content = content;\n\t\t\tthis.editProfilTitle = updateRequest.topic;\n\n\t\t\t//? only show the popup if also the right content is available\n\t\t\tif (content) {\n\t\t\t\tthis.showUpdateModal = true;\n\t\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\tthis.$refs.updateEditModal.show();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tdeleteRequest: function (item) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.deleteProfilRequest(item.profil_update_id))\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.data.error) {\n\t\t\t\t\t\t//? open alert\n\t\t\t\t\t\tconsole.error(\"error happened\", res.data);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$emit(\"fetchUpdates\");\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\tgetView: function (topic, status) {\n\t\t\tif (!(status === this.profilUpdateStates[\"Pending\"])) {\n\t\t\t\treturn \"Status\";\n\t\t\t}\n\n\t\t\tswitch (topic) {\n\t\t\t\tcase this.profilUpdateTopic[\"Private Kontakte\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Kontakt\"]:\n\t\t\t\t\treturn \"EditKontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Kontakt\"]:\n\t\t\t\t\treturn \"Kontakt\";\n\t\t\t\tcase this.profilUpdateTopic[\"Private Adressen\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Add Adresse\"]:\n\t\t\t\t\treturn \"EditAdresse\";\n\t\t\t\tcase this.profilUpdateTopic[\"Delete Adresse\"]:\n\t\t\t\t\treturn \"Adresse\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"TextInputDokument\";\n\t\t\t}\n\t\t},\n\n\t},\n\tcreated() {\n\t},\n\n\tcomputed: {},\n\n\ttemplate: /*html*/ `\n
    \n \n
    {{$p.t('profilUpdate','profilUpdates')}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{$p.t('profilUpdate','topic')}}{{$p.t('global','status')}}{{$p.t('global','datum')}}{{$p.t('ui','aktion')}}
    {{item.topic}}{{item.status}}{{item.status_timestamp?item.status_timestamp:item.insertamum}}
    \n
    \n
    \n
    \n`,\n};\n","if (!primevue) {\n\tconsole.error('PrimeVue not loaded!');\n}\n\n// NOTE(chris): Click on clear button gives an error. This is a bug in primevue => fixed in current version\nTabulator.extendModule('filter', 'filters', {\n\t\"dates\": (headerValue, rowValue) => {\n\t\tif (!headerValue)\n\t\t\treturn true;\n\n\t\tlet rowDate = new Date(rowValue);\n\n\t\tif (Array.isArray(headerValue))\n\t\t{\n\t\t\tlet startDate = new Date(headerValue[0]);\n\t\t\tif (headerValue[1])\n\t\t\t{\n\t\t\t\tlet endDate = new Date(headerValue[1]);\n\n\t\t\t\tendDate.setHours(23, 59, 59, 999);\n\n\t\t\t\treturn rowDate >= startDate && rowDate <= endDate;\n\t\t\t}\n\n\t\t\treturn rowDate.toDateString() === startDate.toDateString();\n\t\t}\n\t\tlet singleDate = new Date(headerValue);\n\t\treturn rowDate.toDateString() === singleDate.toDateString();\n\t}\n});\n\nfunction dateFilter(cell, onRendered, success) {\n\tlet div = document.createElement('div');\n\n\tlet initialValue = null;\n\n\tlet val = cell.getValue();\n\n\tif (Array.isArray(val))\n\t{\n\t\tconst start = val[0] ? new Date(val[0]) : null;\n\t\tconst end = val[1] ? new Date(val[1]) : null;\n\t\tinitialValue = [start, end];\n\t}\n\n\tVue.createApp({\n\t\tcomponents: {\n\t\t\tPrimevueCalendar: primevue.calendar\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tval: initialValue\n\t\t\t}\n\t\t},\n\t\twatch: {\n\t\t\tval(n) {\n\t\t\t\tsuccess(n);\n\t\t\t}\n\t\t},\n\t\ttemplate: `\n\t\t\t\t `\n\t}).use(primevue.config.default).mount(div);\n\n\treturn div;\n}\nexport { dateFilter };","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tAusweisStatus,\n\t\tQuickLinks,\n\t\tAdresse,\n\t\tKontakt,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t\tFetchProfilUpdates,\n\t\tEditProfil,\n\t},\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\tcollapseIconBetriebsmittel: true,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tzutrittsgruppen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilZutrittsgruppen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 200,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tcolumns: [{\n\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.zutrittsGruppenPhrase),\n\t\t\t\t\tfield: \"bezeichnung\"\n\t\t\t\t}],\n\t\t\t},\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableStudentProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(()=>this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.inventarnummerPhrase) ,\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() =>this.preloadedPhrasen.ausgabedatum) ,\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\tmethods: {\n\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tzutrittsgruppenTableBuilt: function () {\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t\tthis.$refs.zutrittsgruppenTable.tabulator.setData(\n\t\t\t\tthis.data.zuttritsgruppen\n\t\t\t);\n\t\t},\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\t\t\tthis.showModal = true;\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory('profil').then(() => {\n\t\t\tthis.preloadedPhrasen.zutrittsGruppenPhrase = this.$p.t('profil/zutrittsGruppen');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatum = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\t},\n\twatch: {\n\t\t'language.value'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.zutrittsgruppenTable) this.$refs.zutrittsgruppenTable.tabulator.setColumns(this.zutrittsgruppen_table_options.columns)\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n \n
    \n \n
    \n \n\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\n\t\t\t\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateKontakte')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\n\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t{{$p.t('profil','privateAdressen')}}\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n \n
    \n \n
    \n \n
    \n\n
    \n`,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport EditProfil from \"./ProfilModal/EditProfil.js\";\nimport Adresse from \"./ProfilComponents/Adresse.js\";\nimport Kontakt from \"./ProfilComponents/Kontakt.js\";\nimport FetchProfilUpdates from \"./ProfilComponents/FetchProfilUpdates.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport AusweisStatus from \"./ProfilComponents/FhAusweisStatus.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tEditProfil,\n\t\tAdresse,\n\t\tKontakt,\n\t\tFetchProfilUpdates,\n\t\tAusweisStatus,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tinject: [\"sortProfilUpdates\", \"collapseFunction\", \"language\",\"isEditable\"],\n\n\tdata() {\n\t\treturn {\n\t\t\tshowModal: false,\n\t\t\teditDataFilter: null,\n\t\t\tpreloadedPhrasen:{},\n\t\t\t// tabulator options\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.bezeichnungPhrase),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.organisationseinheitPhrase),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigVonPhrase),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.gueltigBisPhrase),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.wochenstundenPhrase),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\n\t\t\tbetriebsmittel_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaProfilBetriebsmittel\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tdata: [{betriebsmittel: \"\", Nummer: \"\", Ausgegeben_am: \"\"}],\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.entlehnteBetriebsmittelPhrase),\n\t\t\t\t\t\tfield: \"betriebsmittel\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.inventarnummerPhrase),\n\t\t\t\t\t\tfield: \"Nummer\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.preloadedPhrasen.ausgabedatumPhrase),\n\t\t\t\t\t\tfield: \"Ausgegeben_am\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t};\n\t},\n\n\tprops: {\n\t\tdata: Object,\n\t\teditData: Object,\n\t},\n\t\n\tmethods: {\n\t\tbetriebsmittelTableBuilt: function () {\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tthis.$refs.betriebsmittelTable.tabulator.setData(this.data.mittel);\n\t\t},\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\thideEditProfilModal: function () {\n\t\t\t//? checks the editModal component property result, if the user made a successful request or not\n\t\t\tif (this.$refs.editModal.result) {\n\t\t\t\tthis.$api\n\t\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t\t.then((request) => {\n\t\t\t\t\t\tif (!request.error && request.data) {\n\t\t\t\t\t\t\tthis.data.profilUpdates = request.data;\n\t\t\t\t\t\t\tthis.data.profilUpdates.sort(this.sortProfilUpdates);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(\"Error when fetching profile updates: \" + request);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// when modal was closed without submitting request\n\t\t\t}\n\t\t\tthis.showModal = false;\n\t\t\tthis.editDataFilter = null;\n\t\t},\n\n\t\tshowEditProfilModal(view) {\n\t\t\tif (view) {\n\t\t\t\tthis.editDataFilter = view;\n\t\t\t}\n\n\t\t\tthis.showModal = true;\n\t\t\tVue.nextTick(() => {\n\t\t\t\tthis.$refs.editModal.show();\n\t\t\t});\n\n\t\t\t// after a state change, wait for the DOM updates to complete\n\t\t},\n\n\t\tfetchProfilUpdates: function () {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.selectProfilRequest())\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.error && res) {\n\t\t\t\t\t\tthis.data.profilUpdates = res.data?.length\n\t\t\t\t\t\t\t? res.data.sort(this.sortProfilUpdates)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tsetTableColumnTitles() { // reevaluates computed phrasen\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns)\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfilteredEditData() {\n\t\t\treturn this.editDataFilter\n\t\t\t\t? this.editData.data[this.editDataFilter]\n\t\t\t\t: this.editData;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tcreated() {\n\t\t// preload phrasen\n\t\tthis.$p.loadCategory([\"ui\",\"lehre\",\"global\",\"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.entlehnteBetriebsmittelPhrase = this.$p.t('profil/entlehnteBetriebsmittel');\n\t\t\tthis.preloadedPhrasen.inventarnummerPhrase = this.$p.t('profil/inventarnummer');\n\t\t\tthis.preloadedPhrasen.ausgabedatumPhrase = this.$p.t('profil/ausgabedatum');\n\t\t\tthis.preloadedPhrasen.loaded=true;\n\t\t});\n\t\t//? sorts the profil Updates: pending -> accepted -> rejected\n\t\tthis.data.profilUpdates?.sort(this.sortProfilUpdates);\n\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'data.mittel'(newVal) {\n\t\t\tif(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) {\n\t\t\tthis.setTableColumnTitles()\n\t\t}\n\t},\n\ttemplate: /*html*/ `\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateKontakte')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{$p.t('profil','privateAdressen')}}\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n\n \n `,\n};\n","import QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nexport default {\n\tdata() {\n\t\treturn {};\n\t},\n\tcomponents: {\n\t\tQuickLinks,\n\t\tMailverteiler,\n\t\tProfilEmails,\n\t\tRoleInformation,\n\t\tProfilInformation,\n\t},\n\n\tprops: [\"data\"],\n\tprovide() {\n\t\treturn {\n\t\t\tstudiengang_kz: Vue.computed({ get: () => this.data.studiengang_kz }),\n\t\t}\n\t},\n\t\n\tmethods: {},\n\n\tcomputed: {\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('person','personenkennzeichen')}`,\n\t\t\t\t\tvalue: this.data.personenkennzeichen\n\t\t\t\t},\n\t\t\t\tstudiengang: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','studiengang')}`,\n\t\t\t\t\tvalue: this.data.studiengang\n\t\t\t\t},\n\t\t\t\tsemester: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','semester')}`,\n\t\t\t\t\tvalue: this.data.semester\n\t\t\t\t},\n\t\t\t\tverband: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','lehrverband')}`,\n\t\t\t\t\tvalue: this.data.verband\n\t\t\t\t},\n\t\t\t\tgruppe: {\n\t\t\t\t\tlabel: `${this.$p.t('lehre','gruppe')}`,\n\t\t\t\t\tvalue: this.data.gruppe.trim()\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\n\tmounted() {\n\t},\n\n\ttemplate: /*html*/ ` \n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n \n \n \n \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n `,\n};\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport Mailverteiler from \"./ProfilComponents/Mailverteiler.js\";\nimport QuickLinks from \"./ProfilComponents/QuickLinks.js\";\nimport RoleInformation from \"./ProfilComponents/RoleInformation.js\";\nimport ProfilEmails from \"./ProfilComponents/ProfilEmails.js\";\nimport ProfilInformation from \"./ProfilComponents/ProfilInformation.js\";\n\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport default {\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t\tMailverteiler,\n\t\tQuickLinks,\n\t\tRoleInformation,\n\t\tProfilEmails,\n\t\tProfilInformation,\n\t},\n\tinject: [\"collapseFunction\", \"language\"],\n\tdata() {\n\t\treturn {\n\t\t\tcollapseIconFunktionen: true,\n\t\t\tpreloadedPhrasen:{},\n\t\t\tfunktionen_table_options: {\n\t\t\t\tpersistenceID: \"filterTableMaViewProfilFunktionen\",\n\t\t\t\tpersistence: {\n\t\t\t\t\tcolumns: false\n\t\t\t\t},\n\t\t\t\tminHeight: 300,\n\t\t\t\tlayout: \"fitColumns\",\n\t\t\t\tresponsiveLayout: \"collapse\",\n\t\t\t\tresponsiveLayoutCollapseUseFormatters: false,\n\t\t\t\tresponsiveLayoutCollapseFormatter: Vue.$collapseFormatter,\n\t\t\t\tcolumns: [\n\t\t\t\t\t//? option when wanting to hide the collapsed list\n\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\tfield: \"collapse\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\theaderFilter: false,\n\t\t\t\t\t\tformatter: \"responsiveCollapse\",\n\t\t\t\t\t\tmaxWidth: 40,\n\t\t\t\t\t\theaderClick: this.collapseFunction,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('ui/bezeichnung')),\n\t\t\t\t\t\tfield: \"Bezeichnung\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('lehre/organisationseinheit')),\n\t\t\t\t\t\tfield: \"Organisationseinheit\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigVon')),\n\t\t\t\t\t\tfield: \"Gültig_von\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('global/gueltigBis')),\n\t\t\t\t\t\tfield: \"Gültig_bis\",\n\t\t\t\t\t\theaderFilterFunc: 'dates',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true,\n\t\t\t\t\t\tformatter:\"datetime\",\n\t\t\t\t\t\tformatterParams: this.datetimeFormatterParams()\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: Vue.computed(() => this.$p.t('profil/wochenstunden')),\n\t\t\t\t\t\tfield: \"Wochenstunden\",\n\t\t\t\t\t\theaderFilter: true,\n\t\t\t\t\t\tminWidth: 200,\n\t\t\t\t\t\tvisible: true\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t},\n\n\t//? this is the prop passed to the dynamic component with the custom data of the view\n\tprops: [\"data\"],\n\tmethods: {\n\t\tfunktionenTableBuilt: function () {\n\t\t\tthis.$refs.funktionenTable.tabulator.setData(this.data.funktionen);\n\t\t},\n\t\tdatetimeFormatterParams: function() {\n\t\t\tconst params = {\n\t\t\t\tinputFormat:\"yyyy-MM-dd\",\n\t\t\t\toutputFormat:\"dd.MM.yyyy\",\n\t\t\t\tinvalidPlaceholder:\"(invalid date)\",\n\t\t\t\ttimezone:FHC_JS_DATA_STORAGE_OBJECT.timezone\n\t\t\t};\n\t\t\treturn params;\n\t\t}\n\t},\n\twatch: {\n\t\t'data.funktionen'(newVal) {\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setData(newVal);\n\t\t},\n\t\t'language.value'(newVal) { // reevaluates computed phrasen\n\t\t\tif(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns)\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetTelefonValue() {\n\t\t\tif(this.data.standort_telefon?.kontakt) {\n\t\t\t\treturn this.data.standort_telefon.kontakt + \" \" + this.data.telefonklappe\n\t\t\t} else if(this.data.standort_telefon) {\n\t\t\t\treturn this.data.standort_telefon + \" \" + this.data.telefonklappe\n\t\t\t} else {\n\t\t\t\treturn this.data.telefonklappe\n\t\t\t}\n\t\t},\n\t\tfotoStatus() {\n\t\t\treturn this.data?.fotoStatus ?? null;\n\t\t},\n\n\t\tpersonEmails() {\n\t\t\treturn this.data?.emails ? this.data.emails : [];\n\t\t},\n\n\t\tprofilInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tVorname: this.data.vorname,\n\t\t\t\tNachname: this.data.nachname,\n\t\t\t\tUsername: this.data.username,\n\t\t\t\tAnrede: this.data.anrede,\n\t\t\t\tTitel: this.data.titel,\n\t\t\t\tPostnomen: this.data.postnomen,\n\t\t\t\tfoto_sperre: this.data.foto_sperre,\n\t\t\t\tfoto: this.data.foto,\n\t\t\t};\n\t\t},\n\n\t\troleInformation() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tgeburtsdatum: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsdatum')}`,\n\t\t\t\t\tvalue: this.data.gebdatum\n\t\t\t\t},\n\t\t\t\tgeburtsort: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Geburtsort')}`,\n\t\t\t\t\tvalue: this.data.gebort\n\t\t\t\t},\n\t\t\t\tpersonenkennzeichen: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Kurzzeichen')}`,\n\t\t\t\t\tvalue: this.data.kurzbz\n\t\t\t\t},\n\t\t\t\ttelefon: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Telefon')}`,\n\t\t\t\t\tvalue: this.getTelefonValue\n\t\t\t\t},\n\t\t\t\toffice: {\n\t\t\t\t\tlabel: `${this.$p.t('profil','Büro')}`,\n\t\t\t\t\tvalue: this.data.ort_kurzbz\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t},\n\tcreated(){\n\t\tthis.$p.loadCategory([\"ui\", \"lehre\", \"global\", \"profil\"]).then(() => {\n\t\t\tthis.preloadedPhrasen.bezeichnungPhrase = this.$p.t('ui/bezeichnung');\n\t\t\tthis.preloadedPhrasen.organisationseinheitPhrase = this.$p.t('lehre/organisationseinheit');\n\t\t\tthis.preloadedPhrasen.gueltigVonPhrase = this.$p.t('global/gueltigVon');\n\t\t\tthis.preloadedPhrasen.gueltigBisPhrase = this.$p.t('global/gueltigBis');\n\t\t\tthis.preloadedPhrasen.wochenstundenPhrase = this.$p.t('profil/wochenstunden');\n\t\t\tthis.preloadedPhrasen.loaded = true;\n\t\t});\n\t},\n\n\ttemplate: /*html*/ `\n\n
    \n \n
    \n \n \n \n \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n`,\n};\n","import StudentProfil from \"./StudentProfil.js\";\nimport MitarbeiterProfil from \"./MitarbeiterProfil.js\";\nimport ViewStudentProfil from \"./StudentViewProfil.js\";\nimport ViewMitarbeiterProfil from \"./MitarbeiterViewProfil.js\";\nimport Loading from \"../../Loader.js\";\n\nimport ApiProfil from '../../../api/factory/profil.js';\nimport ApiProfilUpdate from '../../../api/factory/profilUpdate.js';\n\nVue.$collapseFormatter = function (data) {\n\t//data - an array of objects containing the column title and value for each cell\n\tvar container = document.createElement(\"div\");\n\tcontainer.classList.add(\"tabulator-collapsed-row\");\n\tcontainer.classList.add(\"text-break\");\n\n\tvar list = document.createElement(\"div\");\n\tlist.classList.add(\"row\");\n\n\tcontainer.appendChild(list);\n\n\tdata.forEach(function (col) {\n\t\tlet item = document.createElement(\"div\");\n\t\titem.classList.add(\"col-6\");\n\t\tlet item2 = document.createElement(\"div\");\n\t\titem2.classList.add(\"col-6\");\n\n\t\titem.innerHTML = \"\" + col.title + \"\";\n\t\titem2.innerHTML = col.value ? col.value : \"-\";\n\n\t\tlist.appendChild(item);\n\t\tlist.appendChild(item2);\n\t});\n\n\treturn Object.keys(data).length ? container : \"\";\n};\n\nexport const Profil = {\n\tname: 'Profil',\n\tcomponents: {\n\t\tStudentProfil,\n\t\tMitarbeiterProfil,\n\t\tViewStudentProfil,\n\t\tViewMitarbeiterProfil,\n\t\tLoading,\n\t},\n\tprops: {\n\t\tuid: {\n\t\t\ttype: String,\n\t\t\trequired:false,\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t//? loading property is used for showing/hiding the loading modal\n\t\t\tloading: false,\n\t\t\tprofilUpdateStates: null,\n\t\t\tprofilUpdateTopic: null,\n\t\t\tview: null,\n\t\t\tdata: null,\n\t\t\t// notfound is null by default, but contains an UID if no user exists with that UID\n\t\t\tnotFoundUID: null,\n\t\t\tisEditable: this.viewData.editable ?? false,\n\t\t};\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tisEditable: Vue.computed(()=>this.isEditable),\n\t\t\tprofilUpdateStates: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateStates ? this.profilUpdateStates : false\n\t\t\t),\n\t\t\tprofilUpdateTopic: Vue.computed(() =>\n\t\t\t\tthis.profilUpdateTopic ? this.profilUpdateTopic : false\n\t\t\t),\n\t\t\tsetLoading: (newValue) => {\n\t\t\t\tthis.loading = newValue;\n\t\t\t},\n\t\t\tgetZustellkontakteCount: this.zustellKontakteCount,\n\t\t\tgetZustelladressenCount: this.zustellAdressenCount,\n\t\t\tcollapseFunction: (e, column) => {\n\t\t\t\t//* check if property doesn't exist already and add it to the reactive this properties\n\t\t\t\tif (this[e.target.id] === undefined) {\n\t\t\t\t\tthis[e.target.id] = true;\n\t\t\t\t}\n\t\t\t\tthis[e.target.id] = !this[e.target.id];\n\n\t\t\t\t//* gets all event icons of the different rows to use the onClick event later\n\t\t\t\tlet allClickableIcons = column._column.cells.map((row) => {\n\t\t\t\t\treturn row.element.children[0];\n\t\t\t\t});\n\n\t\t\t\t//* changes the icon that shows or hides all the collapsed columns\n\t\t\t\t//* if the replace function does not find the class to replace, it just simply returns false\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-up\", \"fa-angle-down\");\n\t\t\t\t} else {\n\t\t\t\t\te.target.classList.replace(\"fa-angle-down\", \"fa-angle-up\");\n\t\t\t\t}\n\n\t\t\t\t//* changes the icon for every collapsed column to open or closed\n\t\t\t\tif (this[e.target.id]) {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn !column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tallClickableIcons\n\t\t\t\t\t\t.filter((column) => {\n\t\t\t\t\t\t\treturn column.classList.contains(\"open\");\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.forEach((col) => {\n\t\t\t\t\t\t\tcol.click();\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tsortProfilUpdates: (ele1, ele2) => {\n\t\t\t\tlet result = 0;\n\t\t\t\tif (ele1.status.toLowerCase() === \"pending\") {\n\t\t\t\t\tresult = -1;\n\t\t\t\t} else if (ele1.status.toLowerCase() === \"accepted\") {\n\t\t\t\t\tresult = ele2.status.toLowerCase() === \"rejected\" ? -1 : 1;\n\t\t\t\t} else {\n\t\t\t\t\tresult = 1;\n\t\t\t\t}\n\t\t\t\t//? if they have the same status the insert date is used for ordering\n\t\t\t\tif (ele1.status === ele2.status) {\n\t\t\t\t\tresult =\n\t\t\t\t\t\tnew Date(ele2.insertamum.split(\".\").reverse().join(\"-\")) -\n\t\t\t\t\t\tnew Date(ele1.insertamum.split(\".\").reverse().join(\"-\"));\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t};\n\t},\n\tmethods: {\n\t\tasync load() {\n\t\t\t// fetch profilUpdateStates to provide them to children components\n\t\t\tawait this.$api\n\t\t\t\t.call(ApiProfilUpdate.getStatus())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateStates = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfilUpdate.getTopic())\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.profilUpdateTopic = response.data;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t\tthis.$api\n\t\t\t\t.call(ApiProfil.profilViewData(this.$route.params.uid??null))\n\t\t\t\t.then((response) => response.data).then(data=>{\n\t\t\t\t\tthis.view = data?.profil_data.view;\n\t\t\t\t\tthis.data = data?.profil_data.data;\n\t\t\t\t\tthis.isEditable = data?.editable ?? false;\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t});\n\t\t\t\n\t\t\t\n\t\t},\n\t\tzustellAdressenCount() {\n\t\t\tif (!this.data || !this.data.adressen) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet adressenArray = [];\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.requested_change.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\treturn adresse.requested_change.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.adressen\n\t\t\t\t\t.filter((adresse) => adresse.zustelladresse)\n\t\t\t\t\t.every((adresse) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.requested_change.adresse_id == adresse.adresse_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tadressenArray = adressenArray.concat(\n\t\t\t\t\tthis.data.adressen\n\t\t\t\t\t\t.filter((adresse) => {\n\t\t\t\t\t\t\treturn adresse.zustelladresse;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((adr) => {\n\t\t\t\t\t\t\treturn adr.adresse_id;\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(adressenArray)];\n\t\t\t\n\t\t},\n\t\tzustellKontakteCount() {\n\t\t\tif (!this.data || !this.data.kontakte) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tlet kontakteArray = [];\n\n\t\t\tif (this.data.profilUpdates?.length) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.profilUpdates\n\t\t\t\t\t\t.filter((update) => {\n\t\t\t\t\t\t\treturn update.status === 'Pending' && update.requested_change.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kontant) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kontant.requested_change.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kontant.requested_change.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!this.data.profilUpdates?.length ||\n\t\t\t\t!this.data.kontakte\n\t\t\t\t\t.filter((kontakt) => kontakt.zustellung)\n\t\t\t\t\t.every((kontakt) =>\n\t\t\t\t\t\tthis.data.profilUpdates.some(\n\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\tupdate.status === 'Pending' && update.requested_change.kontakt_id == kontakt.kontakt_id\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t) {\n\t\t\t\tkontakteArray = kontakteArray.concat(\n\t\t\t\t\tthis.data.kontakte\n\t\t\t\t\t\t.filter((kontakt) => {\n\t\t\t\t\t\t\treturn kontakt.zustellung;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.map((kon) => {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\tkontakt_id: kon.kontakt_id,\n\t\t\t\t\t\t\t\t\t\tkontakttyp: kon.kontakttyp\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [...new Set(kontakteArray)];\n\t\t},\n\t},\n\tcomputed: {\n\t\t\n\t\tfilteredEditData() {\n\t\t\tif (!this.data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tview: null,\n\t\t\t\tdata: {\n\t\t\t\t\tPersonen_Informationen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"personenInformationen\"),\n\t\t\t\t\t\ttopic: \"Personen_informationen\",\n\t\t\t\t\t\tview: null,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tvorname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"vorname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Vorname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"vorname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.vorname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnachname: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"person\", \"nachname\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Nachname\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"nachname\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.nachname,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttitel: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"global\", \"titel\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Titel\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"titel\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.titel,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpostnomen: {\n\t\t\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"postnomen\"),\n\t\t\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Postnomen\"],\n\t\t\t\t\t\t\t\tview: \"TextInputDokument\",\n\t\t\t\t\t\t\t\twithFiles: true,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\ttitel: \"postnomen\",\n\t\t\t\t\t\t\t\t\tvalue: this.data.postnomen,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Kontakte: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateKontakte\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Kontakte\"],\n\t\t\t\t\t\tdata: this.data.kontakte\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\t// excludes all contacts that are already used in pending profil update requests\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some(\n\t\t\t\t\t\t\t\t\t(update) =>\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.kontakt_id === item.kontakt_id\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((kontakt) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Kontakt\",\n\t\t\t\t\t\t\t\t\tview: \"EditKontakt\",\n\t\t\t\t\t\t\t\t\tdata: kontakt,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tPrivate_Adressen: {\n\t\t\t\t\t\ttitle: this.$p.t(\"profil\", \"privateAdressen\"),\n\t\t\t\t\t\ttopic: this.profilUpdateTopic?.[\"Private Adressen\"],\n\t\t\t\t\t\tdata: this.data.adressen\n\t\t\t\t\t\t\t?.filter((item) => {\n\t\t\t\t\t\t\t\treturn !this.data.profilUpdates?.some((update) => {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tupdate.status === this.profilUpdateStates[\"Pending\"] &&\n\t\t\t\t\t\t\t\t\t\tupdate.requested_change?.adresse_id == item.adresse_id\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.map((adresse) => {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tlistview: \"Adresse\",\n\t\t\t\t\t\t\t\t\tview: \"EditAdresse\",\n\t\t\t\t\t\t\t\t\tdata: adresse,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n\twatch: {\n\t\tloading: function (newValue) {\n\t\t\tif (newValue) {\n\t\t\t\tthis.$refs.loadingModalRef.show();\n\t\t\t} else {\n\t\t\t\tthis.$refs.loadingModalRef.hide();\n\t\t\t}\n\t\t},\n\t\tuid (newVal, oldVal) {\n\t\t\tthis.load()\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.load()\n\t},\n\ttemplate: `\n\t
    \n\t\t
    \n\t\t\t

    Es wurde keine Person mit der UID {{this.notFoundUID}} gefunden

    \n\t\t
    \n\t\t
    \n \n \n\t\t
    \n\t
    `,\n}\n\nexport default Profil","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetContentID(ort_kurbz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/ContentID',\n\t\t\tparams: { ort_kurzbz: ort_kurbz }\n\t\t};\n\t},\n\tgetRooms(datum, von, bis, typ, personenanzahl = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getRooms',\n\t\t\tparams: { datum, von, bis, typ, personenanzahl }\n\t\t};\n\t},\n\tgetRoomTypes() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Ort/getTypes',\n\t\t\tparams: { }\n\t\t};\n\t}\n};","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiOrt from '../../../api/factory/ort.js'\nexport const Raumsuche = {\n\tname: \"Raumsuche\",\n\tprops: {\n\t\t\n\t},\n\tcomponents: {\n\t\tVueDatePicker,\n\t\tCoreFilterCmpt,\n\t\tInputNumber: primevue.inputnumber,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\troomtypes: null,\n\t\t\tdefaultType: {\n\t\t\t\traumtyp_kurzbz: '',\n\t\t\t\tbeschreibung: Vue.computed(() => this.$p.t('global/alle'))\n\t\t\t},\n\t\t\tanzahl: 1,\n\t\t\tselectedType: null,\n\t\t\tdatum: new Date(),\n\t\t\tvon: Vue.ref({\n\t\t\t\thours: new Date().getHours(),\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tbis: Vue.ref({\n\t\t\t\thours: new Date().getHours() + 1,\n\t\t\t\tminutes: new Date().getMinutes()\n\t\t\t}),\n\t\t\tdatepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'dd.MM.yyyy',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\ttimepickerTextInputOptions: {\n\t\t\t\tenterSubmit: true,\n\t\t\t\ttabSubmit: true,\n\t\t\t\tselectOnFocus: true,\n\t\t\t\tformat: 'HH:mm',\n\t\t\t\tescClose: true\n\t\t\t},\n\t\t\traumsucheTableOptions: {\n\t\t\t\theight: Vue.ref(400),\n\t\t\t\tindex: 'ort_kurzbz',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: this.$p.t('global/noDataAvailable'),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raum_kurzbz')), field: 'ort_kurzbz', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('global/bezeichnung')), field: 'bezeichnung', widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/raumnummer')), field: 'nummer', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/personcap')), field: 'personen', widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/rauminfo')),\n\t\t\t\t\t\tfield: 'linkInfo', formatter: this.linkFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$p.t('rauminfo/roomReservations')), \n\t\t\t\t\t\tfield: 'linkRes', formatter: this.linkFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\traumsucheTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tlinkFormatter(cell) {\n\t\t\tconst val = cell.getValue();\n\t\t\tconst field = cell.getField();\n\t\t\tconst arialabel = (field === 'linkInfo') \n\t\t\t\t\t\t\t? this.$p.t('rauminfo/rauminfo') \n\t\t\t\t\t\t\t: this.$p.t('rauminfo/roomReservations');\n\t\t\tif(val) {\n\t\t\t\treturn ''\n\t\t\t} else {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'-
    '\n\t\t\t}\n\t\t},\n\t\troomPlanLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t+ '/CisVue/Cms/getRoomInformation/' + room.ort_kurzbz\n\t\t},\n\t\troomInfoLink(room) {\n\t\t\treturn FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/CisVue/Cms/content/' + room.content_id\n\t\t},\n\t\tgetTimeString(time) {\n\t\t\tconst hours = String(time.hours).padStart(2, '0');\n\t\t\tconst minutes = String(time.minutes).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`\n\t\t},\n\t\tsetupData(data){\n\t\t\tconst d = data.map(room => {\n\t\t\t\treturn {\n\t\t\t\t\tort_kurzbz: room.ort_kurzbz,\n\t\t\t\t\tbezeichnung: room.bezeichnung.replace('&', '&'),\n\t\t\t\t\tnummer: room.planbezeichnung,\n\t\t\t\t\tpersonen: room.max_person,\n\t\t\t\t\tlinkInfo: room.content_id ? this.roomInfoLink(room) : null,\n\t\t\t\t\tlinkRes: this.roomPlanLink(room)\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.raumsucheTable.tabulator.setData(d);\n\t\t},\n\t\tloadRoomTypes() {\n\t\t\tthis.$api.call(ApiOrt.getRoomTypes())\n\t\t\t\t.then(res => {\n\t\t\t\tres?.data?.forEach(type => {\n\t\t\t\t\ttype.beschreibung = type.beschreibung.replace('&', '&')\n\t\t\t\t})\n\t\t\t\tthis.selectedType = this.defaultType\n\t\t\t\tthis.roomtypes = res?.data ?? []\n\t\t\t})\n\t\t},\n\t\tloadRooms() {\n\t\t\tthis.$api.call(ApiOrt.getRooms(this.datum.toISOString(), this.getTimeString(this.von), this.getTimeString(this.bis), this.selectedType?.raumtyp_kurzbz ?? '', this.anzahl))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data?.retval) this.setupData(res.data.retval)\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tsearch(){\n\t\t\tthis.loadRooms()\n\t\t},\n\t\tsetRoute(val) {\n\t\t\t// TODO: router push\n\t\t},\n\t\tdateFormat(date) {\n\t\t\tconst day = String(date.getDate()).padStart(2, '0');\n\t\t\tconst month = String(date.getMonth() + 1).padStart(2, '0');\n\t\t\tconst year = date.getFullYear();\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\ttimeFormat(date) {\n\t\t\tconst hours = String(date.getHours()).padStart(2, '0');\n\t\t\tconst minutes = String(date.getMinutes()).padStart(2, '0');\n\t\t\treturn `${hours}:${minutes}`;\n\t\t},\n\t\tasync setupMounted() {\n\t\t\t\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.loadRoomTypes()\n\t\t\tthis.loadRooms()\n\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tconst h = window.visualViewport.height - rect.top - 100\n\t\t\tif(this.$refs.raumsucheTable) {\n\t\t\t\tthis.$refs.raumsucheTable.$refs.table.style.setProperty('height', h+'px')\n\t\t\t}\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tisDarkMode(){\n\t\t\treturn this.$theme.theme_name.value == 'dark';\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['rauminfo', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t

    {{$p.t('rauminfo/roomSearch')}}

    \n\t
    \n\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t\n\n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n\n \n `,\n};\n\nexport default Raumsuche;\n","export default {\n components: {\n paginator: primevue.paginator,\n },\n emits: [\"update:rows\"],\n props: {\n maxPageCount: {\n type: Number,\n default: 0,\n },\n page_size: {\n type: Number,\n required: true,\n },\n },\n data() {\n return {};\n },\n methods: {\n newPageEvent: function (data) {\n \n },\n },\n mounted() {},\n template: /*html*/ `\n \t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" >\n\t\t\n\t
    \n\t\n\t
    \n\t\t$emit('page',{...data, page:data.page+1})\" :rows=\"page_size\" :totalRecords=\"maxPageCount\" :rowsPerPageOptions=\"[10, 20, 30]\" template=\"FirstPageLink PrevPageLink CurrentPageReport NextPageLink LastPageLink RowsPerPageDropdown\">\n\t\t\n\t
    \n `,\n};\n","export default {\n\tprops:{\n\t\tuid:String,\n\t\tvorname:String,\n\t\tnachname:String,\n\t\ttitelpre:String,\n\t\tkontakt:String,\t\n\t\ttelefoneklappe:String,\n\t\temail:String,\n\t\tplanbezeichnung:String,\n\t\tfoto:String,\n\t\tdisplayWidget:{\n\t\t\ttype:Boolean,\n\t\t\tdefault:false,\n\t\t}\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t\"mitarbeiter_foto\"\n\t\t
    \n\t\t
    \n\t\t\t
    {{fullname}}
    \n\t\t
    \n\t\t
    \n\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    {{phone.number}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    {{ort}}
    \n\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\n\t\t
    \n\t
    \n\t`,\n\tcomputed:{\n\t\tformattedEmail: function(){\n\t\t\tif(!this.email ) return null;\n\t\t\tlet emailString= this.email.replace(\"mailto:\", \"\");\n\t\t\t// when splitting a string, the letter that is used to split the string will be removed from the result\n\t\t\tlet emailArray = emailString.split('@');\n\t\t\t// returns both parts of the splitted string in combination with the removed letter and a word break\n\t\t\treturn emailArray[0] + '@' + emailArray[1];\n\t\t},\n\t\tfullname: function () {\n\t\t\tif (this.titelpre && this.vorname && this.nachname) {\n\t\t\t\treturn `${this.titelpre} ${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.vorname && this.nachname) {\n\t\t\t\treturn `${this.vorname} ${this.nachname}`;\n\t\t\t}\n\t\t\telse if (this.nachname) {\n\t\t\t\treturn this.vorname;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tphone: function () {\n\t\t\tif (this.kontakt && this.telefoneklappe) {\n\t\t\t\treturn {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt).concat(\" \" + this.telefoneklappe),\n\t\t\t\t\tnumber: this.kontakt.concat(\" \" + this.telefoneklappe),\n\t\t\t\t} \n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn this.kontakt ? {\n\t\t\t\t\tlink: \"tel:\".concat(this.kontakt),\n\t\t\t\t\tnumber: this.kontakt,\n\t\t\t\t} : null;\n\t\t\t}\n\t\t},\n\t\temail_link: function () {\n\t\t\treturn this.email ? \"mailto:\".concat(this.email) : null;\n\t\t},\n\t\tbase64Image:function(){\n\t\t\treturn this.foto ? 'data:image/png;base64,'.concat(this.foto) : null;\n\t\t},\n\t\tort:function(){\n\t\t\treturn this.planbezeichnung ?? null;\n\t\t},\n\t\tprofilViewLink: function(){\n\t\t\treturn this.uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(this.uid): null; \n\t\t},\n\t},\n\t\n}","export default {\n\tprops: {\n\t\ttitle:String,\n\t\tvertretungsList:Array,\n\t\tshowBezeichnung:Boolean,\n\t},\n\ttemplate:/*html*/`\n\t
    \n\t\t
    \n\t\t\t{{title}}\n\t\t
    \n\t\t
    \n\t\t\t

    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{{vertretungFormatedName(vertretung,false)}}\n\t\t\t

    \n\t\t
    \n\t
    \n\t`,\n\tmethods: {\n\t\tprofilViewLink: function (uid) {\n\t\t\treturn uid ? FHC_JS_DATA_STORAGE_OBJECT.app_root.concat(FHC_JS_DATA_STORAGE_OBJECT.ci_router).concat(\"/Cis/Profil/View/\").concat(uid) : null;\n\t\t},\n\t\tvertretungFormatedName: function (vertretung) {\n\t\t\tif (!vertretung) return null;\n\t\t\treturn `${vertretung.vorname ?? ''} ${vertretung.nachname ?? ''} ${vertretung.bezeichnung && this.showBezeichnung ? '('.concat(vertretung.bezeichnung.replace(\"(\", \"\").replace(\")\", \"\")).concat(\")\") : ''}`\n\t\t},\n\t},\n\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tstudiengangInformation() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Studgang/getStudiengangInfo'\n\t\t};\n\t},\n\tgetStudiengangByKz(studiengang_kz) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/StudiengangEP/getStudiengangByKz',\n\t\t\tparams: { studiengang_kz }\n\t\t};\n\t}\n};","import StudiengangPerson from \"./StudiengangPerson.js\";\nimport StudiengangVertretung from \"./StudiengangVertretung.js\";\n\nimport ApiStudiengang from '../../../../api/factory/studiengang.js';\n\nexport default {\ndata(){\n\treturn{\n\t\tstudiengang:null,\n\t\tsemester: null,\n\t\tstg_ltg: null,\n\t\tgf_ltg: null,\n\t\tstv_ltg: null,\n\t\tass: null,\n\t\thochschulvertr: null,\n\t\tstdv: null,\n\t\tjahrgangsvertr: null,\n\t}\n},\nprops:{\n\tdisplayWidget:{\n\t\ttype:Boolean,\n\t\tdefault:false,\n\t}\n},\ncomponents:{\n\tStudiengangPerson,\n\tStudiengangVertretung,\n},\ntemplate:/*html*/`\n\t\t
    \n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t
    \n\t\n`,\ncomputed:{\n\t// this function concatenates the studiengangsleitung and the assistenz or the \n\t// geschaeftsfuehrende-Stellvertretende Leitung if both collections only contain one person\n\tcollection_array: function(){\n\t\tlet returnData = [];\n\n\t\tif (Array.isArray(this.stg_ltg) && this.stg_ltg.length == 1 && Array.isArray(this.ass) && this.ass.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: `${this.$p.t('global', 'studiengangsleitung')}/${this.$p.t('studiengangInformation', 'assistenz')}` , collection: [...this.stg_ltg, ...this.ass] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('global', 'studiengangsleitung'), collection: this.stg_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'assistenz'), collection: this.ass });\n\t\t}\n\t\tif (Array.isArray(this.gf_ltg) && this.gf_ltg.length == 1 && Array.isArray(this.stv_ltg) && this.stv_ltg.length == 1)\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_stellvertretende_leitung'), collection: [...this.gf_ltg, ...this.stv_ltg] });\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'geschaeftsfuehrende_leitung'), collection: this.gf_ltg });\n\t\t\treturnData.push({ title: this.$p.t('studiengangInformation', 'stellvertretende_leitung'), collection: this.stv_ltg });\n\t\t}\n\n\t\treturn returnData;\n\t},\n\tmoodleLink: function(){\n\t\t// early return if the studiengang information is not available\n\t\tif(!this.studiengang || !this.studiengang.studiengang_kz) return;\n\n\t\treturn `https://moodle.technikum-wien.at/course/view.php?idnumber=dl` + this.studiengang.studiengang_kz;\n\t},\n},\n\tmounted() {\n\t\tthis.$api\n\t\t\t.call(ApiStudiengang.studiengangInformation())\n\t\t\t.then(res => res.data)\n\t\t\t.then(studiengangInformationen => {\n\t\t\t\tObject.assign(this, studiengangInformationen);\n\t\t\t});\n\t}\n};\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tcontent(content_id, version=null, sprache=null, sichtbar=null) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/content',\n\t\t\tparams: {\n\t\t\t\tcontent_id,\n\t\t\t\t...(version ? { version } : {}),\n\t\t\t\t...(sprache ? { sprache } : {}),\n\t\t\t\t...(sichtbar ? { sichtbar } : {})\n\t\t\t}\n\t\t};\n\t},\n\t//api function used for the news View that renders the html\n\tgetNews(page = 1, page_size = 10, sprache) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNews',\n\t\t\tparams: {\n\t\t\t\tpage,\n\t\t\t\tpage_size,\n\t\t\t\tsprache\n\t\t\t},\n\t\t};\n\t},\n\t//api function used for the widget component\n\tnews(limit) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/news',\n\t\t\tparams: { limit }\n\t\t};\n\t},\n\tgetNewsRowCount() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getNewsRowCount'\n\t\t};\n\t},\n\tgetNewsExtra() {\n\t\t// TODO(chris): seems to be called from nowhere?\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Cms/getStudiengangInfoForNews'\n\t\t};\n\t}\n};","import Pagination from \"../../Pagination/Pagination.js\";\nimport StudiengangInformation from \"./StudiengangInformation/StudiengangInformation.js\";\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"NewsComponent\",\n components: {\n Pagination,\n\tStudiengangInformation,\n },\n data() {\n return {\n content: null,\n maxPageCount: 0,\n page_size: 10,\n\t page:1,\n };\n },\n watch:{\n\t'$p.user_language.value':function(sprache){\n\t\tthis.fetchNews();\n\t}\n },\n computed:{\n\tsprache: function(){\n\t\treturn this.$p.user_language.value;\n\t},\n },\n methods: {\n\t\tfetchNews() {\n\t\t\treturn this.$api\n\t\t\t\t.call(ApiCms.getNews(this.page, this.page_size, this.sprache))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\t\t\t\tel.classList.add(\"align-items-center\");\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t\t\t\t});\n\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t},\n\t\tloadNewPageContent(data) {\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.getNews(data.page, data.rows))\n\t\t\t\t.then(res => res.data)\n\t\t\t\t.then(result => {\n\t\t\t\t\tthis.content = result;\n\t\t\t\t\t\n\t\t\t\t});\n\t\t}\n },\n created() {\n this.fetchNews();\n\n\t\tthis.$api\n\t\t\t.call(ApiCms.getNewsRowCount())\n\t\t\t.then(res => res.data)\n\t\t\t.then(result => {\n\t\t\t\tthis.maxPageCount = result;\n\t\t\t});\n },\n template: /*html*/ `\n \t

    News

    \n\t
    \n\t\n\t\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t
    \n\t\n\t\n `,\n};\n","\nexport default {\n\tname: \"RaumComponent\",\n\tdata() {\n\t\treturn {\n\t\t\timgContent: null\n\t\t}\n\t},\n props:{\n content:{\n type:String,\n required:true,\n },\n\t content_id:{\n\t\ttype: [Number, String],\n\t }\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n mounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = document.getElementsByClassName(\"tablesorter\");\n\t\t\n\t\tfor (let table of tables) {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\tnew Tabulator(table, {\n\t\t\t\tlayout: \"fitDataStretch\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: false,\n\t\t\t\t\tminWidth: \"100px\",\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\t\n\t\tlet title = document.getElementsByTagName(\"h1\");\n\t\ttitle = title.length ? title[0] : null;\n\t\t// tries to wrap the Raum titel with a link tag that redirects to the Reservierungen of that Raum\n\t\tif (title && title.innerText) \n\t\t{\n\t\t\tlet room_name = title.innerText;\n\t\t\tlet room_name_reg_exp = new RegExp(\"\\\\w*\\\\s([a-zA-Z][0-9\\\\.]+)$\");\n\t\t\tlet room_name_reg_exp_result = room_name.match(room_name_reg_exp);\n\t\t\tif(room_name_reg_exp_result)\n\t\t\t{\n\t\t\t\troom_name = room_name_reg_exp_result[0];\n\t\t\t\troom_name = room_name.replace(\" \",\"_\");\n\t\t\t\tlet link_element = document.createElement(\"a\");\n\t\t\t\tlink_element.href = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + \"/CisVue/Cms/getRoomInformation/\" + room_name;\n\t\t\t\tlink_element.appendChild(title.cloneNode(true));\n\t\t\t\ttitle.replaceWith(link_element);\n\n\t\t\t\tlet lvplanlinks = document.querySelectorAll('.menubox a[href*=\"stpl_week.php\"]');\n\t\t\t\tfor(let lvplanlink of lvplanlinks) {\n\t\t\t\t\tlvplanlink.href = link_element.href;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconsole.error(`the regular expression did not match the room name: ${room_name}`);\n\t\t\t}\n\t\t\t\n\t\t\treturn\n\t\t}\n\t\t\n\t\tconst parser = new DOMParser()\n\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\n\t\tconst img = doc.querySelector(\"img\")\n\t\tif(img && img.title)\n\t\t{\n\t\t\tconst imgAttributes = {}\n\t\t\tfor (let attr of img.attributes) {\n\t\t\t\timgAttributes[attr.name] = attr.value\n\t\t\t}\n\n\t\t\tthis.imgContent = imgAttributes\n\t\t}\n\t\t\n\t\tconsole.error(`was not able to get the title of the raum_contentmittitel`);\n\t\t\n },\n template: /*html*/ `\n \n\n
    \n
    \n

    Content was not found

    \n `,\n };\n ","// collection of relative and absolute regex to replace legacy links\nconst GROUP_REPLACEMENT_STRATEGIES = {\n\tQUERY_PARAMETERS:'QUERY_PARAMETERS',\n\tPATH_SEGMENTS:'PATH_SEGMENTS',\n}\n\nconst regexList = {\n\trelative:[\n\t\t{ \n\t\t\tpriority: 1, \n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/content\\.php\\?content_id=([0-9]+)/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/content',\n\t\t\tgroup_replacement_strategy:GROUP_REPLACEMENT_STRATEGIES.PATH_SEGMENTS,\n\t\t},\n\t\t{ \n\t\t\tpriority: 2,\n\t\t\tregex: new RegExp(/^\\.\\.\\/cms\\/news\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/CisVue/Cms/news',\n\t\t},\n\t\t{ \n\t\t\tpriority: 3,\n\t\t\tregex: new RegExp(/^\\.\\.\\/index\\.ci\\.php/),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router,\n\t\t},\n\t\t{ \n\t\t\tpriority: 10, \n\t\t\tregex: new RegExp(/^\\.\\.\\//),\n\t\t\treplacement: FHC_JS_DATA_STORAGE_OBJECT.app_root,\n\t\t},\n\t],\n\tabsolute:[\n\t\t{}\n\t]\n};\n\n// sorts the relative regex array by priority ascending\nconst relative_regex = regexList.relative\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex, \n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t});\n\n// sorts the absolute regex array by priority ascending\nconst absolute_regex = regexList.absolute\n\t.sort((a, b) => {\n\t\treturn a.priority - b.priority;\n\t})\n\t.map(regex => {\n\t\treturn {\n\t\t\tregex: regex.regex,\n\t\t\treplacement: regex.replacement,\n\t\t\tgroup_replacement_strategy: regex.group_replacement_strategy,\n\t\t}\n\t})\n\n\nexport function replaceRelativeLegacyLink(relativeLegacyLink){\n\tfor (let {regex,replacement,group_replacement_strategy} of relative_regex){\t\n\t\t// if any of the regex matches the relativeLegacyLink, replace the matched part with the new app_root path\n\t\tlet match = relativeLegacyLink.match(regex);\n\t\tif (match) {\n\t\t\tlet new_link = relativeLegacyLink.replace(regex, replacement);\n\t\t\t\n\t\t\t\tswitch (group_replacement_strategy){\n\t\t\t\t\tcase 'QUERY_PARAMETERS':\n\t\t\t\t\t\t//TODO: this doesn't really work yet because the query parameter are key/value pairs\n\t\t\t\t\t\tnew_link = new_link.concat(`?${match[1]}`);\n\t\t\t\t\t\tfor (let query_parameter of match.slice(2)) {\n\t\t\t\t\t\t\tnew_link = new_link.concat(`&${query_parameter}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'PATH_SEGMENTS':\n\t\t\t\t\t\tfor (let query_parameter of match.slice(1)) { \n\t\t\t\t\t\t\tnew_link = new_link.concat(`/${query_parameter}`);\n\t\t\t\t\t\t} \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\treturn new_link; \n\t\t}\n\t}\n\t// if none of the regex matched with the string return the original path\n\treturn relativeLegacyLink;\n}\n\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"GeneralComponent\",\n props:{\n content:{\n type:String,\n required:true,\n },\n },\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t},\n\t\tprepareContent() {\n\t\t\t// replaces the tablesorter with the tabulator\n\t\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\t\ttables.forEach((table, index) => {\n\t\t\t\tthis.sanitizeLegacyTables(table)\n\n\t\t\t\tnew Tabulator(table, {\n\t\t\t\t\tindex: index,\n\t\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\t\tcolumnDefaults: {\n\t\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\t\tresizable: true,\n\t\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\tBsConfirm.popup(el.dataset.confirm)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tAxios.get(el.href)\n\t\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t\t});\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t\t/^ROOT\\//,\n\t\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\t\telement.href = new_href;\n\t\t\t});\n\n\t\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t\t}\n\t\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\tupdated() {\n\t\tthis.prepareContent();\n\t},\n\tmounted(){\n\t\tthis.prepareContent();\n\t},\n template: /*html*/ `\n \n
    \n \t
    \n
    \n

    Content was not found

    \n `,\n };\n ","import raum_contentmittitel from './Content_types/Raum_contentmittitel.js'\nimport general from './Content_types/General.js'\nimport BsConfirm from \"../../Bootstrap/Confirm.js\";\nimport news_content from './Content_types/News_content.js';\nimport iframe_content from './Content_types/Iframe_content.js';\n\nimport ApiCms from '../../../api/factory/cms.js';\n\nexport default {\n\tname: \"ContentComponent\",\n\tprops: {\n\t\tcontent_id: {\n\t\t\ttype: [Number, String],\n\t\t\trequired: true\n\t\t},\n\t\tversion: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\t\tsichtbar: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t}\n\t},\n\tcomponents: {\n\t\traum_contentmittitel,\n\t\tnews_content,\n\t\tgeneral,\n\t\tiframe_content\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcontent_type: null,\n\t\t\tcontent: null,\n\t\t\tcontent_id_internal: this.content_id\n\t\t};\n\t},\n\tmethods: {\n\t\tfetchContent(){\n\t\t\tthis.$api\n\t\t\t\t.call(ApiCms.content(this.content_id_internal, this.version, this.sprache, this.sichtbar))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.$nextTick(function() {\n\t\t\t\t\t\tthis.content = res.data.content;\n\t\t\t\t\t\tthis.content_type = res.data.type;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t}\n\t},\n\twatch:{\n\t\tsprache: function(sprache){\n\t\t\tthis.fetchContent();\n\t\t},\n\t\t'$route.params.content_id'(newVal) {\n\t\t\tthis.content_id_internal = newVal\n\t\t\tthis.fetchContent();\n\t\t}\n\t},\n\tcomputed: {\n\t\tsprache(){\n\t\t\treturn this.$p.user_language.value;\n\t\t},\n\t\tcomputeContentType: function () {\n\t\t\tswitch (this.content_type) {\n\t\t\t\tcase \"raum_contentmittitel\":\n\t\t\t\t\treturn \"raum_contentmittitel\";\n\t\t\t\tcase \"news\":\n\t\t\t\t\treturn \"news_content\";\n\t\t\t\tcase \"iframe\":\n\t\t\t\t\treturn \"iframe_content\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"general\";\n\t\t\t};\n\t\t},\n\t},\n\tcreated() {\n\t\tthis.fetchContent();\n\t},\n\ttemplate: /*html*/ `\n \n\t
    \n \t\n\t
    \n

    No content is available to display

    \n `,\n};\n","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\"\nexport default {\n\tname: \"NewsContentType\",\n\tprops:{\n\t content:{\n\t\t type:String,\n\t\t required:true,\n\t },\n\t},\n\tmethods: {\n\t\tsanitizeLegacyTables(table) {\n\t\t\t\n\t\t\t// find nested tables and replace with p element\n\t\t\tconst tt = table.querySelectorAll('table')\n\t\t\ttt.forEach(t => {\n\t\t\t\tconst textContent = t.textContent.trim();\n\t\t\t\tconst pElement = document.createElement('p');\n\t\t\t\tpElement.textContent = textContent;\n\t\t\t\tt.parentNode.replaceChild(pElement, t);\n\t\t\t})\n\n\t\t\t// find unordered lists, traverse li childs and replace with p element -> more readable than 1 p tag for ul\n\t\t\tconst ul = table.querySelectorAll('ul')\n\t\t\tul.forEach(u => {\n\t\t\t\tArray.from(u.children).forEach(li => {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.textContent = li.textContent\n\t\t\t\t\tu.parentNode.appendChild(p)\n\t\t\t\t})\n\t\t\t\tu.parentNode.removeChild(u)\n\t\t\t\t\n\t\t\t})\n\n\t\t\t// find bare text nodes and put into p element\n\t\t\tconst td = Array.from(table.querySelectorAll('td')).filter(el => el.scrollWidth > 100)\n\t\t\ttd.forEach(element => {\n\t\t\t\tif (element.firstChild?.nodeType === Node.TEXT_NODE && element.firstChild.length > 10) {\n\t\t\t\t\tconst p = document.createElement('p');\n\t\t\t\t\tp.appendChild(element.firstChild)\n\t\t\t\t\telement.appendChild(p);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// flatten nested th elements\n\t\t\tconst ths = Array.from(table.querySelectorAll('th'))\n\t\t\tths.forEach(th => {\n\n\t\t\t\tif(th.children.length > 1) {\n\t\t\t\t\tth.innerHTML = Array.from(th.childNodes).find(cn => cn.textContent).textContent\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// let p elements wrap on overflow\n\t\t\tconst p = table.querySelectorAll('p')\n\t\t\tp.forEach(p => {\n\t\t\t\tp.style.setProperty('word-wrap', 'break-word');\n\t\t\t\tp.style.setProperty('white-space', 'normal');\n\t\t\t\tp.style.setProperty('max-width', '400px');\n\t\t\t})\n\t\t}\n\t},\n\tmounted(){\n\t\t// replaces the tablesorter with the tabulator\n\t\tlet tables = Array.from(document.getElementsByClassName(\"tablesorter\"));\n\n\t\ttables.forEach((table, index) => {\n\t\t\tthis.sanitizeLegacyTables(table)\n\t\t\t\n\t\t\tnew Tabulator(table, {\n\t\t\t\tindex: index,\n\t\t\t\tlayout: \"fitDataFill\",\n\n\t\t\t\tcolumnDefaults: {\n\t\t\t\t\tformatter: \"html\",\n\t\t\t\t\tresizable: true,\n\t\t\t\t\tminWidth: \"100px\"\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdocument.querySelectorAll(\"#cms [data-confirm]\").forEach((el) => {\n\t\t\tel.addEventListener(\"click\", (evt) => {\n\t\t\t evt.preventDefault();\n\t\t\t BsConfirm.popup(el.dataset.confirm)\n\t\t\t\t.then(() => {\n\t\t\t\t Axios.get(el.href)\n\t\t\t\t\t.then((res) => {\n\t\t\t\t\t\t// TODO(chris): check for success then show message and/or reload\n\t\t\t\t\t\tlocation = location;\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => console.error(\"ERROR:\", err));\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t\t});\n\t\t });\n\t\tdocument.querySelectorAll(\"#cms [data-href]\").forEach((el) => {\n\t\t\tel.href = el.dataset.href.replace(\n\t\t\t\t/^ROOT\\//,\n\t\t\t\tFHC_JS_DATA_STORAGE_OBJECT.app_root\n\t\t\t);\n\t\t});\n\t\t\t\n\t\tdocument.querySelectorAll(\"[href]\").forEach((element) => {\n\t\t\tlet orignal_href = element.getAttribute(\"href\");\n\t\t\tlet new_href = replaceRelativeLegacyLink(orignal_href);\n\t\t\telement.href = new_href;\n\t\t});\n\n\t\tdocument.querySelectorAll(\"[style*=background-color]\").forEach((element) => {\n\t\t\tif (element.style.backgroundColor == \"rgb(255, 255, 255)\"){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-background)\";\n\t\t\t}\n\t\t\tif(element.querySelector(\"*[style*=background-color]\")){\n\t\t\t\telement.style.backgroundColor = \"var(--fhc-tertiary)\";\n\t\t\t}\n\t\t});\n\n\t\tVue.nextTick(() => {\n\t\t\tdocument.querySelectorAll(\".card-header\").forEach((el) => {\n\t\t\t\tel.classList.add(\"fhc-primary\");\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row\").forEach((el) => {\n\t\t\t\tel.classList.add(\"w-100\");\n\t\t\t\tel.classList.add(\"align-items-center\");\n\n\t\t\t});\n\t\t\tdocument.querySelectorAll(\".row h2\").forEach((el) => {\n\t\t\t\tel.classList.add(\"mb-0\");\n\t\t\t});\n\n\t\t})\n\n\t},\n\ttemplate: /*html*/ `\n\t \n\t
    \n\t\t
    \n\t
    \n\t

    Content was not found

    \n\t `,\n };\n ","import { replaceRelativeLegacyLink } from \"../../../../helpers/LegacyLinkReplaceHelper.js\";\n\nexport default {\n\tname: \"iframe_content\",\n\tprops: {\n\t\tcontent: { type: String, required: true }\n\t},\n\tcomputed: {\n\t\tsrcUrl() {\n\t\t\tconst parser = new DOMParser()\n\t\t\tconst doc = parser.parseFromString(`
    ${this.content}
    `, \"text/html\");\n\t\t\tconst iframe = doc.querySelector(\"iframe[src]\");\n\n\t\t\tif (!iframe)\n\t\t\t\treturn \"\";\n\n\t\t\tlet url = iframe.getAttribute(\"src\") || \"\";\n\t\t\treturn replaceRelativeLegacyLink(url);\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t\n\t\t
    Keine URL gefunden.
    \n\t\t
    \n\t`\n};\n","import FhcCalendar from \"../../Calendar/LvPlan.js\";\n\nimport ApiLvPlan from '../../../api/factory/lvPlan.js';\n\nexport const DEFAULT_MODE_RAUMINFO = 'Week'\n\nexport default {\n\tname: \"RoomInformation\",\n\tcomponents: {\n\t\tFhcCalendar\n\t},\n\tprops:{\n\t\tviewData: Object, // NOTE(chris): this is inherited from router-view\n\t\tpropsViewData: Object\n\t},\n\tcomputed: {\n\t\tcurrentDay() {\n\t\t\treturn this.propsViewData?.focus_date || luxon.DateTime.now().setZone(this.viewData.timezone).toISODate();\n\t\t},\n\t\tcurrentMode() {\n\t\t\treturn this.propsViewData?.mode || DEFAULT_MODE_RAUMINFO;\n\t\t}\n\t},\n\tmethods:{\n\t\thandleChangeDate(day, newMode) {\n\t\t\treturn this.handleChangeMode(newMode, day);\n\t\t},\n\t\thandleChangeMode(newMode, day) {\n\t\t\tconst mode = newMode[0].toUpperCase() + newMode.slice(1)\n\t\t\tconst focus_date = day.toISODate();\n\n\t\t\tthis.$router.push({\n\t\t\t\tname: \"RoomInformation\",\n\t\t\t\tparams: {\n\t\t\t\t\tmode,\n\t\t\t\t\tfocus_date,\n\t\t\t\t\tort_kurzbz: this.propsViewData.ort_kurzbz\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tgetPromiseFunc(start, end) {\n\t\t\treturn [\n\t\t\t\tthis.$api.call(ApiLvPlan.getRoomInfo(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate())),\n\t\t\t\tthis.$api.call(ApiLvPlan.getOrtReservierungen(this.propsViewData.ort_kurzbz, start.toISODate(), end.toISODate()))\n\t\t\t];\n\t\t}\n\t},\n\ttemplate: /*html*/`\n\t
    \n\t\t

    {{ $p.t('rauminfo/rauminfo') }} {{ propsViewData.ort_kurzbz }}

    \n\t\t
    \n\t\t\n\t
    `\n};\n","export default {\n\tgetConfig() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfig'\n\t\t};\n\t},\n\tgetConfigStudent() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getConfigStudent'\n\t\t};\n\t},\n\tgetStudentProjektarbeiten(uid) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektarbeiten',\n\t\t\tparams: { uid }\n\t\t};\n\t},\n\tgetStudentProjektabgaben(detail) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudentProjektabgaben',\n\t\t\tparams: { projektarbeit_id: detail.projektarbeit_id, student_uid: detail.student_uid }\n\t\t};\n\t},\n\tpostStudentProjektarbeitEndupload(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitEndupload',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tpostStudentProjektarbeitZwischenabgabe(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZwischenabgabe',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetMitarbeiterProjektarbeiten(all) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getMitarbeiterProjektarbeiten',\n\t\t\tparams: { showall: all }\n\t\t};\n\t},\n\tpostProjektarbeitAbgabe(termin) {\n\t\t\n\t\tlet dateString = termin.datum\n\t\tif(termin.datum instanceof Date) {\n\t\t\tconst year = termin.datum.getFullYear();\n\t\t\tconst month = String(termin.datum.getMonth() + 1).padStart(2, '0');\n\t\t\tconst day = String(termin.datum.getDate()).padStart(2, '0');\n\n\t\t\tdateString = `${year}-${month}-${day}`\n\t\t}\n\t\t\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postProjektarbeitAbgabe',\n\t\t\tparams: { \n\t\t\t\tpaabgabe_id: termin.paabgabe_id,\n\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tdatum: dateString,\n\t\t\t\tnote: termin.note_pk,\n\t\t\t\tupload_allowed: !!termin.upload_allowed,\n\t\t\t\tbeurteilungsnotiz: termin.beurteilungsnotiz ?? '',\n\t\t\t\tfixtermin: termin.fixtermin,\n\t\t\t\tinsertvon: termin.insertvon,\n\t\t\t\tkurzbz: termin.kurzbz,\n\t\t\t\tprojektarbeit_id: termin.projektarbeit_id,\n\t\t\t\tbetreuer_person_id: termin.betreuer_person_id\n\t\t\t}\n\t\t};\n\t},\n\tdeleteProjektarbeitAbgabe(paabgabe_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/deleteProjektarbeitAbgabe',\n\t\t\tparams: { paabgabe_id }\n\t\t};\n\t},\n\tpostSerientermin(datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postSerientermin',\n\t\t\tparams: { datum, paabgabetyp_kurzbz, bezeichnung, kurzbz, upload_allowed, projektarbeit_ids, fixtermin }\n\t\t};\n\t},\n\tfetchDeadlines(person_id) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/fetchDeadlines',\n\t\t\tparams: { person_id }\n\t\t};\n\t},\n\tgetPaAbgabetypen() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getPaAbgabetypen'\n\t\t};\n\t},\n\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\tgetNoten(){\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getNoten'\n\t\t};\n\t},\n\tgetProjektarbeitenForStudiengang(studiengang_kz, benotet = 0) {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getProjektarbeitenForStudiengang',\n\t\t\tparams: { studiengang_kz, benotet }\n\t\t};\n\t},\n\t// TODO: this could also very well be generic info api\n\tgetStudiengaenge() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/Abgabe/getStudiengaenge'\n\t\t};\n\t},\n\tpostStudentProjektarbeitZusatzdaten(formData) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten',\n\t\t\tparams: formData,\n\t\t\tconfig: {Headers: { \"Content-Type\": \"multipart/form-data\" }}\n\t\t};\n\t},\n\tgetSignaturStatusForProjektarbeitAbgaben(paabgabe_ids, student_uid) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/Abgabe/getSignaturStatusForProjektarbeitAbgaben',\n\t\t\tparams: {paabgabe_ids, student_uid},\n\n\t\t};\n\t}\n};","export const FhcOverlay = {\n\tname: 'FhcOverlay',\n\tprops: {\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\t\n\t},\n\ttemplate: `\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t`\n};\nexport default FhcOverlay;","import Upload from '../../../components/Form/Upload/Dms.js';\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\n\nexport const AbgabeStudentDetail = {\n\tname: \"AbgabeStudentDetail\",\n\tcomponents: {\n\t\tUpload,\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tInplace: primevue.inplace,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tinject: ['notenOptions', 'isMobile', 'isViewMode', 'moodle_link'],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tviewMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\t\n\t\t\tif(noteOpt?.bezeichnung) {\n\t\t\t\treturn noteOpt?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(noteOpt?.benotbar === true && !termin.note) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tasync validate(termin, endupload = false) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$capitalize(this.$p.t('global/warningChooseFile')));\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tif(endupload) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/confirmEnduploadSpeichern'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\treturn true;\n\t\t},\n\t\tasync triggerEndupload() {\n\t\t\t\n\t\t\tif (!await this.validate(this.enduploadTermin, true))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('paabgabetyp_kurzbz', this.enduploadTermin.paabgabetyp_kurzbz)\n\t\t\tformData.append('projektarbeit_id', this.enduploadTermin.projektarbeit_id);\n\t\t\tformData.append('paabgabe_id', this.enduploadTermin.paabgabe_id)\n\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tfor (let i = 0; i < this.enduploadTermin.file.length; i++) {\n\t\t\t\tformData.append('file', this.enduploadTermin.file[i]);\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitEndupload(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.handleUploadRes(res, this.enduploadTermin)\n\t\t\t\t}).finally(()=> {\n\t\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.hide()\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\tasync upload(termin) {\n\n\t\t\t// only do this on endupload\n\t\t\tif (! await this.validate(termin))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'end') {\n\t\t\t\t// open endupload form modal for further inputs\n\t\t\t\tthis.enduploadTermin = termin\n\t\t\t\tthis.$refs.modalContainerEnduploadZusatzdaten.show()\n\t\t\t} else {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append('paabgabetyp_kurzbz', termin.paabgabetyp_kurzbz)\n\t\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id)\n\t\t\t\tformData.append('paabgabe_id', termin.paabgabe_id)\n\t\t\t\tformData.append('student_uid', this.projektarbeit.student_uid)\n\t\t\t\tformData.append('bperson_id', this.projektarbeit.bperson_id)\n\t\t\t\t\n\t\t\t\tfor (let i = 0; i < termin.file.length; i++) {\n\t\t\t\t\tformData.append('file', termin.file[i]);\n\t\t\t\t}\n\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZwischenabgabe(formData))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tthis.handleUploadRes(res, termin)\n\t\t\t\t\t}).finally(()=> {\n\t\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\thandleUploadRes(res, termin) {\n\t\t\tif(res.meta.status == \"success\") {\n\t\t\t\tthis.$fhcAlert.alertSuccess(this.$capitalize(this.$p.t('abgabetool/c4fileUploadSuccessv3')))\n\n\t\t\t\t// update 'abgabedatum' for successful upload -> shows the pdf icon and date once set\n\t\t\t\ttermin.abgabedatum = new Date().toISOString().split('T')[0];\n\t\t\t\tif(res?.data?.signatur !== undefined) {\n\t\t\t\t\ttermin.signatur = res.data.signatur\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tthis.$fhcAlert.alertError(this.$capitalize(this.$p.t('abgabetool/c4fileUploadErrorv3')))\n\t\t\t}\n\t\t\t\n\t\t\tif(res.meta.signaturInfo) {\n\t\t\t\tthis.$fhcAlert.alertInfo(res.meta.signaturInfo)\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t},\n\t\tgetOptionLabel(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetTerminNoteBezeichnung(termin) {\n\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == termin.note)\n\t\t\treturn noteOpt ? noteOpt.bezeichnung : ''\n\t\t},\n\t},\n\twatch: {\n\t\tprojektarbeit(newVal) {\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t\t\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetMoodleLink() {\n\t\t\treturn this.moodle_link + this.projektarbeit.studiengang_kz\t\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4eidesstattlicheErklaerung'))\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedToSendEndupload() {\n\t\t\treturn this.eidAkzeptiert && this.allowedToSaveZusatzdaten\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerspaetet')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipVerpasst')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbzugeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipStandardv2')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgegeben')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipFixtermin')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToUpload() {\n\t\t\tif(this.isViewMode) {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedInViewMode')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4studentAbgabeNotAllowedRegular')),\n\t\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t},\n\tcreated() {\n\t\t\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\t\n\n\t\t
    \n\t\t\n\t\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeStudentenbereich') )}}
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{$capitalize( $p.t('person/student') ) }}: {{projektarbeit?.student}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4titel') ) }}: {{projektarbeit?.titel}}

    \n\t\t\t\t\t

    {{$capitalize( $p.t('abgabetool/c4betreuerv2') ) }}: {{projektarbeit ? $p.t('abgabetool/c4betrart' + projektarbeit.betreuerart_kurzbz) + ' ' + projektarbeit.betreuer : ''}}

    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t

    {{ $p.t('abgabetool/c4checkoutStgMoodleInfos') }} \n\t\t\t\t\t\tMoodle\n\t\t\t\t\t

    \n\t\t\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t
    \n\t\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t\t
    \n\t\t\t\n\t\t
    \n\t \t\n\t \t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t \t\n `,\n};\n\nexport default AbgabeStudentDetail;\n","\nconst zone = 'Europe/Vienna';\nconst today = luxon.DateTime.now().setZone(zone);\n\nexport function getDateStyleClass(termin, notenOptions) {\n\tconst datum = luxon.DateTime.fromISO(termin.datum, { zone }).endOf('day');\n\tconst abgabedatum = termin.abgabedatum ? luxon.DateTime.fromISO(termin.abgabedatum, { zone }) : null;\n\ttermin.diffindays = datum.diff(today, 'days').days;\n\tconst isLate = abgabedatum && abgabedatum > datum;\n\n\t// GRADE STATUS\n\tif (termin.note) {\n\t\tconst opt = typeof termin.note === 'object' ? termin.note : notenOptions.find(nopt => nopt.note == termin.note)\n\t\tif (opt?.positiv === true) return 'bestanden';\n\t\telse if (opt?.positiv === false) return 'nichtbestanden';\n\t}\n\t\n\t// ACTION REQUIRED FOR GRADE\n\tif (termin.bezeichnung?.benotbar && datum <= today) {\n\t\treturn 'beurteilungerforderlich';\n\t}\n\n\t// SUBMISSION STATUS\n\tif (termin.upload_allowed) {\n\t\tif (termin.abgabedatum) {\n\t\t\treturn isLate ? 'verspaetet' : 'abgegeben';\n\t\t}\n\n\t\t// no submission yet\n\t\tif (datum < today) return 'verpasst';\n\t\tif (termin.diffindays <= 12) return 'abzugeben';\n\t\treturn 'standard';\n\t}\n\n\t// GENERIC STATUS\n\treturn datum < today ? 'verpasst' : 'standard';\n}","import AbgabeDetail from \"./AbgabeStudentDetail.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport BsModal from \"../../Bootstrap/Modal.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\n\nexport const AbgabetoolStudent = {\n\tname: \"AbgabetoolStudent\",\n\tcomponents: {\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tBsModal,\n\t\tAbgabeDetail,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tnotenOptions: Vue.computed(() => this.notenOptions),\n\t\t\tisViewMode: Vue.computed(() => this.isViewMode),\n\t\t\tmoodle_link: Vue.computed(() => this.moodle_link)\n\t\t}\n\t},\n\tprops: {\n\t\tstudent_uid_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tactiveTabIndex: [0],\n\t\t\tabgabeTypeOptions: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tloading: false,\n\t\t\tnotenOptions: null,\n\t\t\tdetail: null,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\tmoodle_link: null\n\t\t};\n\t},\n\tmethods: {\n\t\tcheckQualityGatesStrict(termine) {\n\t\t\tlet qgate1Passed = false\n\t\t\tlet qgate2Passed = false\n\t\t\t\n\t\t\ttermine.forEach(t => {\n\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\tif(t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\tqgate1Passed = true\n\t\t\t\t\t} else if(t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\tqgate2Passed = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\treturn qgate1Passed && qgate2Passed\n\t\t},\n\t\tcheckQualityGatesOptional(termine) {\n\t\t\tconst qgate1found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate1')\n\t\t\tconst qgate2found = termine.find(t => t.paabgabetyp_kurzbz == 'qualgate2')\n\t\t\t\n\t\t\tlet qgate1positiv = true\n\t\t\tif(qgate1found) {\n\t\t\t\tqgate1positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate1') {\n\t\t\t\t\t\t\tqgate1positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlet qgate2positiv = true\n\t\t\tif(qgate2found) {\n\t\t\t\tqgate2positiv = false\n\n\t\t\t\ttermine.forEach(t => {\n\t\t\t\t\tconst noteOption = this.notenOptions?.find(opt => opt.note == t.note)\n\t\t\t\t\tif(noteOption && noteOption.positiv) {\n\t\t\t\t\t\tif (t.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\t\t\tqgate2positiv = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn qgate1positiv && qgate2positiv\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading = true\n\t\t\tthis.loadAbgaben(details).then((res)=> {\n\t\t\t\tconst pa = this.projektarbeiten?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\t\t\t\tpa.abgabetermine = res.data[0].retval\n\t\t\t\t\n\t\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\t\n\t\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\t\ttermin.file = []\n\t\t\t\t\ttermin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\tif(termin.paabgabetyp_kurzbz == 'end') {\n\t\t\t\t\t\t// old assumed production logic when qgates are required\n\t\t\t\t\t\t// termin.allowedToUpload = !this.isPastDate(termin.datum) && this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t\n\t\t\t\t\t\tconst inTime = termin.fixtermin ? !this.isPastDate(termin.datum) : true\n\t\t\t\t\t\ttermin.allowedToUpload = inTime && this.checkQualityGatesOptional(pa.abgabetermine)\n\n\n\t\t\t\t\t\t// development purposes\n\t\t\t\t\t\t// termin.allowedToUpload = this.checkQualityGatesStrict(pa.abgabetermine)\n\t\t\t\t\t\t// termin.allowedToUpload = true\n\n\t\t\t\t\t} else if(termin.fixtermin) {\n\t\t\t\t\t\ttermin.allowedToUpload = !this.isPastDate(termin.datum)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// this could confuse people since we should dont show people this flag\n\t\t\t\t\t\ttermin.allowedToUpload = termin.upload_allowed \n\t\t\t\t\t}\n\n\t\t\t\t\t// blocks client upload button if projektarbeitet is already beurteilt und thus further abgaben on any termin should be blocked\n\t\t\t\t\tif(paIsBenotet) termin.allowedToUpload = false\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\tpa.betreuer = this.buildBetreuer(pa)\n\t\t\t\tpa.student_uid = this.student_uid\n\t\t\t\t\n\t\t\t\tthis.selectedProjektarbeit = pa\n\n\t\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\t\t\n\t\t\t}).finally(()=>{this.loading=false})\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t}\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\t// should always be \"projekt.mitarbeiter_uid +'@'+ this.domain\", built in backend\n\t\t\treturn 'mailto:' + projekt.email\n\t\t},\n\t\tbuildBetreuer(abgabe) {\n\t\t\treturn (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')\n\t\t},\n\t\tasync setupData(data){\n\t\t\t// this.projektarbeiten = data[0]\n\t\t\tconst projektarbeiten = data[0] ?? null\n\t\t\tif(!projektarbeiten) return\n\t\t\tthis.projektarbeiten = projektarbeiten.map(projekt => {\n\t\t\t\tlet mode = 'detailTermine'\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: this.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t\tbetreuer_person_id: projekt.bperson_id,\n\t\t\t\t\t\tbetreuerart_kurzbz: projekt.betreuerart_kurzbz,\n\t\t\t\t\t\tmode\n\t\t\t\t\t},\n\t\t\t\t\tbeurteilung1: projekt.downloadLink1 ?? null,\n\t\t\t\t\tbeurteilung2: projekt.downloadLink2 ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: projekt.kurzbzlang,\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\tbetreuer: this.buildBetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttypbezeichnung,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\n\t\t},\n\t\tloadProjektarbeiten() {\n\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektarbeiten(this.student_uid))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\t\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.loadProjektarbeiten()\n\t\t},\n\t\tgetAccTabHeaderForProjektarbeit(projektarbeit) {\n\t\t\tlet title = ''\n\t\t\t\n\t\t\ttitle += projektarbeit.titel ?? this.$p.t('abgabetool/keinTitel')\n\t\t\t\n\t\t\treturn title\n\t\t},\n\t\tgetMailLink(projektarbeit) {\n\t\t\tif(projektarbeit.email) {\n\t\t\t\treturn 'mailto:'+projektarbeit.email\n\t\t\t} else return ''\n\t\t},\n\t\tgetNoteBezeichnung(projektarbeit) {\n\t\t\tif(projektarbeit.note && this.notenOptions) {\n\t\t\t\tconst noteOpt = this.notenOptions.find(opt => opt.note == projektarbeit.note)\n\t\t\t\treturn noteOpt?.bezeichnung\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\thandleDownloadBeurteilung1(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung1)\n\t\t},\n\t\thandleDownloadBeurteilung2(projektarbeit) {\n\t\t\twindow.open(projektarbeit.beurteilung2)\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\t\tisViewMode() {\n\t\t\treturn this.student_uid !== this.viewData.uid\n\t\t},\n\t\tstudent_uid() {\n\t\t\treturn this.student_uid_prop || this.viewData?.uid || null\n\t\t}\n\t},\n\tasync created() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\tthis.loading = true\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tawait this.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t}).finally(() => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfigStudent()).then(res => {\n\t\t\tthis.moodle_link = res.data?.moodle_link\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\n `,\n};\n\nexport default AbgabetoolStudent;\n","import BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\n\nexport const AbgabeMitarbeiterDetail = {\n\tname: \"AbgabeMitarbeiterDetail\",\n\tcomponents: {\n\t\tBsModal,\n\t\tInputNumber: primevue.inputnumber,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tSpeedDial: primevue.speeddial,\n\t\tAccordion: primevue.accordion,\n\t\tAccordionTab: primevue.accordiontab,\n\t\tMessage: primevue.message,\n\t\tVueDatePicker\n\t},\n\temits: ['paUpdated'],\n\tinject: [\n\t\t'abgabeTypeOptions',\n\t\t'abgabetypenBetreuer',\n\t\t'allowedNotenOptions',\n\t\t'notenOptionsNonFinal',\n\t\t'turnitin_link',\n\t\t'old_abgabe_beurteilung_link'\n\t],\n\tprops: {\n\t\tprojektarbeit: {\n\t\t\ttype: Object,\n\t\t\tdefault: null\n\t\t},\n\t\tisFullscreen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tassistenzMode: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowAutomagicModalPhrase: false,\n\t\t\teidAkzeptiert: false,\n\t\t\tenduploadTermin: null,\n\t\t\tallActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,\n\t\t\tspeedDialItems: [{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4newAbgabetermin')),\n\t\t\t\ticon: \"fa fa-plus\",\n\t\t\t\tcommand: this.openCreateNewAbgabeModal,\n\t\t\t\tdisabled: Vue.computed(() => !this.getAllowedToCreateNewTermin)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4benoten')),\n\t\t\t\ticon: \"fa fa-user-check\",\n\t\t\t\tcommand: this.openBenotung,\n\t\t\t\tdisabled: Vue.computed(()=> this.assistenzMode == true)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4plagiatcheck_link')),\n\t\t\t\ticon: \"fa fa-clipboard-check\",\n\t\t\t\tcommand: this.openPlagiatcheck\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: Vue.computed(() => this.$p.t('abgabetool/c4student_perspective')),\n\t\t\t\ticon: \"fa fa-eye\",\n\t\t\t\tcommand: this.openStudentPage\n\t\t\t}],\n\t\t\tnewTermin: null,\n\t\t\tform: Vue.reactive({\n\t\t\t\tsprache: '',\n\t\t\t\tabstract: '',\n\t\t\t\tabstract_en: '',\n\t\t\t\tschlagwoerter: '',\n\t\t\t\tschlagwoerter_en: '',\n\t\t\t\tkontrollschlagwoerter: '',\n\t\t\t\tseitenanzahl: 1,\n\t\t\t})\n\t\t}\n\t},\n\tmethods: {\n\t\tgetNoteBezeichnung(termin){\n\t\t\tif(termin.noteBackend?.bezeichnung) {\n\t\t\t\treturn termin.noteBackend?.positiv ? this.$capitalize(this.$p.t('abgabetool/c4positivBenotet')) + ' ✅' : this.$capitalize(this.$p.t('abgabetool/c4negativBenotet')) + ' ❌'\n\t\t\t} else if(termin.bezeichnung?.benotbar === true && !termin.noteBackend) {\n\t\t\t\treturn this.$capitalize(this.$p.t('abgabetool/c4notYetGraded'));\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t},\n\t\tgetPlaceholderTermin(termin) {\n\t\t\treturn termin?.bezeichnung ? this.$p.t('abgabetool/c4paatyp' + termin.paabgabetyp_kurzbz) : this.$p.t('abgabetool/abgabetypPlaceholder')\n\t\t},\n\t\tsaveTermin(termin) {\n\t\t\tconst paabgabe_id = termin.paabgabe_id\n\t\t\ttermin.note_pk = termin.note?.note ?? null\n\t\t\ttermin.betreuer_person_id = this.projektarbeit.betreuer_person_id\n\t\t\t\n\t\t\t// phrasentext 'no late submission allowed' to 'late submission allowed' + boolean UI invert\n\t\t\ttermin.fixtermin = !termin.invertedFixtermin\n\t\t\treturn this.$api.call(ApiAbgabe.postProjektarbeitAbgabe(termin)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\n\t\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == res.data[0].note)\n\t\t\t\t\tconst newTerminRes = {\n\t\t\t\t\t\t'allowedToSave': true,\n\t\t\t\t\t\t'allowedToDelete': true,\n\t\t\t\t\t\t...res.data[0]\n\t\t\t\t\t}\n\t\t\t\t\tif(newTerminRes.note) {\n\t\t\t\t\t\tnewTerminRes.note = noteOpt\n\t\t\t\t\t\tnewTerminRes.noteBackend = noteOpt // certain UI elements should only reflect persisted state\n\t\t\t\t\t}\n\t\t\t\t\tnewTerminRes.invertedFixtermin = !newTerminRes.fixtermin\n\t\t\t\t\tconst existingTerminRes = res.data[1]\n\t\t\t\t\t\n\t\t\t\t\tconst abgabeOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == newTerminRes.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tnewTerminRes.bezeichnung = {\n\t\t\t\t\t\tbezeichnung: termin.bezeichnung?.bezeichnung,\n\t\t\t\t\t\tpaabgabetyp_kurzbz: termin.bezeichnung?.paabgabetyp_kurzbz,\n\t\t\t\t\t\tbenotbar: abgabeOpt.benotbar\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// only insert new abgabe if we actually created a new one, not when saving/editing existing\n\t\t\t\t\tif(!existingTerminRes){\n\t\t\t\t\t\tnewTerminRes.dateStyle = getDateStyleClass(newTerminRes, this.notenOptions)\n\t\t\t\t\t\tthis.projektarbeit.abgabetermine.push(newTerminRes)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst noteOptExisting = this.allowedNotenOptions.find(opt => opt.note == existingTerminRes.note)\n\t\t\t\t\t\texistingTerminRes.note = noteOptExisting\n\n\t\t\t\t\t\ttermin.paabgabetyp_kurzbz = newTerminRes.paabgabetyp_kurzbz\n\t\t\t\t\t\ttermin.noteBackend = noteOpt // do NOT take noteOptExisting -> should reflect the \"yes the qgate grade is confirmed in backend ux behaviour\"\n\t\t\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.projektarbeit.abgabetermine.sort((a, b) =>new Date(a.datum) - new Date(b.datum))\n\t\t\t\t\t\n\t\t\t\t\tconst index = this.projektarbeit.abgabetermine.findIndex(t => termin.paabgabe_id == t.paabgabe_id)\n\t\t\t\t\t\n\t\t\t\t\t// negative abgabe -> automagically open new termin modal\n\t\t\t\t\t// really bad feature imo that will be annoying to deal with\n\t\t\t\t\t\n\t\t\t\t\t// termin is completely new and has negative note\n\t\t\t\t\tconst savedNewWithNegative = !existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null\n\n\t\t\t\t\t// termin existed previously + oldTermin had different note/positive note or no note at all\n\t\t\t\t\tconst savedExistingNoteAsNegativeAndWasNotNegativeBefore = existingTerminRes && !newTerminRes.note?.positiv && newTerminRes.note !== null && (existingTerminRes.note?.positiv || existingTerminRes.note === undefined)\n\n\t\t\t\t\tconst openModalDueToNegativeBeurteilung = savedNewWithNegative || savedExistingNoteAsNegativeAndWasNotNegativeBefore\n\t\t\t\t\tif(openModalDueToNegativeBeurteilung) {\n\t\t\t\t\t\tthis.newTermin = {\n\t\t\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t\t\t'kurzbz': '', // todo kurzbz textfield value vorschlag für qualgates\n\t\t\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t\t\t'upload_allowed': false,\n\t\t\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === newTerminRes.paabgabetyp_kurzbz),\n\t\t\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = true\n\n\t\t\t\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showAutomagicModalPhrase = false\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\topenZusatzdatenModal() {\n\t\t\tthis.$refs.modalContainerZusatzdaten.show()\n\t\t},\n\t\tasync saveZusatzdaten(){\n\t\t\tif (!await this.validateZusatzdaten())\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst pa = this.projektarbeit\n\n\t\t\t// post endabgabe\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id);\n\n\t\t\tformData.append('sprache', this.form['sprache'].sprache)\n\t\t\tformData.append('abstract', this.form['abstract'])\n\t\t\tformData.append('abstract_en', this.form['abstract_en'])\n\t\t\tformData.append('schlagwoerter', this.form['schlagwoerter'])\n\t\t\tformData.append('schlagwoerter_en', this.form['schlagwoerter_en'])\n\t\t\tformData.append('seitenanzahl', this.form['seitenanzahl'])\n\t\t\t\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.postStudentProjektarbeitZusatzdaten(formData))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res.meta.status == 'success') {\n\t\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))\n\t\t\t\t\t\tif(!data?.retval?.[0]) return\n\t\t\t\t\t\tconst paRes = data.retval[0]\n\t\t\t\t\t\tpa.seitenanzahl = paRes.seitenanzahl ?? 1\n\t\t\t\t\t\tpa.kontrollschlagwoerter = paRes.kontrollschlagwoerter ?? ''\n\t\t\t\t\t\tpa.schlagwoerter = paRes.schlagwoerter ?? ''\n\t\t\t\t\t\tpa.sprache = paRes.sprache ?? ''\n\t\t\t\t\t\tpa.schlagwoerter_en = paRes.schlagwoerter_en ?? ''\n\t\t\t\t\t\tpa.abstract = paRes.abstract ?? ''\n\t\t\t\t\t\tpa.abstract_en = paRes.abstract_en ?? ''\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}).finally(()=> {\n\t\t\t\tthis.loading = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerZusatzdaten.hide()\n\t\t},\n\t\tasync validateZusatzdaten() {\n\t\t\t// just ask once\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/confirmZusatzdatenSpeichern'),\n\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\tacceptClass: 'p-button-primary',\n\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleDeleteTermin(termin){\n\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\tmessage: this.$p.t('abgabetool/c4confirm_delete'),\n\t\t\t\tacceptLabel: 'Löschen',\n\t\t\t\tacceptClass: 'p-button-danger',\n\t\t\t\trejectLabel: 'Zurück',\n\t\t\t\trejectClass: 'p-button-secondary'\n\t\t\t}) === false) {\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\tthis.deleteTermin(termin)\n\t\t\t}\n\t\t},\n\t\tdeleteTermin(termin) {\n\t\t\tthis.$api.call(ApiAbgabe.deleteProjektarbeitAbgabe(termin.paabgabe_id)).then( (res) => {\n\t\t\t\tif(res?.meta?.status == 'success') {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')]))\n\t\t\t\t\t// this.$p.t('global/tooltipLektorDeleteKontrolle', [this.$entryParams.permissions.kontrolleDeleteMaxReach ])\n\t\t\t\t\tconst deletedTerminIndex = this.projektarbeit.abgabetermine.findIndex(t => t.paabgabe_id === termin.paabgabe_id)\n\t\t\t\t\tthis.projektarbeit.abgabetermine.splice(deletedTerminIndex, 1)\n\t\t\t\t\tthis.$emit(\"paUpdated\", this.projektarbeit)\n\t\t\t\t} else if(res?.meta?.status == 'error'){\n\t\t\t\t\tthis.$fhcAlert.alertError()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tvalidate: function(termin) {\n\t\t\tif(!termin.file.length) {\n\t\t\t\tthis.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\t\tdownloadAbgabe(termin) {\n\t\t\tconst url = `/api/frontend/v1/Abgabe/getStudentProjektarbeitAbgabeFile?paabgabe_id=${termin.paabgabe_id}&student_uid=${this.projektarbeit.student_uid}&projektarbeit_id=${this.projektarbeit.projektarbeit_id}`;\n\n\t\t\twindow.open(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url)\n\t\t\t// this.$api.call(ApiAbgabe.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid))\n\t\t},\n\t\topenBeurteilungLink(link) {\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tgetOptionLabelSprache(option) {\n\t\t\treturn option.sprache\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option) {\n\t\t\treturn this.$p.t('abgabetool/c4paatyp' + option.paabgabetyp_kurzbz)\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t\tgetNotenOptionLabel(option) {\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\topenStudentPage() {\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenPlagiatcheck() {\n\t\t\tconst link = this.turnitin_link\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\tasync openBenotung() {\n\t\t\t// old link check ?\n\t\t\t\n\t\t\tif(this.getSemesterBenotbar && this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkNew) {\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkNew\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else if(this.projektarbeit?.abgabetermine.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && this.projektarbeit?.beurteilungLinkOld) {\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4aeltereParbeitBenotenv2'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tconst link = this.projektarbeit?.beurteilungLinkOld\n\t\t\t\twindow.open(link, '_blank')\n\t\t\t} else {\n\t\t\t\t// show info text that no endupload with abgabe has been found\n\t\t\t\tif(await this.$fhcAlert.confirm({\n\t\t\t\t\tmessage: this.$p.t('abgabetool/c4keinEnduploadErfolgt'),\n\t\t\t\t\tacceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),\n\t\t\t\t\tacceptClass: 'btn btn-danger',\n\t\t\t\t\trejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),\n\t\t\t\t\trejectClass: 'btn btn-outline-secondary'\n\t\t\t\t}) === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\t// unsafe for datepickers, dont use there\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\t\t\t\n\t\t\treturn `${day}.${month}.${year}`\n\t\t},\n\t\topenCreateNewAbgabeModal() {\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') {\n\t\t\t\t// maybe alert that this is not allowed or smth\n\n\t\t\t\tthis.$fhcAlert.alertWarning('Terminanlage disabled')\n\t\t\t\treturn\n\t\t\t}\n\t\t\t\n\t\t\tif(!this.newTermin) {\n\t\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\t\tthis.newTermin = {\n\t\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t\t'fixtermin': false,\n\t\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t\t'kurzbz': '',\n\t\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t\t'bezeichnung': typ,\n\t\t\t\t\t'abgabedatum': null,\n\t\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.show()\n\t\t},\n\t\tvalidateTermin(termin) {\n\t\t\t// compare new termin to existing ones to block illegal termin constellations, if they exist\n\t\t\t\n\t\t\treturn true\n\t\t},\n\t\tasync handleSaveNewAbgabe(termin) {\n\t\t\t\n\t\t\tif(!this.validateTermin(termin)) {\n\t\t\t\tthis.$fhcAlert.alertWarning('invalid termin')\n\t\t\t\t\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\tawait this.saveTermin(termin)\n\t\t\t\n\t\t\tthis.$refs.modalContainerCreateNewAbgabe.hide()\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': this.projektarbeit.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': false,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen'),\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\thandleChangeAbgabetyp(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t}\n\t},\n\tcomputed: {\n\t\tgetAllowedToCreateNewTermin() {\n\t\t\tif(this.assistenzMode) return true\n\t\t\tif(this.projektarbeit?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\tif(this.projektarbeit?.note !== undefined && this.projektarbeit.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) return true\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t\n\t\t\t// normally should be allowed if no rules apply\n\t\t\treturn true\n\t\t},\n\t\tallowedToSaveZusatzdaten() {\n\t\t\t\treturn this.form.schlagwoerter.length > 0 && this.form.schlagwoerter_en.length > 0 && this.form.abstract.length > 0 && this.form.abstract_en.length > 0 && this.form.seitenanzahl > 0\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\tif(this.assistenzMode) {\n\t\t\t\treturn this.abgabeTypeOptions\n\t\t\t} else {\n\t\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t\t}\n\t\t},\n\t\tgetMessagePtStyle() {\n\t\t\t// adjust outer spacing and internal padding to appear similar to doenload button in size\n\t\t\treturn {\n\t\t\t\troot: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tmargin: '0px'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twrapper: {\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\tpadding: '6px'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\t\n\t\t},\n\t\tgetEid() {\n\t\t\treturn this.$p.t('abgabetool/c4eidesstattlicheErklaerung')\n\t\t},\n\t\tgetEnduploadErlaubt() {\n\t\t\treturn !this.eidAkzeptiert\n\t\t},\n\t\tgetSemesterBenotbar(){\n\t\t\treturn this.projektarbeit?.isCurrent ?? false\n\t\t},\n\t\tendUploadVorhanden(){\n\t\t\treturn this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null)\n\t\t},\n\t\tqualityGateTerminAvailable() {\n\t\t\tlet qgatefound = false\n\t\t\tthis.projektarbeit?.abgabetermine.forEach(abgabe => {\n\t\t\t\tif(abgabe.bezeichnung?.paabgabetyp_kurzbz == 'qualgate1'\n\t\t\t\t\t|| abgabe?.bezeichnung?.paabgabetyp_kurzbz == 'qualgate2') {\n\t\t\t\t\tqgatefound = true\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn qgatefound\n\t\t},\n\t\tgetSpeedDialStyle() {\n\t\t\treturn 'position: static !important;'\n\t\t},\n\t\tgetSpeedDialWrapperStyle() {\n\t\t\t// non fullscreen -> wrapper is positioned on right bottom corner of modal, wherever that is\n\t\t\treturn 'position: absolute; z-index: 9999; left: 0px; bottom: 0.5rem;'\n\t\t},\n\t\tgetTooltipVerspaetet() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerspaetet'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipVerpasst() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipVerpasst'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbzugeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbzugeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipStandard() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipStandardv2'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBeurteilungerforderlich() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBeurteilungerforderlich'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgegeben() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipAbgegeben'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipFixtermin() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipFixtermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipAbgabeDetected() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$capitalize(this.$p.t('abgabetool/c4tooltipAbgabeDetected')),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToSave() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToEditAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNotAllowedToDelete() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4notAllowedToDeleteAbgabeTermin'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetTooltipNichtBestanden() {\n\t\t\treturn {\n\t\t\t\tvalue: this.$p.t('abgabetool/c4tooltipNichtBestanden'),\n\t\t\t\tclass: \"custom-tooltip\"\n\t\t\t}\n\t\t},\n\t\tgetProjektarbeitTitel() {\n\t\t\tif(this.projektarbeit?.titel) return this.$capitalize(this.$p.t('abgabetool/c4titel')) + ': ' + this.projektarbeit.titel\n\t\t\t\n\t\t\treturn ''\n\t\t},\n\t\tgetProjektarbeitStudent(){\n\t\t\tif(this.projektarbeit?.student) return this.$capitalize(this.$p.t('person/student')) + ': ' + this.projektarbeit.student\n\n\t\t\treturn ''\n\t\t}\n\t},\n\twatch: {\n\t\t'newTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.newTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\t\t\t\n\t\t\tthis.newTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\t'projektarbeit'(newVal) {\n\t\t\t// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text\n\t\t\t\n\t\t\t// reset newTermin object\n\t\t\tconst typ = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === 'zwischen')\n\t\t\tthis.newTermin = {\n\t\t\t\t'paabgabe_id': -1,\n\t\t\t\t'projektarbeit_id': newVal.projektarbeit_id,\n\t\t\t\t'fixtermin': false,\n\t\t\t\t'invertedFixtermin': true,\n\t\t\t\t'kurzbz': '',\n\t\t\t\t'datum': new Date().toISOString().split('T')[0],\n\t\t\t\t'note': this.allowedNotenOptions.find(opt => opt.note == 9),\n\t\t\t\t'beurteilungsnotiz': '',\n\t\t\t\t'upload_allowed': typ.upload_allowed_default,\n\t\t\t\t'paabgabetyp_kurzbz': '',\n\t\t\t\t'bezeichnung': typ,\n\t\t\t\t'abgabedatum': null,\n\t\t\t\t'insertvon': this.viewData?.uid ?? ''\n\t\t\t}\n\t\t\t\n\t\t\tnewVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)\n\t\t\t\n\t\t\t// default select german if projektarbeit sprache was null\n\t\t\tthis.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')\n\t\t\tthis.form.abstract = newVal.abstract ?? ''\n\t\t\tthis.form.abstract_en = newVal.abstract_en ?? ''\n\t\t\tthis.form.schlagwoerter = newVal.schlagwoerter ?? ''\n\t\t\tthis.form.schlagwoerter_en = newVal.schlagwoerter_en ?? ''\n\t\t\tthis.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter ?? ''\n\t\t\tthis.form.seitenanzahl = newVal.seitenanzahl ?? 1\n\t\t},\n\t},\n\tcreated() {\n\n\t},\n\tmounted() {\n\n\t},\n\ttemplate: `\n\t\n\t\t\n\t\t\n\t\t\n\t\n\n\t
    \n\t\t
    {{$capitalize( $p.t('abgabetool/c4abgabeMitarbeiterbereich') )}}
    \n\n\t\t
    \n\t\t\t
    \n\t\t\t\t

    {{getProjektarbeitStudent}}

    \n\t\t\t\t

    {{getProjektarbeitTitel}}

    \n\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t
    \n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t
    \n\t\t\t
    {{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}
    \n\t\t
    \n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t
    \n`,\n};\n\nexport default AbgabeMitarbeiterDetail;\n","export async function splitMailsHelper(mails, event, subject, alertPluginRef, phrasenPluginRef) {\n\tlet splititem = \",\";\n\tlet maillist = mails.join(splititem);\n\tlet mailto = \"\";\n\t// take subject line length + '?subject=' length into account\n\tconst subjectlength = subject && typeof subject === 'string' ? subject.length + 9 : 0 \n\tif (maillist.length > 2024)\n\t{\n\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'zuvieleEMails') }) === false)\n\t\t\treturn;\n\t}\n\n\tlet firstrun = true;\n\tlet useBcc = event?.ctrlKey || event?.metaKey;\n\twhile (maillist.length > 0)\n\t{\n\t\tif (maillist.length + subjectlength > 2024)\n\t\t{\n\t\t\tlet splitposition = maillist.lastIndexOf(splititem, 1900);\n\t\t\tmailto = maillist.substring(0, splitposition);\n\t\t\tmaillist = maillist.substring(splitposition + 1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tmailto = maillist;\n\t\t\tmaillist = \"\";\n\t\t}\n\n\t\tlet mailLink = useBcc ? `mailto:?bcc=${mailto}` : `mailto:${mailto}`;\n\t\tif(subject && typeof subject === 'string') mailLink += `?subject=${subject}`\n\t\tif (firstrun)\n\t\t{\n\t\t\twindow.location.href = mailLink;\n\t\t\tfirstrun = false;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (await alertPluginRef.confirm({message: phrasenPluginRef.t('stv', 'weitereEMail')}) === true)\n\t\t\t{\n\t\t\t\twindow.location.href = mailLink;\n\t\t\t}\n\t\t}\n\n\t}\n}","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { getDateStyleClass } from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\nimport {splitMailsHelper} from \"../../../helpers/EmailHelpers.js\";\n\nexport const AbgabetoolMitarbeiter = {\n\tname: \"AbgabetoolMitarbeiter\",\n\tcomponents: {\n\t\tBsModal,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tTextarea: primevue.textarea,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabetypenBetreuer),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link)\n\t\t}\n\t},\n\tprops: {\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tabgabetypenBetreuer: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tBETREUER_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitDataStretch',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return \n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.detailFormatter, headerFilter: false, headerSort: false, widthGrow: 1, tooltip: false, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4betreuerartv2'))), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))), field: 'prevTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList }, \n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: 'abgabeTableBetreuer2026-02-26'\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"cellClick\",\n\t\t\t\thandler: async (e, cell) => {\n\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t} else if (cell.getColumn().getField() === \"mail\") {\n\t\t\t\t\t\tthis.undoSelection(cell)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => {\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tsammelMailStudent(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = \"\"; // empty subject line \n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tconst rowDate = rowVal.luxonDate;\n\t\t\t\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected) {\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\ttoggleShowAll(showall) {\n\t\t\tthis.showAll = showall\n\t\t\tthis.loading = true\n\t\t\tthis.loadProjektarbeiten(showall, () => {\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\tthis.loading = false\n\t\t\t})\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tthis.saving = true\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tthis.selectedData?.map(projekt => projekt.projektarbeit_id),\n\t\t\t\tfalse\n\t\t\t)).then(res => {\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\n\t\t\t\t\tconst oldScrollLeft = this.$refs.abgabeTable?.tabulator.rowManager.scrollLeft\n\t\t\t\t\tconst oldScrollTop = this.$refs.abgabeTable?.tabulator.rowManager.scrollTop\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\tthis.loadProjektarbeiten(this.showAll, () => {\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.redraw(true)\n\t\t\t\t\t\tthis.$refs.abgabeTable?.tabulator.setSort([]);\n\t\t\t\t\t\tthis.loading = false\n\n\t\t\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\t\t\tif(table) {\n\t\t\t\t\t\t\t\ttable.scrollLeft = oldScrollLeft;\n\t\t\t\t\t\t\t\ttable.scrollTop = oldScrollTop;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\t\t\t\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\t\t\t\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tthis.loading=true\n\n\t\t\tconst pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tlet paIsBenotet = false\n\t\t\tif(pa.note !== undefined && pa.note !== null) {\n\t\t\t\t// check if the note is not defined as a non final projektarbeit note\n\t\t\t\tconst opt = this.notenOptionsNonFinal.find(opt => opt.note)\n\t\t\t\t// if thats the case allow further work\n\t\t\t\tif(opt) paIsBenotet = false\n\t\t\t\t// else the PA is to be considered finished\n\t\t\t\tpaIsBenotet = true\n\t\t\t}\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tconst noteOpt = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\tif(noteOpt) termin.note = noteOpt\n\t\t\t\ttermin.file = []\n\t\t\t\t\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && noteOpt) {\n\t\t\t\t\ttermin.noteBackend = noteOpt\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// update 08-01-2026: everybody is allowed to do everything in client, critical checks happen at backend level\n\t\t\t\t// termin.allowedToSave = true\n\t\t\t\t\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\t\t\t\t\n\t\t\t\t// lektoren are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = termin.allowedToSave && !termin.abgabedatum\n\t\t\t\t\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\n\t\t\t})\n\t\t\t\n\t\t\tpa.student_uid = details.student_uid\n\t\t\tpa.student = `${pa.vorname} ${pa.nachname}`\n\t\t\t\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t\n\t\t\n\t\t\tthis.loading = false\n\t\t\t\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\t\t\t\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(abgabe) {\n\t\t\treturn 'mailto:' + abgabe.uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\t\n\t\t},\n\t\tsetupData(data){\n\t\t\t\n\t\t\t\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = data[0]?.retval?.map(projekt => {\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\t\t\t\tprojekt.selectable = projekt.betreuerart_kurzbz !== 'Zweitbegutachter'\n\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.$api.call(ApiAbgabe.getMitarbeiterProjektarbeiten(all))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\t\tif(callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\n\t\t\tif(this.BETREUER_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tgetAllowedAbgabeTypeOptions() {\n\t\t\treturn this.abgabeTypeOptions.filter(opt => this.abgabetypenBetreuer.includes(opt.paabgabetyp_kurzbz))\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t// fetch config to avoid hard coded links\n\t\tthis.$api.call(ApiAbgabe.getConfig()).then(res => {\n\t\t\tthis.turnitin_link = res.data?.turnitin_link\n\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link\n\t\t\tthis.abgabetypenBetreuer = res.data?.abgabetypenBetreuer\n\t\t\tthis.BETREUER_SAMMELMAIL_BUTTON_STUDENT = res.data?.BETREUER_SAMMELMAIL_BUTTON_STUDENT\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch noten options\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tthis.$api.call(ApiAbgabe.getNoten()).then(res => {\n\t\t\tif(res.meta.status == 'success') {\n\t\t\t\tthis.notenOptions = res.data[0]\n\n\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t)\n\t\t\t\t\n\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t)\n\t\t\t}\n\t\t\t\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t\t\n\t\t// fetch abgabetypen options\n\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen()).then(res => {\n\t\t\tthis.abgabeTypeOptions = res.data\n\t\t}).catch(e => {\n\t\t\tthis.loading = false\n\t\t})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolMitarbeiter;\n","export default {\n\tname: 'BootstrapOffcanvas',\n\tdata: () => ({\n\t\toffcanvas: null\n\t}),\n\tprops: {\n\t\tbackdrop: {\n\t\t\ttype: [Boolean, String],\n\t\t\tdefault: true,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['static', true, false].includes(value);\n\t\t\t}\n\t\t},\n\t\tkeyboard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true\n\t\t},\n\t\tscroll: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false\n\t\t},\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'start', // start | end | top | bottom\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['start', 'end', 'top', 'bottom'].includes(value);\n\t\t\t}\n\t\t},\n\t\tnoCloseBtn: Boolean,\n\t\theaderClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tbodyClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: 'p-4'\n\t\t},\n\t\tfooterClass: {\n\t\t\ttype: [String, Array, Object],\n\t\t\tdefault: ''\n\t\t},\n\t\tdialogClass: [String, Array, Object]\n\t},\n\temits: [\n\t\t\"hideBsOffcanvas\",\n\t\t\"hiddenBsOffcanvas\",\n\t\t\"hidePreventedBsOffcanvas\",\n\t\t\"showBsOffcanvas\",\n\t\t\"shownBsOffcanvas\"\n\t],\n\tmethods: {\n\t\tdispose() {\n\t\t\treturn this.offcanvas?.dispose();\n\t\t},\n\t\thide() {\n\t\t\treturn this.offcanvas?.hide();\n\t\t},\n\t\tshow(relatedTarget) {\n\t\t\treturn this.offcanvas?.show(relatedTarget);\n\t\t},\n\t\ttoggle() {\n\t\t\treturn this.offcanvas?.toggle();\n\t\t},\n\t\tpopup(body, options, title, footer) {\n\t\t\tconst BsOffcanvas = this,\n\t\t\t\tslots = {};\n\n\t\t\tif (body !== undefined)\n\t\t\t\tslots.default = () => body;\n\t\t\tif (title !== undefined)\n\t\t\t\tslots.title = () => title;\n\t\t\tif (footer !== undefined)\n\t\t\t\tslots.footer = () => footer;\n\n\t\t\tlet includedPrimevue = false;\n\t\t\tif (typeof primevue !== 'undefined')\n\t\t\t\tincludedPrimevue = true;\n\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tconst instance = Vue.createApp({\n\t\t\t\t\tname: 'OffcanvasTmpApp',\n\t\t\t\t\tsetup() {\n\t\t\t\t\t\treturn () =>\n\t\t\t\t\t\t\tVue.h(BsOffcanvas, {\n\t\t\t\t\t\t\t\tclass: 'offcanvas-wrapper',\n\t\t\t\t\t\t\t\tref: 'offcanvas',\n\t\t\t\t\t\t\t\t...options\n\t\t\t\t\t\t\t}, slots);\n\t\t\t\t\t},\n\t\t\t\t\tmounted() {\n\t\t\t\t\t\tthis.$refs.offcanvas.show();\n\t\t\t\t\t},\n\t\t\t\t\tbeforeUnmount() {\n\t\t\t\t\t\tif (this.$refs.offcanvas)\n\t\t\t\t\t\t\tthis.$refs.offcanvas.result !== false ? resolve(this.$refs.offcanvas.result) : reject();\n\t\t\t\t\t},\n\t\t\t\t\tunmounted() {\n\t\t\t\t\t\twrapper.parentElement.removeChild(wrapper);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst wrapper = document.createElement('div');\n\n\t\t\t\tif (includedPrimevue) {\n\t\t\t\t\tinstance.use(primevue.config.default, { zIndex: { overlay: 9999 } });\n\t\t\t\t}\n\n\t\t\t\timport('../../plugins/Phrasen.js').then((Phrasen) => {\n\t\t\t\t\tinstance.use(Phrasen.default);\n\t\t\t\t\tinstance.mount(wrapper);\n\t\t\t\t\tdocument.body.appendChild(wrapper);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.$refs.offcanvas) {\n\t\t\tthis.offcanvas = new bootstrap.Offcanvas(this.$refs.offcanvas, {\n\t\t\t\tbackdrop: this.backdrop,\n\t\t\t\tkeyboard: this.keyboard,\n\t\t\t\tscroll: this.scroll\n\t\t\t});\n\t\t}\n\t},\n\ttemplate: `\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t`\n}\n","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tgetAllStudiensemesterAndAktOrNext() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/organisation/Studiensemester/getAllStudiensemesterAndAktOrNext',\n\t\t};\n\t},\n\tgetAll(order = null, start = null)\n\t{\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: 'api/frontend/v1/organisation/studiensemester/getAll',\n\t\t\tparams: { order, start }\n\t\t};\n\t}\n};","export const AbgabeterminStatusLegende = {\n\tname: 'AbgabeterminStatusLegende',\n\ttemplate: `\t\n\t\t
    \n\t\t\t
    \n\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerspaetet')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipVerpasst')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbzugeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipStandardv2')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipAbgegeben')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBeurteilungerforderlich')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipBestanden')) }}
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t
    {{ $capitalize($p.t('abgabetool/c4tooltipNichtBestanden')) }}
    \n\t\t\t\t\t
    \t\n\t\t\t\t
    \n\n\t\t\t
    \n\t\t
    \t\n\t`\n};\nexport default AbgabeterminStatusLegende;","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport AbgabeDetail from \"./AbgabeMitarbeiterDetail.js\";\nimport BsModal from '../../Bootstrap/Modal.js';\nimport BsOffcanvas from '../../Bootstrap/Offcanvas.js';\nimport VueDatePicker from '../../vueDatepicker.js.php';\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\nimport ApiStudiensemester from '../../../api/factory/studiensemester.js';\nimport AbgabeterminStatusLegende from \"./StatusLegende.js\";\nimport FhcOverlay from \"../../Overlay/FhcOverlay.js\";\nimport { splitMailsHelper } from \"../../../helpers/EmailHelpers.js\"\nimport { getDateStyleClass} from \"./getDateStyleClass.js\";\nimport { dateFilter } from '../../../tabulator/filters/Dates.js';\n\nexport const AbgabetoolAssistenz = {\n\tname: \"AbgabetoolAssistenz\",\n\tcomponents: {\n\t\tAbgabeterminStatusLegende,\n\t\tBsModal,\n\t\tBsOffcanvas,\n\t\tCoreFilterCmpt,\n\t\tAbgabeDetail,\n\t\tCheckbox: primevue.checkbox,\n\t\tDropdown: primevue.dropdown,\n\t\tInplace: primevue.inplace,\n\t\tTextarea: primevue.textarea,\n\t\tTimeline: primevue.timeline,\n\t\tTieredMenu: primevue.tieredmenu,\n\t\tVueDatePicker,\n\t\tFhcOverlay\n\t},\n\tprovide() {\n\t\treturn {\n\t\t\tabgabeTypeOptions: Vue.computed(() => this.abgabeTypeOptions),\n\t\t\tallowedNotenOptions: Vue.computed(() => this.allowedNotenOptions),\n\t\t\tnotenOptionsNonFinal: Vue.computed(() => this.notenOptionsNonFinal),\n\t\t\tturnitin_link: Vue.computed(() => this.turnitin_link),\n\t\t\told_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link),\n\t\t\tabgabetypenBetreuer: Vue.computed(() => this.abgabeTypeOptions)\n\t\t}\n\t},\n\tprops: {\n\t\tstg_kz_prop: {\n\t\t\tdefault: null\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.uid // && value.name -> extensive viewData use only for cis4 onwards\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttableData: null,\n\t\t\tstudiensemesterOptions: null,\n\t\t\tallSem: null,\n\t\t\tcurSem: null,\n\t\t\tnotenOptionFilter: null,\n\t\t\tinplaceToggle: false,\n\t\t\theaderFiltersRestored: false,\n\t\t\tfiltersRestored: false,\n\t\t\tcolLayoutRestored: false,\n\t\t\tsortRestored: false,\n\t\t\tstateRestored: false,\n\t\t\ttimelineProjekt: null,\n\t\t\tselectedStudiengangOption: null,\n\t\t\tstudiengaengeOptions: null,\n\t\t\tdetailIsFullscreen: false,\n\t\t\tallConfigPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tturnitin_link: null,\n\t\t\told_abgabe_beurteilung_link: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_STUDENT: null,\n\t\t\tASSISTENZ_SAMMELMAIL_BUTTON_BETREUER: null,\n\t\t\tsaving: false,\n\t\t\tloading: false,\n\t\t\tabgabeTypeOptions: null,\n\t\t\tnotenOptions: null,\n\t\t\tallowedNotenFilterOptions: null,\n\t\t\tallowedNotenOptions: null,\n\t\t\tnotenOptionsNonFinal: null,\n\t\t\tserienTermin: Vue.reactive({\n\t\t\t\tdatum: new Date(),\n\t\t\t\tbezeichnung: {\n\t\t\t\t\tpaabgabetyp_kurzbz: 'zwischen',\n\t\t\t\t\tbezeichnung: 'Zwischenabgabe'\n\t\t\t\t},\n\t\t\t\tkurzbz: '',\n\t\t\t\tfixtermin: false,\n\t\t\t\tinvertedFixtermin: true,\n\t\t\t\tupload_allowed: false\n\t\t\t}),\n\t\t\tshowAll: false,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\tselectedData: [],\n\t\t\tdomain: '',\n\t\t\tstudent_uid: null,\n\t\t\tdetail: null,\n\t\t\tdetailOffset: 0,\n\t\t\tprojektarbeiten: null,\n\t\t\tselectedProjektarbeit: null,\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tabgabeTableOptions: {\n\t\t\t\tminHeight: 250,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitData',\n\t\t\t\tplaceholder: Vue.computed(() => this.$capitalize(this.$p.t('global/noDataAvailable'))),\n\t\t\t\tselectable: true,\n\t\t\t\tselectableCheck: this.selectionCheck,\n\t\t\t\trowHeight: 40,\n\t\t\t\trenderVerticalBuffer: 2000,\n\t\t\t\tcolumns: [\n\t\t\t\t\t{\n\t\t\t\t\t\tformatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tif(!cell.getRow().getData().selectable) return\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle select manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tcell.getRow().getData().checkbox = checkbox\n\n\t\t\t\t\t\t\tlet wrapper = document.createElement(\"div\");\n\t\t\t\t\t\t\twrapper.style.cssText = \"display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;\";\n\n\t\t\t\t\t\t\twrapper.appendChild(checkbox);\n\n\t\t\t\t\t\t\treturn wrapper;\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatter: function (cell, formatterParams, onRendered) {\n\t\t\t\t\t\t\t// create the built-in checkbox\n\t\t\t\t\t\t\tlet checkbox = document.createElement(\"input\");\n\t\t\t\t\t\t\tcheckbox.type = \"checkbox\";\n\n\t\t\t\t\t\t\t// Handle \"select all\" manually\n\t\t\t\t\t\t\tcheckbox.addEventListener(\"click\", (e) => {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\t\t\t\t// call our function\n\t\t\t\t\t\t\t\tif (formatterParams && formatterParams.handleClick) {\n\t\t\t\t\t\t\t\t\tformatterParams.handleClick(e, cell);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn checkbox;\n\t\t\t\t\t\t},\n\t\t\t\t\t\thozAlign: \"center\",\n\t\t\t\t\t\theaderSort: false,\n\t\t\t\t\t\tformatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitleFormatterParams: {\n\t\t\t\t\t\t\thandleClick: this.selectAllHandler\n\t\t\t\t\t\t},\n\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\tcssClass: 'sticky-col'\n\t\t\t\t\t},\n\t\t\t\t// {\n\t\t\t\t\t// \tfield: 'rowSelection',\n\t\t\t\t\t// \tformatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatter: 'rowSelection',\n\t\t\t\t\t// \ttitleFormatterParams: {\n\t\t\t\t\t// \t\trowRange: \"active\" // Only toggle the values of the active filtered rows\n\t\t\t\t\t// \t},\n\t\t\t\t\t// \thozAlign:\"center\",\n\t\t\t\t\t// \theaderSort: false,\n\t\t\t\t\t// \tfrozen: true,\n\t\t\t\t\t// \twidth: 40\n\t\t\t\t\t// },\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', headerFilter: false, headerSort: false, formatter: this.formAction, tooltip:false, minWidth: 150, cssClass: 'sticky-col'},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'student_vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'student_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4studstatus'))), field: 'studienstatus', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4orgform'))), field: 'orgform', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4note'))), field: 'note_bez', headerFilter: true,\n\t\t\t\t\t\t formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'studiensemester_kurzbz', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4titel'))), field: 'titel', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerv2'))), field: 'erstbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPre'))), field: 'betreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerVorname'))), field: 'betreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerNachname'))), field: 'betreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4erstbetreuerTitelPost'))), field: 'betreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerv2'))), field: 'zweitbetreuer', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPre'))), field: 'zweitbetreuer_titelpre', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerVorname'))), field: 'zweitbetreuer_vorname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerNachname'))), field: 'zweitbetreuer_nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zweitbetreuerTitelPost'))), field: 'zweitbetreuer_titelpost', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1, visible: false},\n\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4prevAbgabetermin'))),\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tfield: 'prevTermin', formatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nextAbgabetermin'))), field: 'nextTermin',\n\t\t\t\t\t\theaderFilter: dateFilter,\n\t\t\t\t\t\theaderFilterFunc: this.headerFilterTerminCol,\n\t\t\t\t\t\tsorter: this.sortFuncTerminCol,\n\t\t\t\t\t\tformatter: this.abgabterminFormatter, widthGrow: 1, width: 250, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate1Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate1Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4qgate2Status'))),\n\t\t\t\t\t\theaderFilter: 'list',\n\t\t\t\t\t\theaderFilterParams: { valuesLookup: this.getQGateStatusList },\n\t\t\t\t\t\tfield: 'qgate2Status', formatter: this.centeredTextFormatter, widthGrow: 1, width: 220, tooltip: false},\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t\tpersistenceID: \"abgabetool_2026_02_26\"\n\t\t\t},\n\t\t\tabgabeTableEventHandlers: [\n\t\t\t{\n\t\t\t\tevent: \"rowSelectionChanged\",\n\t\t\t\thandler: async(data) => \n\t\t\t\t{\n\t\t\t\t\tthis.selectedData.filter(sd => !data.includes(sd)).forEach(fsd => {\n\t\t\t\t\t\tif(fsd.checkbox) fsd.checkbox.checked = false\n\t\t\t\t\t})\n\n\t\t\t\t\tdata.forEach(d => {\n\t\t\t\t\t\tif(d.checkbox) d.checkbox.checked = true\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\tthis.selectedData = data\n\t\t\t\t}\n\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\thandlePaUpdated(projektarbeit) {\n\t\t\tthis.checkAbgabetermineProjektarbeit(projektarbeit)\n\t\t\tthis.$refs.abgabeTable.tabulator.redraw(true)\n\t\t},\n\t\tgetQGateStatusList() {\n\t\t\treturn [\n\t\t\t\tthis.$p.t('abgabetool/c4keinTerminVorhanden'),\n\t\t\t\tthis.$p.t('abgabetool/c4positivBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4negativBenotet'),\n\t\t\t\tthis.$p.t('abgabetool/c4notYetGraded'),\n\t\t\t\tthis.$p.t('abgabetool/c4notSubmitted'),\n\t\t\t\tthis.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t]\t\n\t\t},\n\t\tsortFuncTerminCol(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (a === null || typeof a === \"undefined\") return 1;\n\t\t\tif (b === null || typeof b === \"undefined\") return -1;\n\t\t\t\n\t\t\t// try to handle the prev/next interpretation consistently\n\t\t\t// can only make this wrong UX whise so whatever\n\t\t\tif(column._column.field == 'prevTermin') {\n\t\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs)\n\t\t\t} else if (column._column.field == 'nextTermin') {\n\t\t\t\treturn Math.abs(a.diffMs) - Math.abs(b.diffMs)\n\t\t\t}\n\t\t\t\n\t\t\t// just in case someone reuses this\n\t\t\treturn Math.abs(b.diffMs) - Math.abs(a.diffMs) \n\t\t},\n\t\theaderFilterTerminCol(filterVal, rowVal) {\n\t\t\tif (!rowVal || !rowVal.luxonDate || !rowVal.luxonDate.isValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tconst rowDate = rowVal.luxonDate;\n\n\t\t\tconst toLuxon = (val) => {\n\t\t\t\tif (!val) return null;\n\t\t\t\tlet dt;\n\t\t\t\tif (val instanceof Date) {\n\t\t\t\t\tdt = luxon.DateTime.fromJSDate(val);\n\t\t\t\t} else if (typeof val === \"string\") {\n\t\t\t\t\tdt = luxon.DateTime.fromISO(val);\n\t\t\t\t} else { // fallback\n\t\t\t\t\tdt = luxon.DateTime.fromMillis(Number(val));\n\t\t\t\t}\n\n\t\t\t\treturn dt.isValid ? dt : null;\n\t\t\t};\n\n\t\t\tconst von = toLuxon(filterVal[0]);\n\t\t\tconst bis = toLuxon(filterVal[1]);\n\n\t\t\t// specific day\n\t\t\tif (von && !bis) {\n\t\t\t\treturn rowDate.hasSame(von, \"day\");\n\t\t\t}\n\n\t\t\t// range case\n\t\t\tif (von && bis) {\n\t\t\t\treturn rowDate >= von.startOf(\"day\") && rowDate <= bis.endOf(\"day\");\n\t\t\t}\n\n\t\t\treturn false\n\t\t},\n\t\tsammelMailStudent(param) {\n\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(d => {\n\t\t\t\trecipientList.push(`${d.student_uid}@${this.domain}`)\n\t\t\t})\n\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailStudentBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tsammelMailBetreuer(param) {\n\t\t\t\n\t\t\tconst recipientList = [];\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) recipientList.push(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) recipientList.push(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\t// actually not necessary for email clients but looks better for assistenz if we avoid duplicates here\n\t\t\tconst uniqueRecipients = [...new Set(recipientList)];\n\t\t\tconst subject = this.$p.t('abgabetool/c4sammelmailBetreuerBetreff', [this.selectedStudiengangOption?.bezeichnung]);\n\t\t\tsplitMailsHelper(uniqueRecipients, param.originalEvent, subject, this.$fhcAlert, this.$p)\n\t\t},\n\t\tselectHandler(e, cell) {\n\t\t\tconst row = cell.getRow();\n\n\t\t\tif(row.isSelected()){\n\t\t\t\trow.deselect();\n\t\t\t} else {\n\t\t\t\trow.select();\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tselectAllHandler(e, cell) {\n\t\t\tconst table = cell.getTable();\n\t\t\tconst rows = table.getRows();\n\n\t\t\t// custom select all logic\n\t\t\tconst allowed = rows.filter(r => r.getData().selectable);\n\t\t\tconst selected = allowed.every(r => r.isSelected());\n\n\t\t\tif(selected){\n\t\t\t\tallowed.forEach(r => r.deselect());\n\t\t\t} else {\n\t\t\t\tallowed.forEach(r => r.select());\n\t\t\t}\n\n\t\t\t// stop built-in handler\n\t\t\te.stopPropagation();\n\t\t\treturn false;\n\t\t},\n\t\tcheckQualityGateStatus(projekt) {\n\t\t\tconst qgate1Termine = []\n\t\t\tconst qgate2Termine = []\n\t\t\t\n\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4keinTerminVorhanden')// 'Kein Termin vorhanden'\n\t\t\tprojekt.qgate1StatusRank = 0\n\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4keinTerminVorhanden')\n\t\t\tprojekt.qgate2StatusRank = 0\n\t\t\t\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate1') qgate1Termine.push(termin)\n\t\t\t\tif(termin.paabgabetyp_kurzbz == 'qualgate2') qgate2Termine.push(termin)\n\t\t\t})\n\t\t\t\n\t\t\t// calculate qgateStatusRank and display the highest order status rank of all quality gate termine until one\n\t\t\t// counts as passed, which is just a positive note no matter if anything has been uploaded\n\t\t\t\n\t\t\t// reuse luxon calculated diffMs (termin.datum in relation to today) from previous datestyle check \n\t\t\tqgate1Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate1StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate1StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate1StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate1StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate1StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate1StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate1Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate1StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tqgate2Termine.forEach(qgate => {\n\t\t\t\tif(qgate.note != null && projekt.qgate1StatusRank <= 5) {\n\t\t\t\t\tconst noteOpt = typeof qgate.note !== 'object' ? this.notenOptions.find(opt => opt.note == qgate.note) : qgate.note\n\t\t\t\t\tif(noteOpt.positiv) {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4positivBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 5\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4negativBenotet')\n\t\t\t\t\t\tprojekt.qgate2StatusRank = 4\n\t\t\t\t\t}\n\t\t\t\t} else if (qgate.note == null && projekt.qgate2StatusRank <= 3) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notYetGraded')\n\t\t\t\t\tprojekt.qgate2StatusRank = 3\n\t\t\t\t} else if(qgate.upload_allowed == true && qgate.abgabedatum == null && projekt.qgate2StatusRank <= 2) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notSubmitted')\n\t\t\t\t\tprojekt.qgate2StatusRank = 2\n\t\t\t\t} else if (qgate.upload_allowed == false && qgate.diffMs <= 0 && projekt.qgate2StatusRank <= 1) {\n\t\t\t\t\tprojekt.qgate2Status = this.$p.t('abgabetool/c4notHappenedYet')\n\t\t\t\t\tprojekt.qgate2StatusRank = 1\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tgetItemBezeichnung(item){\n\t\t\tif(!item.bezeichnung) return ''\n\t\t\t\n\t\t\treturn item?.bezeichnung?.bezeichnung ?? item?.bezeichnung\n\t\t},\n\t\tgetItemNote(item) {\n\t\t\t// note can be just a number if it is coming from backend\n\t\t\t// if note was just set it is a note option\n\t\t\tif(!item?.note) return ''\n\t\t\tif(item.note?.bezeichnung) return item.note.bezeichnung\n\t\t\t\n\t\t\tconst notenOption = this.notenOptions.find(note => note.note == item.note)\n\t\t\tif(!notenOption) return item.note\n\t\t\t\n\t\t\treturn notenOption.bezeichnung\n\t\t},\n\t\thandleChangeAbgabetypSerientermin(termin) {\n\t\t\t// if paabgabetype qualgate is selected, fill out kurzbz textfield with bezeichnung of quality gate so users\n\t\t\t// are possibly less confused\n\t\t\tif(termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\ttermin.kurzbz = termin.bezeichnung.bezeichnung\n\t\t\t} else {\n\t\t\t\ttermin.kurzbz = ''\n\t\t\t}\n\t\t},\n\t\tsemesterChanged(e) {\n\t\t\tif(this.$refs.abgabeTable.tabulator) {\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\t\t// TODO: maybe check if existing synergy really works with many filters\n\t\t\t\tconst existing = table.getFilters().filter(f => f.field != 'studiensemester_kurzbz');\n\n\t\t\t\tconst compVal = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '' : e.value.studiensemester_kurzbz\n\t\t\t\tconst compType = e.value.studiensemester_kurzbz == this.$p.t('abgabetool/c4all') ? '!=' : '='\n\t\t\t\tconst newFilter = { field: \"studiensemester_kurzbz\", type: compType, value: compVal };\n\n\t\t\t\t// merge and reapply\n\t\t\t\ttable.setFilter([...existing, newFilter]);\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tcheckAbgabetermineProjektarbeit(projekt) {\n\t\t\tconst now = luxon.DateTime.now()\n\t\t\t\n\t\t\t// calculate Abgabetermin time diff to now and assign last and next to projekt\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\n\t\t\t\ttermin.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz === termin.paabgabetyp_kurzbz)\n\t\t\t\t\n\t\t\t\t// while already looping through each termin, calculate datestyle beforehand\n\t\t\t\ttermin.dateStyle = getDateStyleClass(termin, this.notenOptions)\n\n\t\t\t\tconst date = luxon.DateTime.fromISO(termin.datum).endOf('day')\n\t\t\t\ttermin.luxonDate = date\n\t\t\t\ttermin.diffMs = date.toMillis() - now.toMillis(); // positive = future, negative = past\n\n\t\t\t\tif (termin.diffMs < 0) {\n\t\t\t\t\tif (!projekt.prevTermin ||\n\t\t\t\t\t\ttermin.diffMs > projekt.prevTermin.diffMs // larger (less negative) = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.prevTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t} else if (termin.diffMs > 0) {\n\t\t\t\t\tif (!projekt.nextTermin ||\n\t\t\t\t\t\ttermin.diffMs < projekt.nextTermin.diffMs // smaller positive = closer to now\n\t\t\t\t\t) {\n\t\t\t\t\t\tprojekt.nextTermin = termin;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// seperate check for quality gates\n\t\t\tthis.checkQualityGateStatus(projekt)\n\t\t},\n\t\tloadState() {\n\t\t\treturn JSON.parse(localStorage.getItem(this.abgabeTableOptions.persistenceID) || \"null\");\n\t\t},\n\t\tsaveState(table) {\n\t\t\t// avoid storing state after first restore part happened\n\t\t\tif(!this.stateRestored) return\n\t\t\tconst rawLayout = table.getColumnLayout();\n\t\t\tconst state = {\n\t\t\t\tcolumns: rawLayout.map(col => ({\n\t\t\t\t\tfield: col.field,\n\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\twidth: col.width,\n\t\t\t\t})),\n\t\t\t\tsort: table.getSorters().map(s => ({\n\t\t\t\t\tfield: s.field,\n\t\t\t\t\tdir: s.dir,\n\t\t\t\t})),\n\t\t\t\tfilters: table.getFilters(),\n\t\t\t\theaderFilters: table.getHeaderFilters()\n\t\t\t};\n\t\t\t\n\t\t\tlocalStorage.setItem(this.abgabeTableOptions.persistenceID, JSON.stringify(state));\n\t\t},\n\t\thandleTableBuilt() {\n\t\t\tconst table = this.$refs.abgabeTable.tabulator\n\n\t\t\tthis.tableBuiltResolve()\n\t\t\t\n\t\t\ttable.on(\"columnMoved\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnResized\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnVisibilityChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"filterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"headerFilterChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"dataSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"columnSorted\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\ttable.on(\"sortersChanged\", () => {\n\t\t\t\tthis.saveState(table);\n\t\t\t});\n\n\t\t\tconst saved = this.loadState();\n\n\t\t\ttable.on(\"renderComplete\", () => {\n\t\t\t\tif(!this.stateRestored) {\n\n\t\t\t\t\tif (saved?.columns && !this.colLayoutRestored) {\n\t\t\t\t\t\tconst layout = saved.columns.map(col => ({\n\t\t\t\t\t\t\tfield: col.field,\n\t\t\t\t\t\t\twidth: col.width,\n\t\t\t\t\t\t\tvisible: col.visible,\n\t\t\t\t\t\t\t// add more if needed, but keep it simple\n\t\t\t\t\t\t}));\n\t\t\t\t\t\t\n\t\t\t\t\t\ttable.setColumnLayout(layout);\n\n\t\t\t\t\t\tthis.colLayoutRestored = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.filters && !this.filtersRestored) {\n\t\t\t\t\t\tthis.filtersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\ttable.setFilter(saved.filters);\n\t\t\t\t\t}\n\t\t\t\t\tif (saved?.headerFilters && !this.headerFiltersRestored) {\n\t\t\t\t\t\tthis.headerFiltersRestored = true // instantly avoid retriggers\n\t\t\t\t\t\tfor (let hf of saved.headerFilters) {\n\t\t\t\t\t\t\ttable.setHeaderFilterValue(hf.field, hf.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (saved?.sort?.length && !this.sortRestored) {\n\t\t\t\t\t\tthis.sortRestored = true;\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tconst sortList = saved.sort.map(s => {\n\t\t\t\t\t\t\t\tconst col = table.columnManager.findColumn(s.field);\n\t\t\t\t\t\t\t\tif (!col) {\n\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn { column: col, dir: s.dir };\n\t\t\t\t\t\t\t}).filter(Boolean);\n\n\t\t\t\t\t\t\ttable.setSort(sortList);\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\tthis.stateRestored = true\n\n\t\t\t\t}\n\n\t\t\t});\n\t\t},\n\t\thandleToggleFullscreenDetail() {\n\t\t\tthis.detailIsFullscreen = !this.detailIsFullscreen\n\t\t},\n\t\tgetOptionLabelAbgabetyp(option){\n\t\t\treturn option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStg(option){\n\t\t\treturn option.kurzbzlang + ' ' + option.bezeichnung\n\t\t},\n\t\tgetOptionLabelStudiensemester(option){\n\t\t\treturn option.studiensemester_kurzbz\n\t\t},\n\t\tgetNotenFilterOptionLabel(option) {\n\t\t\treturn option.bezeichnung\t\n\t\t},\n\t\tformatDate(dateParam) {\n\t\t\tif(dateParam === null) return ''\n\t\t\tconst date = new Date(dateParam)\n\t\t\t// handle missing leading 0\n\t\t\tconst padZero = (num) => String(num).padStart(2, '0');\n\n\t\t\tconst month = padZero(date.getMonth() + 1); // Months are zero-based\n\t\t\tconst day = padZero(date.getDate());\n\t\t\tconst year = date.getFullYear();\n\n\t\t\treturn `${day}.${month}.${year}`;\n\t\t},\n\t\tformAction(cell) {\n\t\t\tconst actionButtons = document.createElement('div');\n\t\t\tactionButtons.className = \"d-flex gap-3\"; // you can keep Bootstrap gap if loaded\n\t\t\tactionButtons.style.display = \"flex\";\n\t\t\tactionButtons.style.alignItems = \"stretch\"; // buttons stretch to full height\n\t\t\tactionButtons.style.justifyContent = \"center\";\n\t\t\tactionButtons.style.height = \"100%\"; // full grid cell height\n\n\t\t\tconst val = cell.getValue();\n\n\t\t\tconst createButton = (iconClass, titleKey, clickHandler) => {\n\t\t\t\tconst btn = document.createElement('button');\n\t\t\t\tbtn.className = 'btn btn-outline-secondary';\n\t\t\t\tbtn.style.display = \"flex\";\n\t\t\t\tbtn.style.alignItems = \"center\"; // center icon vertically\n\t\t\t\tbtn.style.justifyContent = \"center\"; // center icon horizontally\n\t\t\t\tbtn.style.height = \"100%\"; // fill parent container height\n\t\t\t\tbtn.style.aspectRatio = \"1 / 1\"; // keep square shape (optional)\n\t\t\t\tbtn.style.padding = \"0\"; // remove extra padding for compactness\n\t\t\t\tif(iconClass == 'fa fa-timeline') btn.style.transform = \"rotate(90deg)\";\n\t\t\t\tbtn.innerHTML = ``;\n\t\t\t\tbtn.title = this.$capitalize(this.$p.t(titleKey));\n\t\t\t\tbtn.addEventListener('click', (e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tclickHandler();\n\t\t\t\t});\n\t\t\t\treturn btn;\n\t\t\t};\n\n\t\t\tactionButtons.append(\n\t\t\t\tcreateButton('fa fa-folder-open', 'abgabetool/c4details', () => this.setDetailComponent(val)),\n\t\t\t\tcreateButton('fa fa-timeline', 'abgabetool/c4termineTimeLine', () => this.openTimeline(val))\n\t\t\t);\n\n\t\t\treturn actionButtons;\n\t\t},\n\n\t\tundoSelection(cell) {\n\t\t\t// checks if cells row is selected and unselects -> imitates columns which dont trigger row selection\n\t\t\t// but actually just revert it after the fact\n\n\t\t\tconst row = cell.getRow()\n\t\t\tif(row.isSelected()) {\n\t\t\t\trow.deselect();\n\t\t\t}\n\t\t},\n\t\tselectionCheck(row) {\n\t\t\tconst data = row.getData()\n\t\t\tif(data?.betreuerart_kurzbz == 'Zweitbegutachter') return false\n\t\t\treturn true\n\t\t},\n\t\tshowDeadlines(){\n\t\t\tconst link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router\n\t\t\t\t+ '/Cis/Abgabetool/Deadlines'\n\t\t\twindow.open(link, '_blank')\n\t\t},\n\t\topenAddSeriesModal() {\n\t\t\tthis.$refs.modalContainerAddSeries.show()\n\t\t},\n\t\taddSeries() {\n\t\t\tconst pids = this.selectedData?.map(projekt => projekt.projektarbeit_id)\n\t\t\t\n\t\t\tconst preserveSelected = [...this.selectedData]\n\t\t\t\n\t\t\tthis.saving = true\n\t\t\tthis.serienTermin.fixtermin = !this.serienTermin.invertedFixtermin\n\t\t\tthis.$api.call(ApiAbgabe.postSerientermin(\n\t\t\t\tthis.serienTermin.datum.toISOString(),\n\t\t\t\tthis.serienTermin.bezeichnung.paabgabetyp_kurzbz,\n\t\t\t\tthis.serienTermin.bezeichnung.bezeichnung,\n\t\t\t\tthis.serienTermin.kurzbz,\n\t\t\t\tthis.serienTermin.upload_allowed,\n\t\t\t\tpids,\n\t\t\t\tthis.serienTermin.fixtermin\n\t\t\t)).then(res => {\n\t\t\t\t\n\t\t\t\tif (res.meta.status === \"success\" && res.data) {\n\t\t\t\t\tthis.$fhcAlert.alertSuccess(this.$p.t('abgabetool/serienTerminGespeichert'))\n\t\t\t\t} else {\n\t\t\t\t\tthis.$fhcAlert.alertError(this.$p.t('abgabetool/errorSerienterminSpeichern'))\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// put new abgaben into projektarbeiten\n\t\t\t\tconst newAbgaben = res.data\n\t\t\t\tpids.forEach(pid => {\n\t\t\t\t\tconst abgabe = newAbgaben.find(abgabe => abgabe.projektarbeit_id == pid)\n\t\t\t\t\t\n\t\t\t\t\tconst pa = this.projektarbeiten.find(pa => pa.projektarbeit_id == pid)\n\t\t\t\t\n\t\t\t\t\tabgabe.bezeichnung = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == abgabe.paabgabetyp_kurzbz)\n\t\t\t\t\t\n\t\t\t\t\tpa.abgabetermine.push(abgabe)\n\t\t\t\t\tpa.abgabetermine.sort((a, b) => new Date(a.datum) - new Date(b.datum))\n\t\t\t\t})\n\t\t\t\t\n\t\t\t\t// reset selection to empty\n\t\t\t\t// this.$refs.abgabeTable.tabulator.deselectRow()\n\t\t\t\tconst table = this.$refs.abgabeTable.tabulator;\n\t\t\t\tconst scrollX = table.rowManager.scrollLeft;\n\t\t\t\tconst scrollY = table.rowManager.scrollTop;\n\t\t\t\t\n\t\t\t\tconst mappedData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\t\ttable.setData(mappedData)\n\t\t\t\ttable.redraw(true)\n\n\t\t\t\tVue.nextTick(()=> {\n\t\t\t\t\tconst table = this.$refs.abgabeTable?.tabulator.element.querySelector('.tabulator-tableholder')\n\t\t\t\t\tif(table) {\n\t\t\t\t\t\ttable.scrollLeft = scrollX;\n\t\t\t\t\t\ttable.scrollTop = scrollY;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.saving = false\n\t\t\t\tthis.selectedData = preserveSelected\n\t\t\t})\n\n\t\t\tthis.$refs.modalContainerAddSeries.hide()\n\t\t},\n\t\tmapProjekteToTableData(projekte) {\n\t\t\t// const now = luxon.DateTime.now();\n\t\t\treturn projekte.map(projekt => {\n\t\t\t\t\n\t\t\t\t// in assistenz context every projektarbeit should be allowed to be selected i guess\n\t\t\t\tprojekt.selectable = true;\n\t\t\t\t\n\t\t\t\tprojekt.prevTermin = null;\n\t\t\t\tprojekt.nextTermin = null;\n\n\t\t\t\tthis.checkAbgabetermineProjektarbeit(projekt)\n\n\t\t\t\tif(this.notenOptions && projekt.note) {\n\t\t\t\t\tconst opt = this.notenOptions.find(n => n.note == projekt.note)\n\t\t\t\t\n\t\t\t\t\t// TODO: mehrsprachig englisch\n\t\t\t\t\tprojekt.note_bez = opt.bezeichnung\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\t...projekt,\n\t\t\t\t\tabgabetermine: projekt.abgabetermine,\n\t\t\t\t\tdetails: {\n\t\t\t\t\t\tstudent_uid: projekt.student_uid,\n\t\t\t\t\t\tprojektarbeit_id: projekt.projektarbeit_id,\n\t\t\t\t\t},\n\t\t\t\t\tpkz: this.buildPKZ(projekt),\n\t\t\t\t\tbeurteilung: projekt.beurteilungLink ?? null,\n\t\t\t\t\tsem: projekt.studiensemester_kurzbz,\n\t\t\t\t\tstg: this.buildStg(projekt),\n\t\t\t\t\tmail: this.buildMailToLink(projekt),\n\t\t\t\t\terstbetreuer: this.buildErstbetreuer(projekt),\n\t\t\t\t\tzweitbetreuer: this.buildZweitbetreuer(projekt),\n\t\t\t\t\ttyp: projekt.projekttyp_kurzbz,\n\t\t\t\t\ttitel: projekt.titel\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\tcreateInfoString(data) {\n\t\t\tlet str = '';\n\n\t\t\tdata.forEach(name => {\n\t\t\t\tstr += name\n\t\t\t\tstr += '; '\n\t\t\t})\n\n\t\t\treturn str\n\t\t},\n\t\tisPastDate(date) {\n\t\t\tconst deadline = luxon.DateTime.fromISO(date, { zone: 'Europe/Vienna' }).endOf('day');\n\t\t\tconst nowInVienna = luxon.DateTime.now().setZone('Europe/Vienna');\n\t\t\treturn nowInVienna > deadline;\n\t\t},\n\t\tsetDetailComponent(details){\n\t\t\tconst pa = this.projektarbeiten.find(projektarbeit => projektarbeit.projektarbeit_id == details.projektarbeit_id)\n\n\t\t\tif(pa?.abgabetermine?.length) {\n\t\t\t\tthis.$api.call(ApiAbgabe.getSignaturStatusForProjektarbeitAbgaben(pa.abgabetermine.map(termin => termin.paabgabe_id), pa.student_uid))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif(res.meta.status === 'success') {\n\t\t\t\t\t\t\tres.data.forEach(paabgabe => {\n\t\t\t\t\t\t\t\tconst termin = pa.abgabetermine.find(abgabe => abgabe.paabgabe_id == paabgabe.paabgabe_id)\n\t\t\t\t\t\t\t\tif(termin && paabgabe.signatur !== undefined) termin.signatur = paabgabe.signatur\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tconst paIsBenotet = pa.note !== null\n\t\t\t\n\t\t\tpa.abgabetermine.forEach(termin => {\n\t\t\t\tif(typeof termin.note !== 'object') {\n\t\t\t\t\ttermin.note = this.allowedNotenOptions.find(opt => opt.note == termin.note)\n\t\t\t\t}\n\n\t\t\t\t// only set this if it has not been set yet and abgabetermin has a note (qgate)\n\t\t\t\tif(!termin.noteBackend && termin.note) {\n\t\t\t\t\ttermin.noteBackend = termin.note\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttermin.file = []\n\n\t\t\t\t// assistenz should be able to edit every abgabe\n\t\t\t\t// update 21-01-2026: actually blocking operations on finished projektarbeiten seems like a decent idea\n\t\t\t\ttermin.allowedToSave = paIsBenotet ? false : true\n\n\t\t\t\t// assistenz are not allowed to delete deadlines with existing submissions\n\t\t\t\ttermin.allowedToDelete = paIsBenotet ? false : !termin.abgabedatum\n\t\t\t\t\n\t\t\t})\n\t\t\t\n\t\t\tconst vorname = pa.vorname ?? pa.student_vorname\n\t\t\tconst nachname = pa.nachname ?? pa.student_nachname\n\t\t\tpa.student = `${vorname} ${nachname}`\n\n\t\t\tthis.selectedProjektarbeit = pa\n\t\t\tthis.$refs.modalContainerAbgabeDetail.show()\n\t\t},\n\t\topenTimeline(val) {\n\t\t\tconst projekt = this.projektarbeiten.find(p => p.projektarbeit_id == val.projektarbeit_id)\n\t\t\tif(!projekt) {\n\n\t\t\t\tthis.$fhcAlert.alertInfo('Keine projektarbeit gefunden')\n\t\t\t\t\n\t\t\t\treturn\n\t\t\t}\n\t\t\tprojekt.abgabetermine.forEach(termin => {\n\t\t\t\t// show note only on termine with abgabetypen which are benotbar\n\t\t\t\tconst terminTypOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == termin.paabgabetyp_kurzbz)\n\t\t\t\ttermin.benotbar = terminTypOpt.benotbar \n\t\t\t})\n\t\t\tthis.timelineProjekt = projekt\n\t\t\tthis.$refs.drawer.show()\n\t\t},\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(!val) return\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\tdetailFormatter(cell) {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tmailFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\ttimelineFormatter() {\n\t\t\treturn '
    ' +\n\t\t\t\t'
    '\n\t\t},\n\t\tbeurteilungFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\t\t\tif(val) {\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    '\n\t\t\t} else return '-'\n\t\t},\n\t\tpkzTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t''+val+'
    '\n\t\t},\n\t\tabgabterminFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\tif(val) {\n\t\t\t\tlet icon = ''\n\t\t\t\tswitch(val.dateStyle) {\n\t\t\t\t\tcase 'verspaetet':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'verpasst':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abzugeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'standard':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'abgegeben':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'beurteilungerforderlich':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'bestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'nichtbestanden':\n\t\t\t\t\t\ticon = ''\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst bezeichnung = val.bezeichnung?.bezeichnung ?? val.bezeichnung\n\t\t\t\t\n\t\t\t\treturn '
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\ticon +\n\t\t\t\t\t'
    ' + \n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'

    '+bezeichnung+' - '+ this.formatDate(val.datum)+'

    ' +\n\t\t\t\t\t'
    '+\n\t\t\t\t\t'
    '\n\n\t\t\t} else {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\t\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tbuildMailToLink(projekt) {\n\t\t\treturn 'mailto:' + projekt.student_uid +'@'+ this.domain\n\t\t},\n\t\tbuildPKZ(projekt) {\n\t\t\treturn `${projekt.student_uid} / ${projekt.matrikelnr}`\n\t\t},\n\t\tbuildStg(projekt) {\n\t\t\treturn (projekt.typ + projekt.kurzbz)?.toUpperCase()\n\t\t},\n\t\tbuildErstbetreuer(projekt) {\n\t\t\tif(projekt.erstbetreuer_full_name) return projekt.erstbetreuer_full_name\n\t\t\treturn projekt.betreuer_vorname + ' ' + projekt.betreuer_nachname\n\t\t},\n\t\tbuildZweitbetreuer(projekt) {\n\t\t\treturn projekt.zweitbetreuer_full_name ?? ''\n\t\t},\n\t\tasync setupData(data){\n\t\t\tthis.projektarbeiten = data[0]\n\t\t\tthis.domain = data[1]\n\t\t\t\n\t\t\tthis.tableData = this.mapProjekteToTableData(this.projektarbeiten)\n\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tthis.$refs.abgabeTable.tabulator.setData(this.tableData);\n\t\t},\n\t\tloadProjektarbeiten(all = false, callback) {\n\t\t\tthis.loading = true\n\t\t\tthis.$api.call(ApiAbgabe.getProjektarbeitenForStudiengang(\n\t\t\t\tthis.selectedStudiengangOption.studiengang_kz,\n\t\t\t\tthis.notenOptionFilter?.benotet ?? 0\n\t\t\t))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t}).finally(() => {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback()\n\t\t\t\t}\n\t\t\t}).finally(()=>{\n\t\t\t\tthis.loading=false\n\t\t\t})\n\t\t},\n\t\tloadAbgaben(details) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.$api.call(ApiAbgabe.getStudentProjektabgaben(details))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tresolve(res)\n\t\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.abgabeTableOptions.height = window.visualViewport.height - rect.top - 80\n\t\t\tthis.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\t\t\t\n\t\t\tawait this.allConfigPromise\n\t\t\t\n\t\t\t// called through notenOptionFilter/selectedStudiengangOption watcher on startup\n\t\t\t// this.loadProjektarbeiten()\n\n\t\t\tthis.calcMaxTableHeight()\n\t\t},\n\t\tgetOptionDisabled(option) {\n\t\t\treturn !option.aktiv\n\t\t},\n\t},\n\tcomputed: {\n\t\temailItems() {\n\t\t\tconst menu = []\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT){\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailStudierendev2', [this.uniqueStudentEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailStudent\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t\tif(this.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER) {\n\t\t\t\tmenu.push({\n\t\t\t\t\tlabel: this.$p.t('abgabetool/c4sendEmailBetreuerv3', [this.uniqueBetreuerEmailCount]),\n\t\t\t\t\tcommand: this.sammelMailBetreuer\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn menu\n\t\t},\n\t\tuniqueBetreuerEmailCount() {\n\t\t\tconst emails = new Set();\n\t\t\t\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.betreuer_mail) emails.add(row.betreuer_mail);\n\t\t\t\tif (row.zweitbetreuer_mail) emails.add(row.zweitbetreuer_mail);\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t},\n\t\tuniqueStudentEmailCount() {\n\t\t\tconst emails = new Set();\n\n\t\t\tthis.selectedData.forEach(row => {\n\t\t\t\tif (row.student_uid) {\n\t\t\t\t\temails.add(row.student_uid); // actually dont need domain for this\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn emails.size;\n\t\t}\n\t},\n\twatch: {\n\t\t'serienTermin.bezeichnung'(newVal) {\n\t\t\tif(newVal?.paabgabetyp_kurzbz === 'qualgate1' || newVal?.paabgabetyp_kurzbz === 'qualgate2') {\n\t\t\t\tthis.serienTermin.kurzbz = newVal.bezeichnung\n\t\t\t}\n\n\t\t\tthis.serienTermin.upload_allowed = newVal.upload_allowed_default\n\t\t},\n\t\tselectedStudiengangOption(newVal, oldVal) {\n\t\t\t// implicitely avoids juggling around promises for created api calls,\n\t\t\t// since we need note & stg flags for loadProjektarbeiten\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tnotenOptionFilter(newVal) {\n\t\t\t// that single where clause is worth a decent load time so rather not filter tabulator but just \n\t\t\t// adapt the qry\n\t\t\tif(this.notenOptionFilter !== null && this.selectedStudiengangOption !== null) {\n\t\t\t\tthis.loadProjektarbeiten()\n\t\t\t}\n\t\t},\n\t\tselectedData(newVal) {\n\t\t\tconst table = this.$refs.abgabeTable?.tabulator\n\t\t\tif(!table) return\n\n\t\t\tconst allRows = table.getRows();\n\n\t\t\tnewVal.forEach(selected => {\n\t\t\t\tconst row = allRows.find(r => {\n\t\t\t\t\tconst data = r.getData()\n\t\t\t\t\tif (data.projektarbeit_id == selected.projektarbeit_id) return r\n\t\t\t\t}) \t\n\t\t\t\t\n\t\t\t\trow.select()\n\t\t\t\tconst cb = row.getElement().children[0]?.children[0]?.children[0]\n\t\t\t\tif(cb) cb.checked = true\n\t\t\t})\n\n\t\t}\n\t},\n\tcreated() {\n\t\tthis.loading = true\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t\t\n\t\t//TODO: SWITCH TO NOTEN API ONCE NOTENTOOL IS IN MASTER TO AVOID DUPLICATE API\n\t\tconst requests = [\n\t\t\tthis.$api.call(ApiAbgabe.getConfig()),\n\t\t\tthis.$api.call(ApiAbgabe.getStudiengaenge()),\n\t\t\tthis.$api.call(ApiStudiensemester.getAllStudiensemesterAndAktOrNext()),\n\t\t\tthis.$api.call(ApiAbgabe.getNoten()),\n\t\t\tthis.$api.call(ApiAbgabe.getPaAbgabetypen())\n\t\t];\n\n\t\tthis.allConfigPromise = Promise.allSettled(requests)\n\t\t\t.then((results) => {\n\t\t\t\t// results is an array of { status: 'fulfilled'|'rejected', value?: any, reason?: any }\n\n\t\t\t\t// 1. Config\n\t\t\t\tif (results[0].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[0].value;\n\t\t\t\t\tthis.turnitin_link = res.data?.turnitin_link;\n\t\t\t\t\tthis.old_abgabe_beurteilung_link = res.data?.old_abgabe_beurteilung_link;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT;\n\t\t\t\t\tthis.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER = res.data?.ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER;\n\t\t\t\t}\n\n\t\t\t\t// 2. Studiengänge\n\t\t\t\tif (results[1].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[1].value;\n\t\t\t\t\tthis.studiengaengeOptions = res.data;\n\t\t\t\t\tif (this.studiengaengeOptions?.length) {\n\t\t\t\t\t\tthis.selectedStudiengangOption = this.stg_kz_prop\n\t\t\t\t\t\t\t? res.data.find(stgOpt => stgOpt.studiengang_kz == this.stg_kz_prop)\n\t\t\t\t\t\t\t: res.data[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 3. Studiensemester\n\t\t\t\tif (results[2].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[2].value;\n\t\t\t\t\tthis.allSem = res.data[0];\n\t\t\t\t\tconst all = { studiensemester_kurzbz: this.$p.t('abgabetool/c4all') };\n\t\t\t\t\tthis.curSem = all;\n\t\t\t\t\tthis.studiensemesterOptions = [all, ...this.allSem];\n\t\t\t\t}\n\n\t\t\t\t// 4. Noten\n\t\t\t\tif (results[3].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[3].value;\n\t\t\t\t\tif (res.meta?.status === 'success') {\n\t\t\t\t\t\tthis.notenOptions = res.data[0];\n\t\t\t\t\t\tthis.allowedNotenOptions = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[1].includes(opt.note)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tthis.notenOptionsNonFinal = this.notenOptions.filter(\n\t\t\t\t\t\t\topt => res.data[2].includes(opt.note)\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.allowedNotenFilterOptions = [\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/keineNoteEingetragen')), benotet: 0 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/c4benotet')), benotet: 1 },\n\t\t\t\t\t\t{ bezeichnung: Vue.computed(() => this.$p.t('abgabetool/showAll')), benotet: -1 }\n\t\t\t\t\t];\n\t\t\t\t\tthis.notenOptionFilter = this.allowedNotenFilterOptions[0];\n\t\t\t\t}\n\n\t\t\t\t// 5. Abgabetypen\n\t\t\t\tif (results[4].status === 'fulfilled') {\n\t\t\t\t\tconst res = results[4].value;\n\t\t\t\t\tthis.abgabeTypeOptions = res.data;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.loading = false;\n\t\t\t});\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\n `,\n};\n\nexport default AbgabetoolAssistenz;\n","import {CoreFilterCmpt} from \"../../../components/filter/Filter.js\";\nimport ApiAbgabe from '../../../api/factory/abgabe.js'\n\nexport const DeadlineOverview = {\n\tname: \"DeadlineOverview\",\n\tcomponents: {\n\t\tCoreFilterCmpt,\n\t},\n\tprops: {\n\t\tperson_uid_prop: {\n\t\t\tdefault: null\t\n\t\t},\n\t\tviewData: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t\tdefault: () => ({name: '', uid: ''}),\n\t\t\tvalidator(value) {\n\t\t\t\treturn value && value.name && value.uid\n\t\t\t}\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfullName: null, // TODO: fetch this somewhere\n\t\t\tdeadlines: null,\n\t\t\ttabulatorUuid: Vue.ref(0),\n\t\t\ttableBuiltResolve: null,\n\t\t\ttableBuiltPromise: null,\n\t\t\tphrasenPromise: null,\n\t\t\tphrasenResolved: false,\n\t\t\tdeadlineTableOptions: {\n\t\t\t\theight: 700,\n\t\t\t\tindex: 'projektarbeit_id',\n\t\t\t\tlayout: 'fitColumns',\n\t\t\t\tplaceholder: Vue.computed(() => this.$p.t('global/noDataAvailable')),\n\t\t\t\tcolumns: [\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zieldatumv2'))), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4fixterminv4'))), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabetyp'))), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabekurzbzv2'))), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('person/studentIn'))), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},\n\t\t\t\t\t{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4sem'))), field: 'semester', formatter: this.centeredTextFormatter, widthGrow: 1}\n\t\t\t\t],\n\t\t\t\tpersistence: false,\n\t\t\t},\n\t\t\tdeadlineTableEventHandlers: [{\n\t\t\t\tevent: \"tableBuilt\",\n\t\t\t\thandler: async () => {\n\t\t\t\t\tthis.tableBuiltResolve()\n\t\t\t\t}\n\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tevent: \"cellClick\",\n\t\t\t\t\thandler: async (e, cell) => {\n\n\t\t\t\t\t\tif(cell.getColumn().getField() === \"details\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val.mode === 'detailTermine') {\n\t\t\t\t\t\t\t\tthis.setDetailComponent(cell.getValue())\n\t\t\t\t\t\t\t} else if (val.mode === 'beurteilungDownload') {\n\t\t\t\t\t\t\t\tconst pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\t// const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id\n\t\t\t\t\t\t\t\twindow.open(pdfExportLink, '_blank')\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if (cell.getColumn().getField() === \"beurteilung\") {\n\t\t\t\t\t\t\tconst val = cell.getValue()\n\n\t\t\t\t\t\t\tif(val != '-') window.open(val, '_blank')\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.stopPropagation()\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]};\n\t},\n\tmethods: {\n\t\tcenteredTextFormatter(cell) {\n\t\t\tconst val = cell.getValue()\n\n\t\t\treturn '
    ' +\n\t\t\t\t'

    '+val+'

    '\n\t\t},\n\t\ttableResolve(resolve) {\n\t\t\tthis.tableBuiltResolve = resolve\n\t\t},\n\t\tloadDeadlines() {\n\t\t\tthis.$api.call(ApiAbgabe.fetchDeadlines(this.person_uid_prop ?? null))\n\t\t\t\t.then(res => {\n\t\t\t\t\tif(res?.data) this.setupData(res.data)\n\t\t\t\t})\n\t\t},\n\t\tsetupData(data) {\n\t\t\tthis.deadlines = data\n\t\t\t\n\t\t\tthis.deadlines.forEach(dl => {\n\t\t\t\tdl.student = (dl.stud_titelpre ? (dl.stud_titelpre + ' ') :'') + dl.stud_vorname + ' ' + dl.stud_nachname + (dl.stud_titelpost ? (' ' + dl.stud_titelpost) :'')\n\t\t\t\tdl.fixterminstring = dl.fixtermin ? this.$p.t('abgabetool/c4yes') : this.$p.t('abgabetool/c4no')\n\t\t\t})\n\n\t\t\tthis.$refs.deadlineTable.tabulator.setColumns(this.deadlineTableOptions.columns)\n\t\t\tthis.$refs.deadlineTable.tabulator.setData(this.deadlines);\n\t\t},\n\t\thandleUuidDefined(uuid) {\n\t\t\tthis.tabulatorUuid = uuid\n\t\t},\n\t\tcalcMaxTableHeight() {\n\t\t\tconst tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''\n\t\t\tconst tableDataSet = document.getElementById('filterTableDataset' + tableID);\n\t\t\tif(!tableDataSet) return\n\t\t\tconst rect = tableDataSet.getBoundingClientRect();\n\n\t\t\tthis.deadlineTableOptions.height = window.visualViewport.height - rect.top - 30\n\t\t\tthis.$refs.deadlineTable.tabulator.setHeight(this.deadlineTableOptions.height)\n\t\t},\n\t\tasync setupMounted() {\n\t\t\tthis.tableBuiltPromise = new Promise(this.tableResolve)\n\t\t\tawait this.tableBuiltPromise\n\n\t\t\tthis.loadDeadlines()\n\t\t\tthis.calcMaxTableHeight()\n\t\t}\n\t},\n\twatch: {\n\n\t},\n\tcomputed: {\n\n\t},\n\tcreated() {\n\t\tthis.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])\n\t\tthis.phrasenPromise.then(()=> {this.phrasenResolved = true})\n\t},\n\tmounted() {\n\t\tthis.setupMounted()\n\t},\n\ttemplate: `\n\t\t

    {{$p.t('abgabetool/deadlinesTitle')}} {{ fullName ? ('-' + fullName) : ''}}

    \n\t\t
    \n\t\t\t\n\t\t \n `,\n};\n\nexport default DeadlineOverview;\n","import LvUebersicht from \"../Mylv/LvUebersicht.js\";\n\n\nexport default {\n\tdata(){\n\t\treturn {\n\t\t\tstudienSemester :[],\n\t\t\tselectedStudiensemester: null,\n\t\t\tstudiengaenge:[],\n\t\t\tselectedStudiengang:null,\n\t\t\tstudienOrdnung: [],\n\t\t\tselectedStudienordnung: null,\n\t\t\tsemester:[],\n\t\t\tselectedSemester:null,\n\t\t\tlehrveranstaltungen: [],\n\t\t\tselectedLehrveranstaltung: null,\n\t\t\tmenu:null,\n\t\t}\n\t},\n\tprovide(){\n\t\treturn {\n\t\t\tstudium_studiengang : Vue.computed(()=> this.selectedStudiengang),\n\t\t\tstudium_studiensemester: Vue.computed(() => this.selectedStudiensemester),\n\t\t\tstudium_semester: Vue.computed(() => this.selectedSemester),\n\t\t\tstudium_studienordnung: Vue.computed(() => this.selectedStudienordnung),\n\n\t\t}\n\t},\n\tcomponents: {\n\t\tLvUebersicht,\n\t},\n\twatch:{\n\t\tselectedStudiensemester: function(newVal, oldVal){\n\t\t\tif(newVal && newVal != oldVal){\n\t\t\t\tconst studiensemester =this.getDataFromLocalStorage(\"sudiensemester\");\n\t\t\t\tif (newVal && (!studiensemester || (studiensemester && studiensemester != newVal))){\n\t\t\t\t\tthis.storeDataToLocalStorage(\"sudiensemester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedSemester: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst semester = this.getDataFromLocalStorage(\"semester\");\n\t\t\t\tif (!semester || (semester && semester != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"semester\", newVal);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudiengang: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studiengang = this.getDataFromLocalStorage(\"studiengang\");\n\t\t\t\tif (!studiengang || (studiengang && studiengang != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studiengang\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tselectedStudienordnung: function (newVal, oldVal) {\n\t\t\tif (newVal && newVal != oldVal) {\n\t\t\t\tconst studienordnung = this.getDataFromLocalStorage(\"studienordnung\");\n\t\t\t\tif (!studienordnung || (studienordnung && studienordnung != newVal)) {\n\t\t\t\t\tthis.storeDataToLocalStorage(\"studienordnung\", JSON.stringify(newVal));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods:{\n\t\tchangeStudiensemester(value){\n\t\t\tlet studiensemester = this.$refs.studiensemester;\n\t\t\tstudiensemester.selectedIndex = (studiensemester.selectedIndex + value + studiensemester.options.length) % studiensemester.options.length;\n\t\t\tthis.changeSelectedStudienSemester(studiensemester.value);\n\t\t},\n\t\tchangeStudiengang(value) {\n\t\t\tlet studiengang = this.$refs.studiengaenge;\n\t\t\tstudiengang.selectedIndex = (studiengang.selectedIndex + value + studiengang.options.length) % studiengang.options.length;\n\t\t\tthis.changeSelectedStudienGang(studiengang.value);\n\t\t},\n\t\tchangeSemester(value) {\n\t\t\tlet semester = this.$refs.semester;\n\t\t\tsemester.selectedIndex = (semester.selectedIndex + value + semester.options.length) % semester.options.length;\n\t\t\tthis.changeSelectedSemester(semester.value);\n\t\t},\n\t\tchangeStudienordnung(value) {\n\t\t\tlet studienordnung = this.$refs.studienordnung;\n\t\t\tlet newSelectIndex = (studienordnung.selectedIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\tif(studienordnung.options[newSelectIndex].disabled){\n\t\t\t\tnewSelectIndex = (newSelectIndex + value + studienordnung.options.length) % studienordnung.options.length;\n\t\t\t}\n\t\t\tstudienordnung.selectedIndex = newSelectIndex;\n\t\t\tthis.changeSelectedStudienPlan(studienordnung.value);\n\t\t},\n\t\t\n\t\tstoreDataToLocalStorage(key,value){\n\t\t\tlocalStorage.setItem(key, value);\n\t\t},\n\t\tgetDataFromLocalStorage(key){\n\t\t\tconst value = localStorage.getItem(key);\n\t\t\treturn value;\n\t\t},\n\t\tchangeSelectedStudienSemester(studiensemester_kurzbz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester_kurzbz, this.selectedStudiengang, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienGang(studiengang_kz) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, studiengang_kz, this.selectedSemester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedSemester(semester) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, semester, this.selectedStudienordnung)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\tchangeSelectedStudienPlan(studienplan_id) {\n\t\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(this.selectedStudiensemester, this.selectedStudiengang, this.selectedSemester, studienplan_id)\n\t\t\t\t.then(data => data.data)\n\t\t\t\t.then(res => {\n\t\t\t\t\tthis.extractPropertyValues(res);\n\t\t\t\t})\n\t\t},\n\t\topenLvUebersicht(lehrveranstaltung) {\n\t\t\tthis.selectedLehrveranstaltung = lehrveranstaltung;\n\t\t\t//convert lehrveranstaltung properties for compatibility with LvPlan LvModal\n\t\t\tthis.selectedLehrveranstaltung.type =\"lehreinheit\";\n\t\t\tthis.selectedLehrveranstaltung.lehreinheit_id = this.selectedLehrveranstaltung.lehrveranstaltung_id;\n\t\t\tif(this.selectedLehrveranstaltung){\n\t\t\t\tVue.nextTick(()=>{\n\t\t\t\t\tthis.$refs.lvUebersicht.show();\n\t\t\t\t})\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tsortStudienSemester(studienSemester){\n\t\t\tlet regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tstudienSemester.sort((sem1,sem2)=>{\n\t\t\t\tlet [sem1Match, sem1Semester, sem1Year] = sem1.studiensemester_kurzbz.match(regex);\n\t\t\t\tlet [sem2Match, sem2Semester, sem2Year] = sem2.studiensemester_kurzbz.match(regex);\n\t\t\t\tif(sem1Year == sem2Year){\n\t\t\t\t\treturn sem1Semester > sem2Semester? -1:1;\n\t\t\t\t}\n\t\t\t\treturn sem1Year > sem2Year? -1:1;\n\t\t\t})\n\t\t},\n\t\tsetHash(val) {\n\t\t\t// TODO: make this a router param to enable history\n\t\t\tlocation.hash = val;\n\t\t},\n\t\textractPropertyValues(res){\n\t\t\tlet { studienSemester, studiengang, semester, studienplan, lehrveranstaltungen } = res;\n\t\t\tthis.sortStudienSemester(studienSemester.all);\n\t\t\tthis.studienSemester = studienSemester.all;\n\t\t\tthis.selectedStudiensemester = studienSemester.preselected.studiensemester_kurzbz;\n\n\t\t\tthis.studiengaenge = studiengang.all;\n\t\t\tthis.selectedStudiengang = studiengang.preselected?.studiengang_kz;\n\n\t\t\tthis.semester = semester.all;\n\t\t\tthis.selectedSemester = semester?.preselected;\n\n\t\t\tthis.studienOrdnung = studienplan.all;\n\t\t\tthis.selectedStudienordnung = studienplan.preselected?.studienplan_id;\n\n\t\t\tthis.lehrveranstaltungen = lehrveranstaltungen;\n\t\t\tthis.lehrveranstaltungen.sort((lv1, lv2) => {\n\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn 1;\n\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.lehrveranstaltungen.forEach((lehrveranstaltung)=>{\n\t\t\t\tlehrveranstaltung.lehrveranstaltungen.sort((lv1,lv2)=>{\n\t\t\t\t\tif (lv1.bezeichnung.toLowerCase() > lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t} else if (lv1.bezeichnung.toLowerCase() < lv2.bezeichnung.toLowerCase()) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t},\n\t\tstudienordnungTitel(studienordnung){\n\t\t\tif(!studienordnung) return \"\";\n\t\t\treturn `${studienordnung?.bezeichnung}-${studienordnung?.orgform_kurzbz} ( ${studienordnung?.orgform_bezeichnung}, ${studienordnung?.sprache} )`;\n\t\t},\n\t\tstudiengangTitel(studiengang) {\n\t\t\tif (!studiengang) return \"\";\n\t\t\treturn `${studiengang?.kurzbzlang} (${studiengang?.bezeichnung})`;\n\t\t},\n\t\tstudiensemesterTitel(studiensemester){\n\t\t\tif (!studiensemester) return \"\";\n\t\t\tlet studiensemester_regex = new RegExp(/^(WS|SS)([0-9]{4})/);\n\t\t\tlet match = studiensemester.match(studiensemester_regex);\n\t\t\tswitch(match[1]){\n\t\t\t\tcase \"WS\":\n\t\t\t\t\treturn `Wintersemester ${match[2]}`;\n\t\t\t\tcase \"SS\":\n\t\t\t\t\treturn `Sommersemester ${match[2]}`;\t\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${studiensemester}`;\n\t\t\t}\n\t\t}\n\t},\n\n\tcomputed:{\n\t\tselectedLehrveranstaltungTitel(){\n\t\t\tconst studiengang = this.studiengaenge.find((studiengang) => studiengang.studiengang_kz == this.selectedStudiengang);\n\t\t\treturn `${this.selectedLehrveranstaltung?.bezeichnung} ${this.selectedLehrveranstaltung?.lehrform_kurzbz} / ${studiengang.kurzbzlang}-${this.selectedSemester} ${this.selectedLehrveranstaltung?.orgform_kurzbz} (${this.selectedStudiensemester})`;\n\t\t},\n\t\tcomputedStudienOrdnung(){\n\t\t\tif(!this.studienOrdnung) return null;\n\t\t\treturn Object.values(this.studienOrdnung).reduce((carry, item)=>{\n\t\t\t\tif(!carry[item.bezeichnung]){\n\t\t\t\t\tcarry[item.bezeichnung] = [];\n\t\t\t\t}\n\t\t\t\tcarry[item.bezeichnung].push(item);\n\t\t\t\treturn carry;\n\t\t\t},{});\n\t\t},\n\t\tcomputedStudienOrdnungSelectValues() {\n\t\t\tif (!this.computedStudienOrdnung) return null;\n\t\t\tlet result = [];\n\t\t\tObject.entries(this.computedStudienOrdnung).forEach(([key,value])=>{\n\t\t\t\tresult.push({\n\t\t\t\t\tbezeichnung: `Studienordnung: ${key}`,\n\t\t\t\t\tdisabled: true,\n\t\t\t\t});\n\t\t\t\tvalue.forEach((studienplan)=>{\n\t\t\t\t\tresult.push({\n\t\t\t\t\t\tstudienplan:studienplan,\n\t\t\t\t\t\tdiabled: false,\n\t\t\t\t\t\tbezeichnung: `${studienplan?.bezeichnung}-${studienplan?.orgform_kurzbz} ( ${studienplan?.orgform_bezeichnung}, ${studienplan?.sprache} )`\n\t\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t},\n\t\n\tcreated(){\n\n\t\tconst studiensemester = this.getDataFromLocalStorage(\"sudiensemester\") ?? undefined;\n\t\tconst studiengang = JSON.parse(this.getDataFromLocalStorage(\"studiengang\")) ?? undefined;\n\t\tconst semester = this.getDataFromLocalStorage(\"semester\") ?? undefined;\n\t\tconst studienordnung = JSON.parse(this.getDataFromLocalStorage(\"studienordnung\")) ?? undefined;\n\n\t\t// only fetch default data if no data is stored in the local storage\n\t\t\n\t\tthis.$fhcApi.factory.studium.getAllStudienSemester(studiensemester, studiengang, semester, studienordnung)\n\t\t.then(data => data.data)\n\t\t.then(res => {\n\t\t\tthis.extractPropertyValues(res);\n\t\t})\n\n\t},\n\ttemplate: `\n\t
    \n\t

    Studium

    \n\t
    \n\t\n\t\t\n\t\n\t
    \n\t\t
    \n\t\t
    Studiensemester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studiengang:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Semester:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\n\t\t
    \n\t\t
    Studienordnung:
    \n\t\t
    \n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
    \n\t\t
    \n\t
    \n\n\t
    \n\n\t
    \n\t\n\t
    \n\n\n\t
    \n\t\n\t`\n};","\nexport default {\n\t\t\n\tloadRenderers() {\n\t\treturn {\n\t\t\tmethod: 'get',\n\t\t\turl: '/api/frontend/v1/RendererLoader/GetRenderers',\n\t\t\tparams: {\n\t\t\t}\n\t\t};\n\t},\n}","/**\n * Copyright (C) 2025 fhcomplete.org\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program. If not, see .\n */\n\nexport default {\n\tinfo(app, path) {\n\t\treturn {\n\t\t\tmethod: 'post',\n\t\t\turl: '/api/frontend/v1/RouteInfo/info',\n\t\t\tparams: {\n\t\t\t\tapp: app,\n\t\t\t\tpath: path\n\t\t\t}\n\t\t};\n\t}\n};","import FhcDashboard from '../../components/Dashboard/Dashboard.js';\nimport PluginsPhrasen from '../../plugins/Phrasen.js';\nimport Theme from '../../plugins/Theme.js';\nimport contrast from '../../directives/contrast.js';\nimport {setScrollbarWidth} from \"../../helpers/CssVarCalcHelpers.js\";\nimport LvPlan from \"../../components/Cis/LvPlan/Lehrveranstaltung.js\";\nimport MyLvPlan from \"../../components/Cis/LvPlan/Personal.js\";\nimport MylvStudent from \"../../components/Cis/Mylv/Student.js\";\nimport Profil from \"../../components/Cis/Profil/Profil.js\";\nimport Raumsuche from \"../../components/Cis/Raumsuche/Raumsuche.js\";\nimport CmsNews from \"../../components/Cis/Cms/News.js\";\nimport CmsContent from \"../../components/Cis/Cms/Content.js\";\nimport Info from \"../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js\";\nimport RoomInformation, {DEFAULT_MODE_RAUMINFO} from \"../../components/Cis/Mylv/RoomInformation.js\";\nimport AbgabetoolStudent from \"../../components/Cis/Abgabetool/AbgabetoolStudent.js\";\nimport AbgabetoolMitarbeiter from \"../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js\";\nimport AbgabetoolAssistenz from \"../../components/Cis/Abgabetool/AbgabetoolAssistenz.js\";\nimport DeadlineOverview from \"../../components/Cis/Abgabetool/DeadlineOverview.js\";\nimport Studium from \"../../components/Cis/Studium/Studium.js\";\n\nimport ApiRenderers from '../../api/factory/renderers.js';\nimport ApiRouteInfo from '../../api/factory/routeinfo.js';\nimport {capitalize} from \"../../helpers/StringHelpers.js\";\n\nconst ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\\/\\/)(.*?\\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;\n\nconst router = VueRouter.createRouter({\n\thistory: VueRouter.createWebHistory(`/${ciPath}`),\n\troutes: [\n\t\t{\n\t\t\tpath: `/Cis/Studium`,\n\t\t\tname: 'Studium',\n\t\t\tcomponent: Studium,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil/View/:uid`,\n\t\t\tname: 'ProfilView',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Profil`,\n\t\t\tname: 'Profil',\n\t\t\tcomponent: Profil,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Student/:student_uid_prop?`,\n\t\t\tname: 'AbgabetoolStudent',\n\t\t\tcomponent: AbgabetoolStudent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Mitarbeiter`,\n\t\t\tname: 'AbgabetoolMitarbeiter',\n\t\t\tcomponent: AbgabetoolMitarbeiter,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Assistenz/:stg_kz_prop?`,\n\t\t\tname: 'AbgabetoolAssistenz',\n\t\t\tcomponent: AbgabetoolAssistenz,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Abgabetool/Deadlines/:person_uid_prop?`,\n\t\t\tname: 'DeadlineOverview',\n\t\t\tcomponent: DeadlineOverview,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/Raumsuche`,\n\t\t\tname: 'Raumsuche',\n\t\t\tcomponent: Raumsuche,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\tpath: \"/CisVue/Cms/getRoomInformation/:ort_kurzbz\",\n\t\t\tname: \"RoomInformationOld\",\n\t\t\tcomponent: RoomInformation,\n\t\t\tredirect: (to) => {\n\t\t\t\treturn { // redirect to longer Rauminfo url and map params\n\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\tparams: { // in this case always populate other params since they are not optional\n\t\t\t\t\t\tort_kurzbz: to.params.ort_kurzbz,\n\t\t\t\t\t\tmode: DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\tfocus_date: new Date().toISOString().split(\"T\")[0]\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/getRoomInformation/:mode/:focus_date/:ort_kurzbz`,\n\t\t\tname: 'RoomInformation',\n\t\t\tcomponent: RoomInformation,\n\t\t\tprops: (route) => { // validate and set mode/focus date if for some reason missing\n\t\t\t\tconst validModes = [\"Month\", \"Week\", \"Day\"];\n\n\t\t\t\t// check mode string\n\t\t\t\tconst mode = route.params.mode &&\n\t\t\t\tvalidModes.includes(route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase())\n\t\t\t\t\t? route.params.mode.charAt(0).toUpperCase() + route.params.mode.slice(1).toLowerCase()\n\t\t\t\t\t: DEFAULT_MODE_RAUMINFO;\n\n\t\t\t\t// default to today date if not provided\n\t\t\t\tconst d = new Date(route.params.focus_date)\n\t\t\t\tconst focus_date = !isNaN(d) ? route.params.focus_date : new Date().toISOString().split(\"T\")[0];\n\n\t\t\t\t// for consistency reasons format the props into one object but actually use a new name to we dont collide with\n\t\t\t\t// existing viewData declaration written from codeigniter 3 into routerview tag\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\tbeforeEnter: (to, from, next) => {\n\t\t\t\t// missing mode or focus_date -> set defaults\n\t\t\t\tif (!to.params.mode || !to.params.focus_date) {\n\t\t\t\t\tnext({\n\t\t\t\t\t\tname: \"RoomInformation\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tmode: to.params.mode || DEFAULT_MODE_RAUMINFO,\n\t\t\t\t\t\t\tfocus_date: to.params.focus_date || new Date().toISOString().split(\"T\")[0],\n\t\t\t\t\t\t\tort_kurzbz: route.params.ort_kurzbz\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/Content/:content_id`,\n\t\t\tname: 'Content',\n\t\t\tcomponent: CmsContent,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/CisVue/Cms/News`,\n\t\t\tname: 'News',\n\t\t\tcomponent: CmsNews,\n\t\t\tprops: true\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/:studiensemester?`,\n\t\t\tname: 'MyLv',\n\t\t\tcomponent: MylvStudent,\n\t\t\tprops: true,\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLv/Info/:studien_semester/:lehrveranstaltung_id`,\n\t\t\tname: 'LvInfo',\n\t\t\tcomponent: Info,\n\t\t\tprops: true\n\t\t},\n\t\t// Redirect old links to new format\n\t\t{\n\t\t\t// only trigger on first param being numeric to avoid paths like \"LvPlan/Month\" entering here\n\t\t\tpath: \"/Cis/LvPlan/:lv_id(\\\\d+)\", \n\t\t\tname: \"LvPlanOld\",\n\t\t\tcomponent: LvPlan,\n\t\t\tredirect(to) {\n\t\t\t\tconst route = Vue.unref(router.currentRoute);\n\t\t\t\tconst { mode, focus_date } = route.params; // keep mode and focus_date if available\n\t\t\t\treturn { // redirect to longer LvPlan url and map params\n\t\t\t\t\tname: \"LvPlan\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tmode,\n\t\t\t\t\t\tfocus_date,\n\t\t\t\t\t\tlv_id: to.params.lv_id\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/LvPlan/:mode?/:focus_date?/:lv_id?`,\n\t\t\tname: 'LvPlan',\n\t\t\tcomponent: LvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis/MyLvPlan/:mode?/:focus_date?`,\n\t\t\tname: 'MyLvPlan',\n\t\t\tcomponent: MyLvPlan,\n\t\t\tprops(route) {\n\t\t\t\treturn {\n\t\t\t\t\tpropsViewData: route.params\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpath: `/Cis4`,\n\t\t\tname: 'Cis4',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: `/`,\n\t\t\tname: 'FhcDashboard',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t},\n\t\t{\n\t\t\tpath: '/:pathMatch(.*)*',\n\t\t\tname: 'Fallback',\n\t\t\tcomponent: FhcDashboard,\n\t\t\tprops: {dashboard: 'CIS'},\n\t\t\tredirect: () => {\n\t\t\t\treturn {\n\t\t\t\t\tname: \"Cis4\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tdashboard: 'CIS'\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t]\n})\n\nconst app = Vue.createApp({\n\tname: 'FhcApp',\n\tdata: () => ({\n\t\tappSideMenuEntries: {},\n\t\trenderers: null,\n\t}),\n\tcomponents: {},\n\tcomputed: {\n\t\tisMobile() {\n\t\t\tconst smallScreen = window.matchMedia(\"(max-width: 767px)\").matches;\n\t\t\tconst touchCapable = (\"ontouchstart\" in window) || navigator.maxTouchPoints > 0;\n\t\t\treturn smallScreen;// && touchCapable;\n\t\t}\t\n\t},\n\tprovide() {\n\t\treturn { // provide injectable & watchable language property\n\t\t\tlanguage: Vue.computed(() => this.$p.user_language),\n\t\t\trenderers: Vue.computed(() => this.renderers),\n\t\t\tisMobile: this.isMobile\n\t\t}\t\n\t},\n\tmethods: {\n\t\tisInternalRoute(href) {\n\t\t\tconst internalBase = window.location.origin\n\t\t\treturn href.startsWith(internalBase);\n\t\t},\n\t\thandleClick(event) {\n\t\t\tconst target = event.target.closest('a');\n\n\t\t\tif(target?.id == 'skiplink') return\n\t\t\tif (target && this.isInternalRoute(target.href)) {\n\t\t\t\tconst url = new URL(target.href)\n\t\t\t\t\n\t\t\t\tconst path = url.pathname\n\t\t\t\tconst base = this.$router.options.history.base\n\t\t\t\tconst route = path.replace(base, '') || '/'\n\n\t\t\t\t// let click event propagate normally if we dont route internally\n\t\t\t\tconst res = this.$router.resolve(route)\n\t\t\t\tif(!res?.matched?.length || res.name === 'Fallback') return\n\t\t\t\t\n\t\t\t\tevent.preventDefault(); // Prevent browser navigation\n\t\t\t\t\n\t\t\t\tif(this.isMobile) { // toggle the menu\n\t\t\t\t\tconst navMain = document.getElementById('nav-main');\n\t\t\t\t\t// fix unwanted toggle from off to on for some links on mobile\n\t\t\t\t\tif(navMain.classList.contains('show')){\n\t\t\t\t\t\tdocument.getElementById('nav-main-btn').click();\n\t\t\t\t\t} \n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.$router.push(route);\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t},\n\tasync created(){\n\t\t\n\t\tawait this.$api\n\t\t\t.call(ApiRenderers.loadRenderers())\n\t\t\t.then(res => res.data)\n\t\t\t.then(data => {\n\t\t\t\tfor (let rendertype of Object.keys(data)) {\n\t\t\t\t\tlet modalTitle = null;\n\t\t\t\t\tlet modalContent = null;\n\t\t\t\t\tlet calendarEvent = null;\n\t\t\t\t\tif (data[rendertype].modalTitle)\n\t\t\t\t\t\tmodalTitle = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalTitle)));\n\t\t\t\t\tif (data[rendertype].modalContent) \t\n\t\t\t\t\t\tmodalContent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].modalContent)));\n\t\t\t\t\tif (data[rendertype].calendarEvent) \t\n\t\t\t\t\t\tcalendarEvent = Vue.markRaw(Vue.defineAsyncComponent(() => import(data[rendertype].calendarEvent)));\n\n\t\t\t\t\tif (data[rendertype].calendarEventStyles){\n\t\t\t\t\t\tvar head = document.head;\n\t\t\t\t\t\tif(!head.querySelector(`link[href=\"${data[rendertype].calendarEventStyles}\"]`)){\n\t\t\t\t\t\t\tvar link = document.createElement(\"link\");\n\t\t\t\t\t\t\tlink.type = \"text/css\";\n\t\t\t\t\t\t\tlink.rel = \"stylesheet\";\n\t\t\t\t\t\t\tlink.href = data[rendertype].calendarEventStyles;\n\t\t\t\t\t\t\thead.appendChild(link);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(this.renderers === null) {\n\t\t\t\t\t\tthis.renderers = {};\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.renderers[rendertype]) {\n\t\t\t\t\t\tthis.renderers[rendertype] = {}\n\t\t\t\t\t}\n\t\t\t\t\tthis.renderers[rendertype].modalTitle = modalTitle;\n\t\t\t\t\tthis.renderers[rendertype].modalContent = modalContent;\n\t\t\t\t\tthis.renderers[rendertype].calendarEvent = calendarEvent;\n\t\t\t\t}\n\t\t\t});\n\t},\n\tmounted() {\n\t\tdocument.addEventListener('click', this.handleClick);\n\t\t\n\t},\n\tbeforeUnmount() {\n\t\tdocument.removeEventListener('click', this.handleClick);\n\t},\n});\n\n// kind of a bandaid for bad css on some pages to avoid horizontal scroll\nsetScrollbarWidth();\napp.config.globalProperties.$capitalize = capitalize;\n\nFhcApps.router.makeExtendable(router);\nFhcApps.makeExtendable(app);\n\napp.use(router);\napp.use(primevue.config.default, {\n\tzIndex: {\n\t\toverlay: 9000,\n\t\ttooltip: 8000\n\t}\n})\napp.directive('tooltip', primevue.tooltip);\napp.use(PluginsPhrasen);\napp.use(Theme);\napp.directive('contrast', contrast);\napp.mount('#fhccontent');\n\nrouter.afterEach((to, from, failure) => {\n\tapp.config.globalProperties.$api.call(ApiRouteInfo.info('cis4', to.fullPath));\n});","// Create a temporary div element, set styles to ensure it's scrollable and off-screen, get scrollbar width from that\nfunction getScrollbarWidth() {\n\tconst div = document.createElement('div');\n\n\tdiv.style.position = 'absolute';\n\tdiv.style.top = '-9999px';\n\tdiv.style.width = '100px';\n\tdiv.style.height = '100px';\n\tdiv.style.overflow = 'scroll';\n\n\tdocument.body.appendChild(div);\n\tconst scrollbarWidth = div.offsetWidth - div.clientWidth;\n\tdocument.body.removeChild(div);\n\n\treturn scrollbarWidth;\n}\n\n// Detect the browser and set a CSS variable for the scrollbar width since chrome scrollbars mess with 100vw/vh css\nexport function setScrollbarWidth() {\n\tconst isChromium = /Chrome/.test(navigator.userAgent);\n\tconst isFirefox = /Firefox/.test(navigator.userAgent);\n\n\tif (isChromium) {\n\t\tconst width = getScrollbarWidth() + 'px';\n\t\tdocument.body.style.setProperty('--scrollbar-width', width); // Set the value for Chrome\n\t} else if (isFirefox) {\n\t\tdocument.body.style.setProperty('--scrollbar-width', '0px'); // Set the value for Firefox or adjust as needed\n\t}\n}","export function capitalize(string) {\n\tif (!string) return '';\n\treturn string[0].toUpperCase() + string.slice(1);\n}"],"names":["BsModal","name","data","modal","fullscreen","props","backdrop","type","Boolean","String","default","validator","value","includes","focus","keyboard","noCloseBtn","dialogClass","Array","Object","headerClass","bodyClass","footerClass","allowFullscreenExpand","emits","methods","dispose","this","handleUpdate","hide","show","relatedTarget","toggle","toggleFullscreen","$emit","mounted","$refs","bootstrap","Modal","popup","body","options","title","footer","slots","undefined","includedPrimevue","primevue","Promise","resolve","reject","instance","Vue","createApp","setup","h","class","ref","unmount","beforeUnmount","result","unmounted","wrapper","parentElement","removeChild","document","createElement","use","config","zIndex","overlay","then","Phrasen$1","Phrasen","mount","appendChild","template","Alert","components","mixins","onHideBsModal","Function","onHiddenBsModal","onHidePreventedBsModal","onShowBsModal","onShownBsModal","modalContainer","msg","bind","BsConfirm$1","BsAlert","GridItem","inject","item","active","dragAction","dragging","computed","registerDragAction","evt","target","hasAttribute","getAttribute","parent","closest","tryDragStart","touchDragEnd","touchStart","event","touchMove","preventDefault","GridLogic","constructor","w","grid","isFreeSlot","x","y","i","getMaxY","reduce","acc","getFreeSlots","freeSlots","biggestY","totalSpaces","length","Math","floor","push","add","prefer","occupiers","getItemsInFrame","frame","forEach","f","index","max","intermGrid","possiblities","tryMoving","bestOption","sort","a","b","cost","moves","v","move","currItem","getItemFrame","remove","console","error","place","pinned","originalFrame","isArray","some","occupiersData","map","occupier","occupiersFrame","flat","replaceUpdate","newOccupierFrames","occ","shift","getSingleFramePosition","updates","resize","newPoss","possiblity","p","directions","weight","dir","res","tryMovingInDirection","filter","amount","targetframe","unshift","clearWeights","indexOf","j","debug","DropGrid","cols","Number","items","itemsSetup","resizeLimit","marginForExtraRow","additionalRow","clientX","clientY","mode","dragGrid","permUpdates","positionUpdates","fixedPositionUpdates","draggedOffset","draggedItem","draggedNode","reorderedItems","clonedWidget","sectionName","additionalRowComputed","get","set","items_hashmap","needsReordering","rearrangedPosition","widget","widgetid","pop","items_placeholders","placeholders","col_max","rows_max","rows","occupied","keys","current_item","max_x","max_y","occupied_y","occupied_x","placeholder","id","padStart","placedItems_withPlaceholders","placedItems","gridStyle","addH","indexedItems","prePlacedItems","mappedPlacedItems","height_diff","width_diff","temporaryResizeItems","newItem","resizeOverlay","blank","showEmptyTileHover","widgetSetup","widgetsSetup","ele","widget_id","watch","dragCancel","handler","immediate","updated","createNewGrid","deep","toggleDraggedItemOverlay","condition","firstElementChild","classList","containerRect","container","getBoundingClientRect","clonedWidgetRect","desiredTop","desiredLeft","minTop","maxTop","height","minLeft","maxLeft","width","constrainedTop","min","constrainedLeft","style","top","left","sortedItems","firstFreeSlot","targetX","targetW","convertGridResultToUpdate","input","output","baseArray","mouseLeave","updateCursor","rect","touches","gridX","clientWidth","gridY","clientHeight","_dragStart","dataTransfer","setDragImage","dropEffect","effectAllowed","startMove","setTimeout","clone","cloneNode","querySelector","removeProperty","startResize","dragOver","checkPinnedWidgetAnimation","checkWidgetSizeLimitAnimation","removeWidgetClones","dragEnd","getElementById","from","getElementsByClassName","_updateFixedPositions","additionalUpdates","emptyTileClicked","updateCursorOnMouseMove","itemAtPosition","pinNode","contains","draggedItemSetup","draggedItemMaxWidth","draggedItemMinWidth","draggedItemMaxHeight","draggedItemMinHeight","draggedItemNode","width_after_resize","height_after_resize","widgetClones","mouseDown","mouseUp","__widgets","__widgetsStarted","__path","FHC_JS_DATA_STORAGE_OBJECT","app_root","ci_router","CachedWidgetLoader","getWidget","loadWidget","axios","params","retval","catch","response","setPath","path","DashboardItem","HeightTransition","onEnter","el","done","scrollHeight","onLeave","component","arguments","tmpConfig","isLoading","hasConfig","sharedData","maxHeight","maxWidth","prototype","toString","call","minHeight","minWidth","isResizeable","isPinned","ready","unpin","editMode","item_data","pinItem","getWidgetC4Link","cis4link","handleShowBsModal","handleHideBsModal","e","startDrag","dragHandle","resizeHandle","openConfig","setConfig","changeConfig","sendChangeConfig","changeConfigManually","k","created","import","file","$options","WidgetIcon","required","src","DashboardSection","adminMode","configOpened","gridWidth","gridHeight","provide","editModeIsActive","computedWidgetsSetup","getSectionStyle","widgets","reorder","sectionNameTranslation","$p","t","showSectionInformation","handleConfigOpened","handleConfigClosed","checkResizeLimit","minmaxW","minmaxH","removeWidget","revert","custom","BsConfirm","update","hidden","updatePreset","saveConfig","payload","updatePositions","self","cont","parseInt","window","getComputedStyle","getPropertyValue","addEventListener","DashboardWidgetPicker","callbacks","close","pick","ObjectUtils","mergeDeep","objects","isObject","obj","prev","key","pVal","oVal","concat","ApiDashboard","getViewData","method","url","FhcDashboard","dashboard","viewData","uid","timezone","sections","viewDataInternal","apiurl","widgetAdd","section_name","db","JSON","parse","err","widgetpicker","Date","valueOf","loading","section","post","funktion_kurzbz","newId","splice","alert","widgetUpdate","wid","prop","_x","_y","_w","_h","preset","widgetRemove","loadCategory","section1","section2","beforeMount","$api","search","searchsettings","$fhcApi","searchAdvanced","searchdummy","phrasen$2","category","setLanguage","categories","language","getLanguage","getActiveDbLanguages","navigation","getHeader","navigation_page","getMenu","filter$1","saveCustomFilter","wsParams","filterUniqueId","filterType","customFilterName","removeCustomFilter","filterId","applyFilterFields","filterFields","addFilterField","filterField","removeFilterField","getFilterById","getFilter","studstatus","abmeldung","getDetails","antrag_id","prestudent_id","create","stdsem","grund","studiensemester","errorHandling","cancel","allSettled","antrag","studierendenantrag_id","errorHeader","unterbrechung","datum_wiedereinstieg","attachment","wiederholung","getLvs","saveLvs","forbiddenLvs","mandatoryLvs","leitung","getStgs","getAntraege","getHistory","getPrestudents","query","signal","timeout","approve","reopen","pause","unpause","object","approveObjection","denyObjection","profil","getView","fotoSperre","isStudent","isMitarbeiter","getZustellAdresse","getZustellKontakt","getGemeinden","nation","zip","getAllNationen","profilUpdate","getStatus","getTopic","acceptProfilRequest","profil_update_id","status_message","topic","requested_change","denyProfilRequest","insertFile","dms","replace","getProfilRequestFiles","requestID","selectProfilRequest","insertProfilRequest","fileID","updateProfilRequest","ID","deleteProfilRequest","lvPlan","getRoomInfo","ort_kurzbz","start_date","end_date","getStunden","getOrtReservierungen","getLvPlanReservierungen","getLehreinheitStudiensemester","lehreinheit_id","studiensemesterDateInterval","date","LvPlanEvents","lv_id","stv","verband","favorites","students","studiensemester_kurzbz","encodeURIComponent","getUri","prestudent","person","person_id","relative_path","getStg","setStg","studiengang_kz","konto","tabulatorConfig","ajaxURL","ajaxParams","modelValue","only_open","studiengang_kz_intern","stg_kz","ajaxRequestFunc","ajaxResponse","checkDoubles","form","confirmErrorHandler","insert","counter","edit","delete","buchungsnr","getBuchungstypen","group","getGruppen","deleteGroup","kontakt","getAdressen","addNewAddress","loadAddress","address_id","updateAddress","deleteAddress","getPlaces","plz","getFirmen","searchString","getNations","getAdressentypen","getBankverbindung","addNewBankverbindung","loadBankverbindung","bankverbindung_id","updateBankverbindung","deleteBankverbindung","getKontakte","addNewContact","loadContact","kontakt_id","updateContact","deleteContact","getStandorteByFirma","getKontakttypen","updatePrestudent","getBezeichnungZGV","getBezeichnungMZgv","getBezeichnungDZgv","getAusbildung","getAufmerksamdurch","getBerufstaetigkeit","getTypenStg","getBisstandort","getHistoryPrestudent","getMaxSem","studiengang_kzs","advanceStatus","status_kurzbz","ausbildungssemester","confirmStatus","isLastStatus","deleteStatus","getLastBismeldestichtag","getHistoryPrestudents","status","insertStatus","loadStatus","updateStatus","getStudienplaene","getStudiengang","getStatusgruende","getStati","addStudent","changeStatus","getStatusarray","details","save","exam","getPruefungen","loadPruefung","pruefung_id","getTypenPruefungen","getAllLehreinheiten","getLvsByStudent","getLvsandLesByStudent","semester","getLvsAndMas","getMitarbeiterLv","getNoten","checkZeugnisnoteLv","addPruefung","updatePruefung","deletePruefung","abschlusspruefung","getAbschlusspruefung","addNewAbschlusspruefung","loadAbschlusspruefung","updateAbschlusspruefung","deleteAbschlusspruefung","getTypenAbschlusspruefung","getTypenAntritte","getBeurteilungen","getAkadGrade","getTypStudiengang","getMitarbeiter","getPruefer","checkForExistingExams","uids","grades","list","getCertificate","getTeacherProposal","getRepeaterGrades","updateCertificate","lehrveranstaltung_id","student_uid","note","lehrveranstaltung_bezeichnung","deleteCertificate","copyTeacherProposalToCertificate","copyRepeaterGradeToCertificate","studierendenantrag_lehrveranstaltung_id","lv_bezeichnung","getGradeFromPoints","points","manualErrorHandling","mobility","getMobilitaeten","getProgramsMobility","addNewMobility","loadMobility","bisio_id","updateMobility","deleteMobility","getLVList","getPurposes","getSupports","getListPurposes","getListSupports","deleteMobilityPurpose","addMobilityPurpose","deleteMobilitySupport","addMobilitySupport","archiv","getArchivVorlagen","archive","archiveSigned","akte_id","documents","getDocumentsUnaccepted","getDocumentsAccepted","deleteZuordnung","dokument_kurzbz","createZuordnung","loadAkte","getDoktypen","updateFile","deleteFile","uploadFile","exemptions","getAnrechnungen","getLehrveranstaltungen","getBegruendungen","getLvsKompatibel","getLektoren","addNewAnrechnung","loadAnrechnung","anrechnung_id","editAnrechnung","deleteAnrechnung","jointstudies","getStudies","getTypenMobility","getStudiensemester","getStudyprograms","getListPartner","getStatiPrestudent","loadStudy","insertStudy","updateStudy","deleteStudy","courselist","getCourselist","group_consecutiveHours","dbStundenplanTable","configStudent","configStudents","person$3","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","mitarbeiter","projekt","notiz","anrechnung","bestellung","lehreinheit","projektphase","projekttask","betriebsmittel","getAllBetriebsmittel","addNewBetriebsmittel","loadBetriebsmittel","betriebsmittelperson_id","updateBetriebsmittel","deleteBetriebsmittel","getTypenBetriebsmittel","loadInventarliste","checkperson","updatePersonUnrulyStatus","unrulyParam","unruly","filterPerson","base","ort","getContentID","ort_kurbz","getRooms","datum","von","bis","typ","personenanzahl","getRoomTypes","cms","content","content_id","version","sprache","sichtbar","getNews","page","page_size","news","limit","getNewsRowCount","getNewsExtra","lehre","getStudentenMail","getLvInfo","getStudentPruefungen","addons","getLvMenu","lvid","messages","getMessages","size","getVorlagen","getMsgVarsLoggedInUser","getMessageVarsPerson","getMsgVarsPrestudent","getPersonId","getDataVorlage","vorlage_kurzbz","getNameOfDefaultRecipient","getPreviewText","getReplyData","messageId","sendMessageFromModalContext","sendMessage","deleteMessage","vorlagen","getVorlagenByLoggedInUser","studium","getAllStudienSemester","studiengang","studienplan","getStudiengaengeForStudienSemester","getStudienplaeneBySemester","getLvPlanForStudiensemester","getLvEvaluierungInfo","FhcApiFactory","phrasen","bookmark","getBookmarks","bookmark_id","tag","ampeln","open","all","confirm","ampel_id","studiengangInformation","getStudiengangByKz","menu","authinfo","getAuthUID","getAuthInfo","vertraege","getAllVertraege","getAllContractsNotAssigned","getAllContractsAssigned","vertrag_id","getAllContractsNotAssigned2","getStatiOfContract","getAllContractTypes","getAllContractStati","addNewContract","loadContract","updateContract","deleteContract","loadContractStatus","insertContractStatus","updateContractStatus","deleteContractStatus","deleteLehrauftrag","deleteBetreuung","getPersonAbteilung","getLeitungOrg","oekurzbz","getMitarbeiterUid","configPrintDocument","getAll","OldFhcApi","install","app","globalProperties","factory","warn","addEndpoints","_get_config","uri","TypeError","clearValidation","setFeedback","_clean_return_value","meta","fhcApiAxios","baseURL","interceptors","request","FormData","values","every","FileList","File","newData","entries","nd","append","jsondata","stringify","errors","_defaultErrorHandlers","code","handled","$fhcAlert","alertDefault","message","responseURL","alertError","validation","apply","general","php","filename","line","backtrace","function","severity","alertSystemError","exception","heading","sql","join","auth","controller","required_permissions","FhcApiFactoryWrapper","factorypart","root","defineProperty","noWarn","CORE_REST_CLIENT_ERROR","CORE_REST_CLIENT_RETVAL","CoreRESTClient","wsURL","wsParameters","axiosParameters","_axiosCall","isSuccess","hasOwnProperty","isError","hasData","trim","getData","getError","getErrorCode","_generateRouterURI","_printDebug","parameters","errorThrown","axiosCallObj","helperAppContainer","helperApp","PvToast","PvConfirm","mailToUrl","slotProps","systemerror_mailto","called_path","called_method","detail","openMessagecard","Collapse","getOrCreateInstance","showmaillink","PvConfig","PvConfirmationService","helperAppInstance","FhcAlert","FhcPhrasen","alertSuccess","toast","summary","life","alertInfo","alertWarning","confirmDelete","$confirm","require","header","acceptLabel","acceptClass","rejectLabel","rejectClass","accept","sticky","html","alertMultiple","messageArray","handleSystemError","toLowerCase","errMsg","toUpperCase","stack","handleSystemMessage","resetFormValidation","Event","querySelectorAll","dispatchEvent","handleFormValidation","nodeType","Node","ELEMENT_NODE","notFound","CustomEvent","arr","PluginsApi","_send_array_or_object","func","errs","DEFAULT_ERROR_CONFIG","success","fail","combine","async","_format_toast","_default","field","msgs","n_errors","n","get_config","clean_return_value","_merge_error_config","get_error_handler","formHandler","get_error_list","popHandleableErrors","copy","newType","newTypeCombinesType","newTypeHasHandler","errorConfig","remaining","configoverwrite","typedErrors","allowed","reason","errType","getErrorHandler","ApiPhrasen","reactive","loadingModules","user_language","user_locale","server_languages","find","LC_Time","catArray","row","phrase","text","elem","extractCategory","t_ref","split","val","match","p1","getValueForLoadedPhrase","PluginsPhrasen","cat","lang","theme_name","theme","theme_modes","modes","toggleTheme","documentElement","setAttribute","stylesheet","attributes","href","localStorage","setItem","Theme","initializeTheme","getItem","$theme","switchTheme","rgbToHex","hex","getContrastYIQ","hexcolor","substring","contrast","element","binding","bgColor","backgroundColor","rgbRegEx","RegExp","isRgb","r","g","hexColor","color","TYPE_DEFINITION","dragIcon","extras","vevent","student","VALID_TYPES","isValidDragObject","substr","extra","getValidTransferData","allowedTypes","strict","getTransferData","_error","types","base_type","collection","DragAndDrop","isValidTransferData","convertToValidDragObject","converted","sorted","found","typedef","setTransferData","validDragObject","dragElements","icon","label","iconContainer","className","textContent","boxShadow","itemContainer","requestAnimationFrame","setData","eventHasTypes","bindDragEnterLeave","skipLeave","skipLeaveParent","init","globalDragenter","globalDragleave","globalDrop","removeEventListener","cleanup","wasDropped","CalDnd","vnode","arg","cancelable","bubbles","offsetX","offsetWidth","offsetY","offsetHeight","originalEvent","hitbox","pos","pageX","scrollLeft","pageY","scrollTop","modifiers","once","timestamp","prevVnode","BaseDraganddrop","directives","events","correctedEvents","backgrounds","dropAllowed","dropableEvents","draggedInternalEvent","draggedExternalEvent","targetTimestamp","targetGridEnds","shadowPreview","findIndex","previewEvent","toSpliced","correctedBackgrounds","start","end","orig","onDragstart","convertToTransferData","onDragend","onDragenter","isostart","luxon","DateTime","fromISO","setZone","local","isoend","onDragleave","onDragchange","ends","onDrop","BaseHeader","DatePicker","VueDatePicker","listLength","convertedDate","keepLocalTime","current","month","year","startOf","ts","plus","days","useLocaleWeeks","endOf","toLocaleString","localWeekYear","week","toFormat","DATE_FULL","weekStart","Info","getStartOfWeek","fromObject","setLocale","locale","fromJSDate","weekNumbers","localWeekNumber","modeOptions","btnMonth","btnWeek","btnDay","btnList","clickMode","defaultPrevented","BaseSlider","time","extrasAfter","extrasBefore","running","promiseResolve","itemsAfter","itemsBefore","styleSlider","position","transition","styleBefore","display","right","styleAfter","prevPage","slidePages","nextPage","newTarget","endSlide","clickListeners","saveAddClickListener","source","listener","stopPropagation","customEvent","CalClick","finalEvent","FhcCalendar$1","timeGrid","draggableEvents","hasDragoverFunc","onDragover","now","showBtns","internalView","internalDate","modalEvent","convertedEvents","convertedBackgrounds","bg","isInteger","fromMillis","zone","sDate","cDate","cMode","sMode","o","isValid","hasSame","clickPrev","clickNext","handleClickDefaults","number","zoneName","onDropItem","showEventModal","eventObj","hideEventModal","closeFn","onModalHidden","ApiLvPlan","getLvPlan","eventsPersonal","eventsLv","getLv","GridLineEvent","isHeaderOrFooter","draggable","classes","startsHere","endsHere","CalendarGrid","GridLine","LineEvent","LineBackground","flipAxis","background","styles","perc","border","diff","axisRow","eventsWithRowInfo","toMillis","originalEvents","originalBackgrounds","axisMain","axisParts","Duration","allDayEvents","axisMainCollapsible","snapToGrid","resizeObserver","mutationObserver","userScroll","axisCol","axisPartsWithBreaks","tu","lastTuEnd","slice","axisPartsSave","partsEnds","part","axisMainBorders","curr","eventsAllDay","mapIntoMainAxis","allDayEvent","eventsNormal","hasValidEvents","styleGridCols","styleGridRows","gridlines","mainIndex","day","laneStart","laneEnd","getPageTop","pageTop","offsetTop","offsetParent","getPageLeft","pageLeft","offsetLeft","getTimestampFromMouse","dayTimestamp","mouse","mouseFrac","main","enableAutoScroll","ResizeObserver","scrollToEarliestEvent","observe","MutationObserver","mutations","m","addedNodes","matches","subtree","childList","disableAutoScroll","disconnect","eventElements","scroller","earliestEventOffset","scrollIntoView","behavior","scrollTo","LabelDay","titleFull","titleLong","titleShort","titleNarrow","LabelDow","weekday","LabelTime","start_ok","end_ok","sanitizedTimestamps","formatTime","toISOTime","suppressSeconds","ModeDay","DayView","emptyMessage","emptyMessageDetails","chosenEvent","gridMainRef","fromISOTime","hours","currentEvent","first","isToday","compact","threshold","elementRef","isRef","$el","compareArray","updateResultVars","compare","observer","addObserver","removeObserver","onMounted","onUnmounted","watchEffect","useResizeObserver","currentDate","focusDate","rangeOffset","range","last","Interval","fromDateTimes","view","slider","updatePage","newFocusDate","viewAttrs","$attrs","ModeWeek","WeekView","collapseEmptyDays","weeks","ModeMonth","MonthView","LabelWeek","firstDay","lastDay","d","startdate","nextRangeStart","months","dayInWeek","FhcCalendar","getPromiseFunc","markRaw","teachingunits","includeOffset","eventStyle","farbe","updateRange","rangeInterval","context","lv","loading_id","loadingEvents","allEvents","eventsLoaded","mergePromiseArr","markEventsLoaded","indexIsLast","nStart","rStart","nEnd","toISODate","toValue","promises","results","useEventLoader","newValue","emit","stunde","beginn","ende","ApiAuthinfo","LvPlan","propsViewData","currentDay","focus_date","isNaN","currentMode","currentLv","lvTitle","bezeichnung_english","bezeichnung","handleChangeDate","newMode","handleChangeMode","$router","MyLvPlan","studiensemester_start","studiensemester_ende","downloadLinks","opts","toUnixInteger","download_link","link","LvPruefungen","pruefungenData","ApiLehre","infos","studien_semester","studiengang_kuerzel","orgform_kurzbz","ects","incoming","info","lektorNamesLinks","lektorenLinks","lektoren","titelpre","vorname","nachname","titelpost","lektorNames","lvLeitung","oe","organisationseinheittyp","oeLeitung","koordinator","currentLang","lastLang","lvinfo","lvinfoDefaultLang","assign","reloadRefs","triggerRef","initialval","FHC_JS_PHRASES_STORAGE_OBJECT","tmp_category","loadLazy","unref","LvMenu","containerStyles","rowStyles","hasLvPlanEintraege","c4_disabled","menuItem","c4_link","c4_moodle_links","c4_target","getMenuName","ApiAddons","LvUebersicht","titel","preselectedMenu","isMenuSelected","lvEvaluierungMessage","hiddenModal","showModal","studium_studiensemester","MylvSemester","MylvSemesterStudiengang","MylvSemesterStudiengangLv","bezeichnung_eng","module","benotung","lvnote","lvnotebez","znote","znotebez","positiv","note_index","preselectedMenuItem","gradeColor","is_organisatorische_einheit","emptyMenu","bodyStyle","grade","languageIndex","LvHasPruefungenInformation","fetchMenu","openLvOption","location","nextTick","lvUebersicht","openPruefungen","openInfos","LvInfo","pruefungen","kuerzel","lvs","sg_bezeichnung_eng","lehrveranstaltungen","Map","studiengaenge","sg_bezeichnung","lvsForStudiengang","MylvStudent","firstLoad","currentSemester","nearestSem","nearestSemDiff","sem","abs","currentIsFirst","currentIsLast","prevSem","selectedIndex","nextSem","updateRouter","routerStudiensemester","$route","s","beforeRouteUpdate","to","next","CoreFetchCmpt","refresh","apiFunction","apiFunctionParameters","oldValue","fetchData","errorMessage","apiFunctionResult","successHandler","errorHandler","finally","finallyHandler","setError","FILTER_COMPONENT_NEW_FILTER","FilterConfig","filters","columns","fields","switchFilter","applyFilterConfig","currentFields","c","currentTarget","filteredFields","addField","removeField","FilterColumns","selected","names","selectedFields","DEFAULT_ICONS","jsonLines","xlsx","pdf","json","csv","DEFAULT_LABELS","TableDownload","tabulator","iconClass","currentConfig","newConfig","stringToFileFormatter","formatter","validateFileFormatter","lcInput","XLSX","jspdf","jsPDF","autoTable","download","elementDataMap","WeakMap","collapseAutoClose","collapse","getInstance","collapsibleAutoHideFunc","Tabulator","extendModule","fitDataStretchFrozen","forced","colsWidth","tableWidth","table","rowManager","gap","lastCol","column","widthFixed","reinitializeWidth","responsiveLayout","modules","responsive","visible","definition","frozen","getWidth","modExists","setWidth","ApiFilter","_uuid","CoreFilterCmpt","onNwNewEntry","description","sideMenu","tabulatorOptions","tabulatorEvents","tableOnly","noColumnFilter","reload","reloadBtnInfotext","newBtnShow","newBtnClass","newBtnDisabled","newBtnLabel","uniqueId","idField","parentIdField","countOnly","useSelectionSpan","uuid","filterName","filterActive","dataset","datasetMetadata","availableFilters","selectedFilter","fetchCmptRefresh","fetchCmptApiFunction","fetchCmptApiFunctionParams","fetchCmptDataFetched","fetchResult","tableBuilt","tabulatorHasSelector","selectedData","persistence","headerFilter","notSelectedFields","filteredData","filteredColumns","col","resizable","fieldIdsForVisibilty","getColumns","def","getDefinition","getField","fieldNames","idExtra","columnsForFilter","filterTitles","reloadTable","initTabulator","hash","resolvePromiseFunc","setRenderData","startFetchCmpt","layout","movableColumns","columnDefaults","tooltip","selectable","selectableRows","dataTree","on","toDelete","childIdx","child","isVisible","_setHeaderFilter","updateTabulator","_updateTabulator","setColumns","clearFilters","getHeaderFilters","setHeaderFilterValue","clearFilter","render","setSideMenu","setDropDownMenu","personalFilters","filtersArray","filtersCount","filter_id","desc","onClickCall","handlerGetFilterById","subscriptDescription","subscriptLinkClass","subscriptLinkValue","onClickSubscriptCall","handlerRemoveCustomFilter","children","option","dataFetchedCallback","handlerSaveCustomFilter","attr","parentId","parentIdx","_children","beforeCreate","$props","Mailverteiler","AusweisStatus","QuickLinks","mobile","hideCollapse","collapseOpen","showCollapse","Adresse","withZustelladresse","Kontakt","ProfilEmails","RoleInformation","getLinkGruppeListe","gruppe","getLinkVerbandListe","getLinkSemesterListe","ApiProfil","profilViewData","Upload","DmsItem","preview","multiple","inputClass","noList","disabled","stringifyFile","lastModified","lastModifiedDate","addFiles","files","dt","DataTransfer","doubles","removeFile","fileToRemove","upload","dmsFile","ApiProfilUpdate","updateProfilbild","getProfilUpdateWithPermission","ImageUpload","dmsData","Dms","updateID","uploadImage","ProfilInformation","fotoStatus","FotoSperre","foto_sperre","imageUpload","sperre_foto_function","get_image_base64_src","foto","Vorname","Nachname","profilInfo","notIncludedProperties","EditProfilSelect","EditKontakt","originalValue","zustellKontakteCount","updateValue","checked","isChanged","getZustellkontakteCount","showZustellKontakteWarning","zustellung","kontakteOfSelectedType","kontakttyp","EditAdresse","AutoComplete","autocomplete","gemeinden","ortschaftnamen","selectedNation","nationenList","zustellAdressenCount","fileschanged","autocompleteSearchGemeinden","gemeinde","autocompleteSearchOrtschaftsnamen","ortschaft","getGemeinde","Set","ortschaftsname","updateFileID","getZustelladressenCount","deleteDmsData","showZustellAdressenWarning","zustelladresse","adresse_id","strasse","Status","getDocumentLink","dms_id","getComponentView","profilUpdateTopic","cardHeader","status_timestamp","TextInputDokument","withFiles","didFilesChange","didDataChange","emitChanges","toRaw","ariaLabel","breadcrumb","submit","select","breadcrumbItems","modal_topic","properties","addItem","anmerkung","deleteItem","profilUpdateEmit","updateOptions","Loading","state","clearTimeout","EditProfil","Loader","zustelladressenCount","zustellkontakteCount","editData","updateFileIDFunction","newFileID","handleFailedError","setLoading","submitProfilChange","fileData","uploadFiles","handleApiResponse","showFooter","FetchProfilUpdates","showUpdateModal","editProfilTitle","hideEditProfilModal","updateEditModal","showEditProfilModal","updateRequest","profilUpdateStates","deleteRequest","dateFilter","cell","onRendered","div","initialValue","getValue","PrimevueCalendar","calendar","dates","headerValue","rowValue","rowDate","startDate","endDate","setHours","toDateString","singleDate","StudentProfil","collapseIconBetriebsmittel","editDataFilter","preloadedPhrasen","zutrittsgruppen_table_options","persistenceID","zutrittsGruppenPhrase","betriebsmittel_table_options","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","$collapseFormatter","headerSort","headerClick","collapseFunction","entlehnteBetriebsmittelPhrase","inventarnummerPhrase","ausgabedatum","headerFilterFunc","formatterParams","datetimeFormatterParams","betriebsmittelTableBuilt","betriebsmittelTable","mittel","zutrittsgruppenTableBuilt","zutrittsgruppenTable","zuttritsgruppen","fetchProfilUpdates","profilUpdates","sortProfilUpdates","editModal","inputFormat","outputFormat","invalidPlaceholder","filteredEditData","profilInformation","Username","username","Anrede","anrede","Titel","Postnomen","postnomen","roleInformation","geburtsdatum","gebdatum","geburtsort","gebort","personenkennzeichen","loaded","newVal","MitarbeiterProfil","funktionen_table_options","bezeichnungPhrase","organisationseinheitPhrase","gueltigVonPhrase","gueltigBisPhrase","wochenstundenPhrase","Nummer","Ausgegeben_am","ausgabedatumPhrase","funktionenTableBuilt","funktionenTable","funktionen","setTableColumnTitles","getTelefonValue","standort_telefon","telefonklappe","kurzbz","telefon","office","ViewStudentProfil","personEmails","emails","ViewMitarbeiterProfil","collapseIconFunktionen","item2","innerHTML","Profil","notFoundUID","isEditable","editable","allClickableIcons","_column","cells","click","ele1","ele2","insertamum","reverse","load","profil_data","adressen","adressenArray","adresse","adr","kontakte","kontakteArray","kontant","kon","Personen_Informationen","Private_Kontakte","listview","Private_Adressen","loadingModalRef","oldVal","ApiOrt","Raumsuche","InputNumber","inputnumber","phrasenPromise","phrasenResolved","tabulatorUuid","tableBuiltResolve","tableBuiltPromise","roomtypes","defaultType","raumtyp_kurzbz","beschreibung","anzahl","selectedType","getHours","minutes","getMinutes","datepickerTextInputOptions","enterSubmit","tabSubmit","selectOnFocus","format","escClose","timepickerTextInputOptions","raumsucheTableOptions","widthGrow","linkFormatter","raumsucheTableEventHandlers","tableResolve","arialabel","roomPlanLink","room","roomInfoLink","getTimeString","setupData","nummer","planbezeichnung","personen","max_person","linkInfo","linkRes","raumsucheTable","loadRoomTypes","loadRooms","toISOString","handleUuidDefined","setRoute","dateFormat","getDate","getMonth","getFullYear","timeFormat","setupMounted","tableID","tableDataSet","visualViewport","setProperty","isDarkMode","Pagination","paginator","maxPageCount","newPageEvent","StudiengangPerson","telefoneklappe","email","displayWidget","formattedEmail","emailArray","fullname","phone","email_link","base64Image","profilViewLink","StudiengangVertretung","vertretungsList","showBezeichnung","vertretungFormatedName","vertretung","ApiStudiengang","StudiengangInformation","stg_ltg","gf_ltg","stv_ltg","ass","hochschulvertr","stdv","jahrgangsvertr","collection_array","returnData","moodleLink","studiengangInformationen","ApiCms","CmsNews","fetchNews","Axios","loadNewPageContent","raum_contentmittitel","imgContent","sanitizeLegacyTables","pElement","parentNode","replaceChild","u","li","scrollWidth","firstChild","TEXT_NODE","th","childNodes","cn","tables","getElementsByTagName","innerText","room_name","room_name_reg_exp","room_name_reg_exp_result","link_element","replaceWith","lvplanlinks","lvplanlink","img","DOMParser","parseFromString","imgAttributes","regexList","relative","priority","regex","replacement","group_replacement_strategy","absolute","relative_regex","replaceRelativeLegacyLink","relativeLegacyLink","new_link","query_parameter","prepareContent","new_href","CmsContent","news_content","iframe_content","srcUrl","iframe","content_type","content_id_internal","fetchContent","$nextTick","computeContentType","DEFAULT_MODE_RAUMINFO","RoomInformation","ApiAbgabe","getConfig","getConfigStudent","getStudentProjektarbeiten","getStudentProjektabgaben","projektarbeit_id","postStudentProjektarbeitEndupload","Headers","postStudentProjektarbeitZwischenabgabe","getMitarbeiterProjektarbeiten","showall","postProjektarbeitAbgabe","termin","dateString","paabgabe_id","paabgabetyp_kurzbz","note_pk","upload_allowed","beurteilungsnotiz","fixtermin","insertvon","betreuer_person_id","deleteProjektarbeitAbgabe","postSerientermin","projektarbeit_ids","fetchDeadlines","getPaAbgabetypen","getProjektarbeitenForStudiengang","benotet","getStudiengaenge","postStudentProjektarbeitZusatzdaten","getSignaturStatusForProjektarbeitAbgaben","paabgabe_ids","FhcOverlay","AbgabeStudentDetail","Checkbox","checkbox","Dropdown","dropdown","Textarea","textarea","Accordion","accordion","AccordionTab","accordiontab","Message","Inplace","inplace","projektarbeit","viewMode","eidAkzeptiert","enduploadTermin","allActiveLanguages","abstract","abstract_en","schlagwoerter","schlagwoerter_en","kontrollschlagwoerter","seitenanzahl","getNoteBezeichnung","noteOpt","notenOptions","opt","$capitalize","benotbar","validate","endupload","triggerEndupload","bperson_id","handleUploadRes","modalContainerEnduploadZusatzdaten","downloadAbgabe","formatDate","dateParam","padZero","num","abgabedatum","signatur","signaturInfo","getOptionLabel","getTerminNoteBezeichnung","getMoodleLink","moodle_link","getMessagePtStyle","margin","padding","getEid","allowedToSaveZusatzdaten","getAllowedToSendEndupload","qualityGateTerminAvailable","qgatefound","abgabetermine","abgabe","getTooltipVerspaetet","getTooltipVerpasst","getTooltipAbzugeben","getTooltipStandard","getTooltipAbgegeben","getTooltipFixtermin","getTooltipAbgabeDetected","getTooltipNotAllowedToUpload","isViewMode","getTooltipBeurteilungerforderlich","getTooltipBestanden","getTooltipNichtBestanden","today","getDateStyleClass","diffindays","isLate","nopt","AbgabetoolStudent","AbgabeDetail","student_uid_prop","activeTabIndex","abgabeTypeOptions","projektarbeiten","selectedProjektarbeit","checkQualityGatesStrict","termine","qgate1Passed","qgate2Passed","noteOption","checkQualityGatesOptional","qgate1found","qgate2found","qgate1positiv","qgate2positiv","isPastDate","deadline","setDetailComponent","loadAbgaben","pa","projekarbeit","paIsBenotet","allowedToUpload","inTime","dateStyle","betreuer","buildBetreuer","modalContainerAbgabeDetail","centeredTextFormatter","detailFormatter","mailFormatter","beurteilungFormatter","buildMailToLink","btitelpre","bvorname","bnachname","btitelpost","betreuerart_kurzbz","beurteilung1","downloadLink1","beurteilung2","downloadLink2","stg","kurzbzlang","mail","projekttypbezeichnung","loadProjektarbeiten","getAccTabHeaderForProjektarbeit","getMailLink","handleDownloadBeurteilung1","handleDownloadBeurteilung2","allowedNotenOptions","AbgabeMitarbeiterDetail","SpeedDial","speeddial","isFullscreen","assistenzMode","showAutomagicModalPhrase","speedDialItems","command","openCreateNewAbgabeModal","getAllowedToCreateNewTermin","openBenotung","openPlagiatcheck","openStudentPage","newTermin","noteBackend","getPlaceholderTermin","saveTermin","invertedFixtermin","newTerminRes","allowedToSave","allowedToDelete","existingTerminRes","abgabeOpt","noteOptExisting","savedNewWithNegative","savedExistingNoteAsNegativeAndWasNotNegativeBefore","modalContainerCreateNewAbgabe","openZusatzdatenModal","modalContainerZusatzdaten","saveZusatzdaten","validateZusatzdaten","paRes","handleDeleteTermin","deleteTermin","deletedTerminIndex","openBeurteilungLink","getOptionLabelSprache","getOptionLabelAbgabetyp","getOptionDisabled","aktiv","getNotenOptionLabel","turnitin_link","getSemesterBenotbar","beurteilungLinkNew","beurteilungLinkOld","upload_allowed_default","validateTermin","handleSaveNewAbgabe","handleChangeAbgabetyp","notenOptionsNonFinal","getAllowedAbgabeTypeOptions","abgabetypenBetreuer","getEnduploadErlaubt","isCurrent","endUploadVorhanden","getSpeedDialStyle","getSpeedDialWrapperStyle","getTooltipNotAllowedToSave","getTooltipNotAllowedToDelete","getProjektarbeitTitel","getProjektarbeitStudent","splitMailsHelper","mails","subject","alertPluginRef","phrasenPluginRef","maillist","mailto","subjectlength","firstrun","useBcc","ctrlKey","metaKey","splitposition","lastIndexOf","mailLink","AbgabetoolMitarbeiter","TieredMenu","tieredmenu","old_abgabe_beurteilung_link","tableData","detailIsFullscreen","BETREUER_SAMMELMAIL_BUTTON_STUDENT","saving","serienTermin","showAll","domain","detailOffset","abgabeTableOptions","selectableCheck","selectionCheck","rowHeight","getRow","handleClick","cssText","titleFormatter","hozAlign","selectHandler","titleFormatterParams","selectAllHandler","cssClass","pkzTextFormatter","headerFilterTerminCol","sorter","sortFuncTerminCol","abgabterminFormatter","headerFilterParams","valuesLookup","getQGateStatusList","abgabeTableEventHandlers","getColumn","undoSelection","sd","fsd","handlePaUpdated","checkAbgabetermineProjektarbeit","abgabeTable","redraw","sammelMailStudent","param","recipientList","aRow","bRow","diffMs","filterVal","rowVal","luxonDate","toLuxon","loadState","saveState","stateRestored","getColumnLayout","getSorters","getFilters","headerFilters","handleTableBuilt","saved","colLayoutRestored","setColumnLayout","filtersRestored","setFilter","headerFiltersRestored","hf","sortRestored","sortList","columnManager","findColumn","setSort","checkQualityGateStatus","qgate1Termine","qgate2Termine","qgate1Status","qgate1StatusRank","qgate2Status","qgate2StatusRank","qgate","prevTermin","nextTermin","isSelected","deselect","getTable","getRows","handleToggleFullscreenDetail","showDeadlines","toggleShowAll","openAddSeriesModal","modalContainerAddSeries","addSeries","oldScrollLeft","oldScrollTop","createInfoString","str","paabgabe","buildPKZ","matrikelnr","buildStg","pkz","beurteilung","beurteilungLink","projekttyp_kurzbz","callback","calcMaxTableHeight","setHeight","emailItems","uniqueStudentEmailCount","BsOffcanvas","offcanvas","scroll","placement","Offcanvas","ApiStudiensemester","getAllStudiensemesterAndAktOrNext","order","AbgabetoolAssistenz","AbgabeterminStatusLegende","Timeline","timeline","stg_kz_prop","studiensemesterOptions","allSem","curSem","notenOptionFilter","inplaceToggle","timelineProjekt","selectedStudiengangOption","studiengaengeOptions","allConfigPromise","ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT","ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER","allowedNotenFilterOptions","renderVerticalBuffer","formAction","uniqueRecipients","sammelMailBetreuer","betreuer_mail","zweitbetreuer_mail","getItemBezeichnung","getItemNote","notenOption","handleChangeAbgabetypSerientermin","semesterChanged","existing","compVal","newFilter","getOptionLabelStg","getOptionLabelStudiensemester","getNotenFilterOptionLabel","actionButtons","alignItems","justifyContent","createButton","titleKey","clickHandler","btn","aspectRatio","transform","stopImmediatePropagation","openTimeline","pids","preserveSelected","newAbgaben","pid","scrollX","scrollY","mappedData","mapProjekteToTableData","projekte","note_bez","erstbetreuer","buildErstbetreuer","zweitbetreuer","buildZweitbetreuer","student_vorname","student_nachname","terminTypOpt","drawer","timelineFormatter","erstbetreuer_full_name","betreuer_vorname","betreuer_nachname","zweitbetreuer_full_name","uniqueBetreuerEmailCount","allRows","cb","getElement","requests","stgOpt","DeadlineOverview","person_uid_prop","fullName","deadlines","deadlineTableOptions","deadlineTableEventHandlers","pdfExportLink","loadDeadlines","dl","stud_titelpre","stud_vorname","stud_nachname","stud_titelpost","fixterminstring","deadlineTable","Studium","studienSemester","selectedStudiensemester","selectedStudiengang","studienOrdnung","selectedStudienordnung","selectedSemester","selectedLehrveranstaltung","studium_studiengang","studium_semester","studium_studienordnung","getDataFromLocalStorage","storeDataToLocalStorage","studienordnung","changeStudiensemester","changeSelectedStudienSemester","changeStudiengang","changeSelectedStudienGang","changeSemester","changeSelectedSemester","changeStudienordnung","newSelectIndex","changeSelectedStudienPlan","extractPropertyValues","studienplan_id","openLvUebersicht","lehrveranstaltung","sortStudienSemester","sem1","sem2","sem1Match","sem1Semester","sem1Year","sem2Match","sem2Semester","sem2Year","setHash","preselected","lv1","lv2","studienordnungTitel","orgform_bezeichnung","studiengangTitel","studiensemesterTitel","studiensemester_regex","selectedLehrveranstaltungTitel","lehrform_kurzbz","computedStudienOrdnung","carry","computedStudienOrdnungSelectValues","diabled","ApiRenderers","loadRenderers","ApiRouteInfo","ciPath","router","VueRouter","createRouter","history","createWebHistory","routes","redirect","route","charAt","beforeEnter","currentRoute","appSideMenuEntries","renderers","isMobile","matchMedia","isInternalRoute","internalBase","origin","startsWith","URL","pathname","matched","rendertype","modalTitle","modalContent","calendarEvent","defineAsyncComponent","calendarEventStyles","head","rel","isChromium","test","navigator","userAgent","isFirefox","overflow","scrollbarWidth","getScrollbarWidth","setScrollbarWidth","string","FhcApps","makeExtendable","directive","afterEach","failure","fullPath"],"mappings":"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"} \ No newline at end of file diff --git a/public/dist/js/apps/LVVerwaltung.js b/public/dist/js/apps/LVVerwaltung.js index 92733c8a8..c0cc943e5 100644 --- a/public/dist/js/apps/LVVerwaltung.js +++ b/public/dist/js/apps/LVVerwaltung.js @@ -1,4 +1,4 @@ -import t from"../../../../index.ci.php/public/js/components/primevue/tabview/tabview.esm.min.js";import e from"../../../../index.ci.php/public/js/components/primevue/tabpanel/tabpanel.esm.min.js";import n from"../../../../index.ci.php/public/js/components/primevue/config/config.esm.min.js";import r from"../../../../index.ci.php/public/js/components/primevue/toast/toast.esm.min.js";import i from"../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import a from"../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";var s={name:"SearchbarResultTemplateAction",emits:["actionexecuted"],props:{res:Object,action:Object},computed:{actionHref(){return"link"!==this.action.type?"javascript:void(0);":"function"==typeof this.action.action?this.action.action(this.res):this.action.action}},methods:{actionFunc(){"function"===this.action.type&&this.action.action(this.res),this.$emit("actionexecuted")},renderif:function(){return void 0===this.action?.renderif||this.action.renderif(this.res)}},template:'\n\t\n\t'},l={name:"SearchbarResultTemplateFrame",components:{ResultAction:s,ResultActions:{name:"SearchbarResultTemplateActions",components:{ResultAction:s},emits:["actionexecuted"],props:{res:Object,actions:Array},methods:{renderif:function(t){return void 0===t?.renderif||t.renderif(this.res)}},template:'\n\t
    \n\t\t\n\t
    '}},emits:["actionexecuted"],props:{res:Object,actions:Object,title:String,image:String,imageFallback:String},template:'\n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t{{ title }}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t
    '},o={name:"SearchbarResultPerson",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},computed:{emails(){return new Set(this.res.email)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t'},d={name:"SearchbarResultRoom",components:{TemplateFrame:l},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{equipment(){return this.res.equipment?this.res.equipment.replace(new RegExp("
    ","ig"),""):""},address(){let t=this.res.zip||"";return this.res.city&&(t+=(t?" ":"")+this.res.city),this.res.street&&(t+=(t?", ":"")+this.res.street),this.res.floor&&(t+=(t?" / ":"")+this.$p.t("search/result_address_floor",this.res)),t||this.$p.t("search/result_address_none")}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_room_address\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ address }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_workplaces\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.sitzplaetze }}\n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_building\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.building }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_equipment\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},c={name:"SearchbarResultEmployee",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_stdkst\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • {{ stdkst }}
    • \n\t\t\t\t\t
    \n\t\t\t\t\t{{ $p.t(\'search/result_stdkst_none\') }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'lehre/organisationseinheit\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • {{ oe }}
    • \n\t\t\t\t\t
    \n\t\t\t\t\t{{ $p.t(\'search/result_oe_none\') }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/telefon\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t'},u={name:"SearchbarResultOrganistationunit",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_parent_oe\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.parentoe_name }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_group_emails\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\t{{ res.mailgroup }}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_leader\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t
      \n\t\t\t\t\t\t
    • {{ leader.name }}
    • \n\t\t\t\t\t
    \n\t\t\t\t\t{{ $p.t(\'search/result_leader_none\') }}\n\t\t\t\t
    \n\t\t\t
    \n\n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_number_of_employees\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.number_of_people }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},p={name:"SearchbarResultStudent",components:{TemplateFrame:l},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{photo_url(){return"simple"!=this.mode?this.res.photo_url:this.res.foto?"data:image/jpeg;base64,"+this.res.foto:null},emails(){return"simple"==this.mode?new Set([this.res.email]):new Set(this.res.email)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_student_uid\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/matrikelnummer\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t
    \n\t'},h={name:"SearchbarResultPrestudent",components:{TemplateFrame:l},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{title(){return"simple"==this.mode?this.res.name:this.res.name+" ("+this.res.status+" "+this.res.stg_kuerzel+")"},photo_url(){return"simple"!=this.mode?this.res.photo_url:this.res.foto?"data:image/jpeg;base64,"+this.res.foto:null},emails(){return"simple"==this.mode?new Set([this.res.email]):new Set(this.res.email)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_student_uid\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.uid }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/matrikelnummer\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.matrikelnr }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_prestudent_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.prestudent_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'lehre/studiengang\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.bezeichnung }} {{ res.orgform ? \'(\' + res.orgform + \')\' : \'\' }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},f={name:"SearchbarResultDms",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},computed:{icon(){switch(this.res.mimetype){case"application/pdf":return"file-pdf";case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":case"application/msword":return"file-word";case"application/vnd.openxmlformats-officedocument.presentationml.presentation":case"application/mspowerpoint":return"file-powerpoint";case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":case"application/vnd.ms-excel":return"file-excel";case"application/x-zip":case"application/zip":return"file-zipper";case"image/jpeg":case"image/gif":case"image/png":return"file-image";default:return"file"}}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_dms_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.dms_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_version\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.version }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_keywords\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.keywords }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'global/beschreibung\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ res.description }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t'},g={name:"SearchbarResultCms",components:{TemplateFrame:l},emits:["actionexecuted"],props:{res:Object,actions:Object},inject:["query"],computed:{preview(){if("redirect"!=this.res.template_kurzbz){let t=this.res.content.replace(//gi,"").replace(/<[^>]+>/gi,"").replace(/^\s+|\s+$/g,"");if(t.length>1e3){let e=t.toLowerCase(),n=Math.min(this.query.split(" ").reduce((t,n)=>{if("or"==n)return t;let r=n.indexOf(":");if(r<0||r>0&&["content","inhalt"].includes(n.split(":")[0])){let r=e.indexOf(n);r>=0&&t.push(r)}return t},[]));if(n){if(!(n+997>=t.length))return"..."+t.substr(n,994)+"...";if(n=t.length-997,n>0)return"..."+t.substr(n,997)}t=t.substr(0,997)+"..."}return t}let t=this.res.content_url;return"../index.ci.php/"==t.substr(0,16)?t=this.$fhcApi.getUri(t.substr(16)):"../"==t.substr(0,3)&&(t=FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/\/+$/,"")+t.substr(2)),''+t+""}},template:'\n\t\n\t\t
    \n\t\t
    \n\t\t\t{{ $p.t(\'search/result_content_none\') }}\n\t\t
    \n\t'},m={name:"SearchbarResultMergedstudent",components:{ResultPrestudent:h,ResultStudent:p},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{prestudent(){return this.res.list.filter(t=>"prestudent"==t.type).pop()}},template:'\n\t\n\t'},v={name:"SearchbarResultMergedperson",components:{TemplateFrame:l,TemplateAction:s},emits:["actionexecuted"],props:{mode:String,res:Object,actions:Object},computed:{person(){const t=this.res.list.reduce((t,e)=>[...t,...Array.isArray(e.email)?e.email:[e.email]],[]),e=this.res.list.find(t=>"person"==t.type);if(e)return{...e,email:t};const{person_id:n,name:r}=this.res.list[0];let i;if("simple"==this.mode){let t=(this.students?this.students.find(t=>t.foto):null)?.foto;t&&(t="data:image/jpeg;base64,"+t),i=t||this.employee?.photo_url}else i=((this.students?this.students.find(t=>t.photo_url):null)||this.employee)?.photo_url;return{person_id:n,name:r,photo_url:i,email:t}},employee(){return this.res.list.find(t=>["employee","unassigned_employee","mitarbeiter","mitarbeiter_ohne_zuordnung"].includes(t.type))||null},students(){const t=this.res.list.filter(t=>["student","prestudent","studentcis","studentStv"].includes(t.type)).filter((t,e,n)=>{if("prestudent"===t.type)return!0;return!n.some(e=>e.uid===t.uid&&"prestudent"===e.type)}).sort((t,e)=>(t.sort||0)-(e.sort||0));return t.length?t:null},emails(){return new Set(this.person.email)},telurl(){return"tel:"+this.employee?.phone},inaktiv(){return this.res.list.some(t=>!1===t?.aktiv)}},template:'\n\t\n\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'person/person_id\') }}
    \n\t\t\t\t
    \n\t\t\t\t\t{{ person.person_id }}\n\t\t\t\t
    \n\t\t\t
    \n\t\t\t
    \n\t\t\t\t
    {{ $p.t(\'search/result_emails\') }}
    \n\t\t\t\t\n\t\t\t
    \n\n\t\t\t\n\n\t\t\t\n\t\t
    \n\t'},b={name:"FhcSearchbar",components:{person:o,room:d,employee:c,organisationunit:u,student:p,prestudent:h,dms:f,cms:g,mergedStudent:m,mergedPerson:v},props:{searchoptions:{type:Object,required:!0},searchfunction:{type:Function,required:!0},showBtnSubmit:Boolean},provide(){return{query:Vue.computed(()=>this.lastQuery)}},data:function(){return{searchtimer:null,hidetimer:null,searchsettings:{searchstr:this.getSearchStr(),types:this.getInitiallySelectedTypes()},searchresult:[],searchmode:"",showresult:!1,searching:!1,error:null,abortController:null,settingsDropdown:null,lastQuery:""}},computed:{searchTypesPlaceholder(){return this.searchsettings.types.length?this.searchsettings.types.map(t=>this.typeLabels[t]).join(" / "):Object.values(this.typeLabels).join(" / ")},types(){return this.searchoptions.types?Array.isArray(this.searchoptions.types)?this.searchoptions.types:Object.keys(this.searchoptions.types):[]},typeLabels(){return this.searchoptions.types?Array.isArray(this.searchoptions.types)?this.searchoptions.types.reduce((t,e)=>(t[e]=e,t),{}):this.searchoptions.types:{}}},template:'\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n