diff --git a/application/components/filters/Vertragsverwaltung.php b/application/components/filters/Vertragsverwaltung.php new file mode 100644 index 000000000..b96aee8ea --- /dev/null +++ b/application/components/filters/Vertragsverwaltung.php @@ -0,0 +1,36 @@ + 'core', + 'datasetName' => 'vertragsverwaltung', + 'query' => ' + SELECT + uid, + person_id, + vorname, + nachname, + gebdatum, + vertragsarten, + unternehmen, + ids, + aktiv + FROM + ( + SELECT + b.uid , p.person_id, + p.vorname, p.nachname, + gebdatum, + STRING_AGG(DISTINCT va.bezeichnung, \', \') AS Vertragsarten, + STRING_AGG(DISTINCT u.bezeichnung, \', \') AS Unternehmen, + STRING_AGG(d.dienstverhaeltnis_id::TEXT, \', \') AS ids, + b.aktiv + FROM + hr.tbl_dienstverhaeltnis d + JOIN public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid + JOIN public.tbl_person p ON p.person_id = b.person_id + JOIN public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz + JOIN hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz + GROUP BY b.uid, p.person_id, p.vorname, p.nachname, b.aktiv + ) as vertragsdaten + ', + 'requiredPermissions' => 'vertrag/mitarbeiter' + ); diff --git a/application/config/navigation.php b/application/config/navigation.php index f7ba8dca3..c70aba57c 100644 --- a/application/config/navigation.php +++ b/application/config/navigation.php @@ -163,6 +163,13 @@ $config['navigation_header'] = array( 'expand' => true, 'sort' => 50, 'requiredPermissions' => 'lehre/gruppenmanager:r' + ), + 'vertragsverwaltung' => array( + 'link' => site_url('vertragsverwaltung'), + 'description' => 'Vertragsverwaltung', + 'expand' => true, + 'sort' => 51, + 'requiredPermissions' => 'vertrag/mitarbeiter:r' ) ) ), @@ -335,6 +342,18 @@ $config['navigation_menu']['system/issues/Issues/*'] = array( 'target' => '_blank', 'requiredPermissions' => array('admin:rw') ), + +); + +$config['navigation_menu']['vertragsverwaltung/*'] = array( + 'vertragsverwaltung' => array( + 'link' => site_url('vertragsverwaltung'), + 'description' => 'Vertragsverwaltung', + 'icon' => 'home', + 'sort' => 100, + 'target' => '_blank', + 'requiredPermissions' => array('vertrag/mitarbeiter:r') + ) ); $config['navigation_menu']['apps'] = [ diff --git a/application/config/stv.php b/application/config/stv.php index 8942c35e6..34a30a96e 100644 --- a/application/config/stv.php +++ b/application/config/stv.php @@ -130,3 +130,16 @@ $config['students_tab_order'] = [ 'combinePeople', 'archive', ]; + +$config['stv_prestudent_tags'] = [ + 'prioone' => ['readonly' => false], + 'priotwo' => ['readonly' => true], + 'hinweis' => ['readonly' => false], + 'hinweis_assistenz' => ['readonly' => true], + 'hinweis_kf' => ['readonly' => true], + 'hinweis_lehrende' => ['readonly' => false], + 'hinweis_stg_kf' => ['readonly' => true], + 'finished_stg' => ['readonly' => true], + 'finished_kf' => ['readonly' => true], + 'inwork_kf' => ['readonly' => true], +]; diff --git a/application/controllers/Cis/MyLv.php b/application/controllers/Cis/MyLv.php index 49a938553..819d56b05 100644 --- a/application/controllers/Cis/MyLv.php +++ b/application/controllers/Cis/MyLv.php @@ -33,9 +33,4 @@ class MyLv extends Auth_Controller $this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'MyLv']); } - - public function Info($studien_semester,$lvid) - { - $this->load->view('Cis/LvInfo',['lvid'=> $lvid, 'studien_semester' => $studien_semester]); - } } diff --git a/application/controllers/Studentenverwaltung.php b/application/controllers/Studentenverwaltung.php index 36c91d5f6..1699ba740 100644 --- a/application/controllers/Studentenverwaltung.php +++ b/application/controllers/Studentenverwaltung.php @@ -28,7 +28,7 @@ class Studentenverwaltung extends Auth_Controller 'basis/prestudentstatus' => $this->permissionlib->isBerechtigt('basis/prestudentstatus'), 'assistenz_stgs' => $this->permissionlib->getSTG_isEntitledFor('assistenz'), 'admin' => $this->permissionlib->isBerechtigt('admin'), - 'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz','suid'), + 'assistenz_schreibrechte' => $this->permissionlib->isBerechtigt('assistenz', 'suid'), 'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'), 'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'), 'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'), @@ -43,3 +43,5 @@ class Studentenverwaltung extends Auth_Controller ]); } } + + diff --git a/application/controllers/Vertragsverwaltung.php b/application/controllers/Vertragsverwaltung.php new file mode 100644 index 000000000..f68ed1737 --- /dev/null +++ b/application/controllers/Vertragsverwaltung.php @@ -0,0 +1,30 @@ +method] = ['vertrag/mitarbeiter:r']; + #$permissions[$router->method] = ['admin:rw']; + parent::__construct($permissions); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + } + + /** + * @return void + */ + public function _remap() + { + $this->load->view('Vertragsverwaltung', [ + 'permissions' => [ + 'vertragsverwaltung_schreibrechte' => $this->permissionlib->isBerechtigt('vertrag/mitarbeiter', 'suid') + ] + ]); + } +} diff --git a/application/controllers/api/frontend/v1/detailheader/Detailheader.php b/application/controllers/api/frontend/v1/detailheader/Detailheader.php new file mode 100644 index 000000000..ada10c5b6 --- /dev/null +++ b/application/controllers/api/frontend/v1/detailheader/Detailheader.php @@ -0,0 +1,53 @@ + ['vertrag/mitarbeiter:r'], + 'getPersonAbteilung' => ['vertrag/mitarbeiter:r'], + 'getLeitungOrg' => ['vertrag/mitarbeiter:r'], + ]); + } + + public function getHeader($person_id) + { + $this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel'); + + $result = $this->Mitarbeitermodel->getHeader($person_id); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess(current($data)); + } + + public function getPersonAbteilung($mitarbeiter_uid) + { + $this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel'); + + $result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess(current($data)); + } + + public function getLeitungOrg($oekurzbz) + { + $this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel'); + + $result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz); + + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess(current($data)); + } + +} + + diff --git a/application/controllers/api/frontend/v1/fotoHandling/Foto.php b/application/controllers/api/frontend/v1/fotoHandling/Foto.php new file mode 100644 index 000000000..4945ddd85 --- /dev/null +++ b/application/controllers/api/frontend/v1/fotoHandling/Foto.php @@ -0,0 +1,237 @@ + ['admin:r', 'assistenz:r'], + 'deleteFoto' => ['admin:r', 'assistenz:r'], + ]); + + //Load Models and Libraries + $this->load->model('person/Person_model', 'PersonModel'); + $this->load->model("crm/Akte_model", "AkteModel"); + $this->load->model('person/Fotostatusperson_model', 'FotostatusPersonModel'); + + $this->loadPhrases([ + 'ui', + 'header' + ]); + } + + public function uploadFoto($person_id) + { + if(!$person_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL); + } + + $data = json_decode(file_get_contents("php://input"), true); + + if (!empty($data['image'])) + { + $base64 = $data['image']; + $resizedImage1 = $this->_resize($base64, 827, 1063); + + if (is_null($resizedImage1)) + return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL); + + $akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => 'Lichtbil')); + + $akteUpdateData = array( + 'dokument_kurzbz' => 'Lichtbil', + 'person_id' => $person_id, + 'inhalt' => $resizedImage1, + 'mimetype' => 'image/jpg', + 'erstelltam' => date('c'), + 'gedruckt' => false, + 'titel' => 'Lichtbild_' . $person_id . '.jpg', + 'bezeichnung' => 'Lichtbild gross', + 'insertamum' => date('c'), + 'insertvon' => getAuthUID(), + ); + + if (hasData($akte)) { + $akte_id = getData($akte)[0]->akte_id; + + $akteUpdateData['updateamum'] = date('c'); + $akteUpdateData['updatevon'] = getAuthUID(); + $akteResult = $this->AkteModel->update(array('akte_id' => $akte_id), $akteUpdateData); + } else { + $akteResult = $this->AkteModel->insert($akteUpdateData); + } + + if (isError($akteResult)) { + return $this->terminateWithError(getError($akteResult), self::ERROR_TYPE_GENERAL); + } + + $resizedImage2 = $this->_resize($base64, 101, 130); + + if (is_null($resizedImage2)) + return $this->terminateWithError($this->p->t('header', 'error_fotoupload'), self::ERROR_TYPE_GENERAL); + + $result = $this->_updateFoto($person_id, $resizedImage2); + + if (!isError($result)) { + $this->FotostatusPersonModel->insert(array( + 'person_id' => $person_id, + 'fotostatus_kurzbz' => 'hochgeladen', + 'datum' => date('Y-m-d'), + 'updateamum' => date('c'), + 'updatevon' => getAuthUID(), + 'insertamum' => date('c'), + 'insertvon' => getAuthUID(), + )); + + return $this->terminateWithSuccess($base64); + } + } + else + { + $this->terminateWithError($this->p->t('header', 'error_noPhoto'), self::ERROR_TYPE_GENERAL); + } + } + + public function deleteFoto($person_id) + { + if(!$person_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person_id']), self::ERROR_TYPE_GENERAL); + } + + $result = $this->_deleteFoto($person_id); + + if (isError($result)) + { + return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + } + return $this->terminateWithSuccess($result); + } + + private function _resize($imageData, $maxwidth, $maxheight, $quality = 90) + { + $meta = getimagesize($imageData); + if (!$meta) + { + return null; + } + + $src_width = $meta[0]; + $src_height = $meta[1]; + $mime = $meta['mime']; + + switch ($mime) { + case 'image/jpeg': + case 'image/jpg': + $imagecreated = imagecreatefromjpeg($imageData); + break; + case 'image/png': + $imagecreated = imagecreatefrompng($imageData); + break; + case 'image/gif': + $imagecreated = imagecreatefromgif($imageData); + break; + default: + return null; + } + + + if (!$imagecreated) + { + return null; + } + + $src_aspect_ratio = $src_width / $src_height; + $thu_aspect_ratio = $maxwidth / $maxheight; + + if ($src_width <= $maxwidth && $src_height <= $maxheight) + { + $thu_width = $src_width; + $thu_height = $src_height; + } + elseif ($thu_aspect_ratio > $src_aspect_ratio) + { + $thu_width = (int) ($maxheight * $src_aspect_ratio); + $thu_height = $maxheight; + } + else + { + $thu_width = $maxwidth; + $thu_height = (int) ($maxwidth / $src_aspect_ratio); + } + + $imageScaled = imagecreatetruecolor($thu_width, $thu_height); + + if ($mime === 'image/png') + { + $background = imagecolorallocate($imageScaled , 0, 0, 0); + imagecolortransparent($imageScaled, $background); + imagealphablending($imageScaled, false); + imagesavealpha($imageScaled, true); + } + + imagecopyresampled($imageScaled, $imagecreated, 0, 0, 0, 0, $thu_width, $thu_height, $src_width, $src_height); + + if ($mime === "image/gif") + { + $background = imagecolorallocate($imageScaled, 0, 0, 0); + imagecolortransparent($imageScaled, $background); + } + + if (!empty($imageScaled)) + { + ob_start(); + + if ($mime == 'image/png') + imagepng($imageScaled, NULL); + else if ($mime === 'image/gif') + imagegif($imageScaled, NULL); + else + imagejpeg($imageScaled, NULL, $quality); + + $resizedImageData = ob_get_contents(); + ob_end_clean(); + @imagedestroy($imagecreated); + @imagedestroy($imageScaled); + + + if (!empty($resizedImageData)) + { + return base64_encode($resizedImageData); + } + return null; + } + return null; + } + + private function _updateFoto($person_id, $foto) + { + $personJson['foto'] = $foto; + $result = $this->PersonModel->update($person_id, $personJson); + + if (isError($result)) + { + return error($result->msg, EXIT_ERROR); + } + + return $result; + } + + private function _deleteFoto($person_id) + { + $personJson['foto'] = null; + $result = $this->PersonModel->update($person_id, $personJson); + + if (isError($result)) + { + return error($result->msg, EXIT_ERROR); + } + + return $result; + } +} diff --git a/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php b/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php new file mode 100644 index 000000000..30dae9a50 --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizAnrechnung.php @@ -0,0 +1,44 @@ + ['admin:r', 'assistenz:r'], + ]); + + //Load Models + $this->load->model('person/Notiz_model', 'NotizModel'); + $this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel'); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + + // Load language phrases + $this->loadPhrases([ + 'ui' + ]); + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "anrechnung_id") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + //TODO define permission + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/notiz/NotizBestellung.php b/application/controllers/api/frontend/v1/notiz/NotizBestellung.php new file mode 100644 index 000000000..e30628f33 --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizBestellung.php @@ -0,0 +1,43 @@ + ['admin:r', 'assistenz:r'], + ]); + + //Load Models + $this->load->model('person/Notiz_model', 'NotizModel'); + $this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel'); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + + // Load language phrases + $this->loadPhrases([ + 'ui' + ]); + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "bestellung_id") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + //TODO define permission + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/notiz/NotizLehreinheit.php b/application/controllers/api/frontend/v1/notiz/NotizLehreinheit.php index f8e1f816b..a3b96d477 100644 --- a/application/controllers/api/frontend/v1/notiz/NotizLehreinheit.php +++ b/application/controllers/api/frontend/v1/notiz/NotizLehreinheit.php @@ -17,5 +17,106 @@ class NotizLehreinheit extends Notiz_Controller 'getMitarbeiter' => ['admin:r', 'assistenz:r'], 'isBerechtigt' => ['admin:r', 'assistenz:r'], ]); + + //Load Models + $this->load->model('person/Notiz_model', 'NotizModel'); + $this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel'); + $this->load->model('education/Lehreinheit_model', 'LehreinheitModel'); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + + //Permission checks for allowed Oes + $allowedOes = $this->permissionlib->getOE_isEntitledFor('assistenz') ?: []; + + if ($this->router->method == 'addNewNotiz') + { + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $lehreinheit_id = $post_data['id']; + + if(!$lehreinheit_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes); + } + + if ($this->router->method == 'updateNotiz') + { + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $notiz_id = $post_data['notiz_id']; + + if(!$notiz_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL); + } + + //get lehreinheit_id + $result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]); + + $data = $this->getDataOrTerminateWithError($result); + $lehreinheit_id = current($data)->lehreinheit_id; + + if(!$lehreinheit_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes); + } + + if ($this->router->method == 'deleteNotiz') + { + $notiz_id = $this->input->post('notiz_id'); + $lehreinheit_id = $this->input->post('id'); + + if(!$notiz_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL); + } + + if(!$lehreinheit_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes); + } + + // Load language phrases + $this->loadPhrases([ + 'ui' + ]); } -} \ No newline at end of file + + private function _checkAllowedOesFromLehreinheit($lehreinheit_id, $allowedOes) + { + //get oe from lehreinheit + $result = $this->LehreinheitModel->getOes($lehreinheit_id); + $data = $this->getDataOrTerminateWithError($result); + $oes = current($data); + + if (!in_array($oes, $allowedOes)) + { + return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg') . " " . $oes, self::ERROR_TYPE_GENERAL); + } + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "lehreinheit_id") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } + + +} diff --git a/application/controllers/api/frontend/v1/notiz/NotizMitarbeiter.php b/application/controllers/api/frontend/v1/notiz/NotizMitarbeiter.php new file mode 100644 index 000000000..f7de4b47b --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizMitarbeiter.php @@ -0,0 +1,44 @@ + ['admin:r', 'assistenz:r'], + ]); + + //Load Models + $this->load->model('person/Notiz_model', 'NotizModel'); + $this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel'); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + + // Load language phrases + $this->loadPhrases([ + 'ui' + ]); + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "mitarbeiter_uid") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + //TODO define permission + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/notiz/NotizPerson.php b/application/controllers/api/frontend/v1/notiz/NotizPerson.php index 23a8fd199..7f0645bc6 100644 --- a/application/controllers/api/frontend/v1/notiz/NotizPerson.php +++ b/application/controllers/api/frontend/v1/notiz/NotizPerson.php @@ -20,33 +20,123 @@ class NotizPerson extends Notiz_Controller 'isBerechtigt' => ['admin:r', 'assistenz:r'], 'getCountNotes' => ['admin:r', 'assistenz:r'], ]); + + //Load Models + $this->load->model('person/Benutzer_model', 'BenutzerModel'); + $this->load->model('crm/Student_model', 'StudentModel'); + + //Permission checks for allowed Oes + if ($this->router->method == 'addNewNotiz') + { + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $person_id = $post_data['id']; + + $allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []; + + if(!$person_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkIfBerechtigungForOneUidExists($person_id, $allowedStgs); + } + + if ( $this->router->method == 'updateNotiz') + { + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $notiz_id = $post_data['notiz_id']; + + if(!$notiz_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL); + } + + //get person_id + $result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]); + + $data = $this->getDataOrTerminateWithError($result); + $person_id = current($data)->person_id; + + $allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []; + $this->_checkIfBerechtigungForOneUidExists($person_id, $allowedStgs); + } + + if ($this->router->method == 'deleteNotiz' ) + { + $notiz_id = $this->input->post('notiz_id'); + $person_id = $this->input->post('id'); + + if(!$notiz_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL); + } + + if(!$person_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'person ID']), self::ERROR_TYPE_GENERAL); + } + + $allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []; + $this->_checkIfBerechtigungForOneUidExists($person_id, $allowedStgs); + } } public function isBerechtigt($id, $typeId) { if($typeId != "person_id") { - return $this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('ui', 'error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); } - //TODO define permission if (!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) { $result = $this->p->t('lehre', 'error_keineSchreibrechte'); - - return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); } - return $this->outputJsonSuccess(true); + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); } - public function loadDokumente() + //stv: if person has permission of one studiengang of person -> permission to add/update/delete Note + private function _checkIfBerechtigungForOneUidExists($person_id, $allowedStgs) { - $notiz_id = $this->input->post('notiz_id'); + //get all studentUids of person_id + $result = $this->BenutzerModel->loadWhere(['person_id' => $person_id]); + $data = $this->getDataOrTerminateWithError($result); - // TODO(chris): make CI variant of endpoint - $this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || campus.tbl_dms_version.dms_id AS preview'); - - return parent::loadDokumente(); + $checkarray = []; + foreach ($data as $item) + { + //check if isStudent + $result = $this->StudentModel->isStudent($item->uid); + + $isStudent = $this->getDataOrTerminateWithError($result); + if($isStudent) + { + $checkarray[] = $this->_checkAllowedStgsFromUid($item->uid, $allowedStgs); + } + + } + if (!in_array(1, $checkarray)) + return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL); } -} \ No newline at end of file + + private function _checkAllowedStgsFromUid($student_uid, $allowedStgs) + { + $this->load->model('crm/Student_model', 'StudentModel'); + $result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]); + + $data = $this->getDataOrTerminateWithError($result); + $studiengang_kz = current($data)->studiengang_kz; + + if (!in_array($studiengang_kz, $allowedStgs)) + { + return 0; + } + else + { + return 1; + } + } +} diff --git a/application/controllers/api/frontend/v1/notiz/NotizPrestudent.php b/application/controllers/api/frontend/v1/notiz/NotizPrestudent.php new file mode 100644 index 000000000..5e6cd747c --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizPrestudent.php @@ -0,0 +1,117 @@ + ['admin:r', 'assistenz:r'], + ]); + + //Load Models + $this->load->model('person/Notiz_model', 'NotizModel'); + $this->load->model('person/Notizzuordnung_model', 'NotizzuordnungModel'); + $this->load->model('crm/Student_model', 'StudentModel'); + + // Load Libraries + $this->load->library('VariableLib', ['uid' => getAuthUID()]); + + // Load language phrases + $this->loadPhrases([ + 'ui' + ]); + + //Permission checks for Studiengangsarray + $allowedStgs = $this->permissionlib->getSTG_isEntitledFor('assistenz') ?: []; + + if ($this->router->method == 'addNewNotiz') + { + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $prestudent_id = $post_data['id']; + + if(!$prestudent_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Lehreinheit ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs); + } + + if ($this->router->method == 'updateNotiz') + { + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $notiz_id = $post_data['notiz_id']; + + if(!$notiz_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL); + } + + //get prestudent_id + $result = $this->NotizzuordnungModel->loadWhere(['notiz_id' => $notiz_id]); + + $data = $this->getDataOrTerminateWithError($result); + $prestudent_id = current($data)->prestudent_id; + + if(!$prestudent_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs); + } + + if ($this->router->method == 'deleteNotiz') + { + $notiz_id = $this->input->post('notiz_id'); + $prestudent_id = $this->input->post('id'); + + if(!$notiz_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Notiz ID']), self::ERROR_TYPE_GENERAL); + } + + if(!$prestudent_id) + { + return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL); + } + $this->_checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs); + } + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "prestudent_id") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } + + private function _checkAllowedOesFromPrestudent($prestudent_id, $allowedStgs) + { + $student_uid = $this->StudentModel->getUID($prestudent_id); + + $result = $this->StudentModel->loadWhere(['student_uid' => $student_uid]); + + $data = $this->getDataOrTerminateWithError($result); + $studiengang_kz = current($data)->studiengang_kz; + + if (!in_array($studiengang_kz, $allowedStgs)) + { + return $this->terminateWithError($this->p->t('ui', 'error_keineBerechtigungStg'), self::ERROR_TYPE_GENERAL); + } + } + +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/notiz/NotizProjekt.php b/application/controllers/api/frontend/v1/notiz/NotizProjekt.php new file mode 100644 index 000000000..9cdde36ae --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizProjekt.php @@ -0,0 +1,32 @@ + ['admin:r', 'assistenz:r'], + ]); + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "projekt_kurzbz") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + //TODO define permission + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/notiz/NotizProjektphase.php b/application/controllers/api/frontend/v1/notiz/NotizProjektphase.php new file mode 100644 index 000000000..7a82c658e --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizProjektphase.php @@ -0,0 +1,32 @@ + ['admin:r', 'assistenz:r'], + ]); + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "projektphase_id") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + //TODO define permission + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/notiz/NotizProjekttask.php b/application/controllers/api/frontend/v1/notiz/NotizProjekttask.php new file mode 100644 index 000000000..aadb04f40 --- /dev/null +++ b/application/controllers/api/frontend/v1/notiz/NotizProjekttask.php @@ -0,0 +1,32 @@ + ['admin:r', 'assistenz:r'], + ]); + } + + public function isBerechtigt($id, $typeId) + { + if($typeId != "projekttask_id") + { + $this->terminateWithError($this->p->t('ui','error_typeNotizIdIncorrect'), self::ERROR_TYPE_GENERAL); + } + + //TODO define permission + if(!$this->permissionlib->isBerechtigt('admin', 'suid') && !$this->permissionlib->isBerechtigt('assistenz', 'suid')) + { + $result = $this->p->t('lehre','error_keineSchreibrechte'); + + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + } + $this->terminateWithSuccess("berechtigt in überschreibender Funktion"); + } +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/stv/Aufnahmetermine.php b/application/controllers/api/frontend/v1/stv/Aufnahmetermine.php index 26033908d..437ba42ad 100644 --- a/application/controllers/api/frontend/v1/stv/Aufnahmetermine.php +++ b/application/controllers/api/frontend/v1/stv/Aufnahmetermine.php @@ -36,15 +36,44 @@ class Aufnahmetermine extends FHCAPI_Controller // Load models $this->load->model('crm/Reihungstest_model', 'ReihungstestModel'); $this->load->model('crm/RtPerson_model', 'RtPersonModel'); + $this->load->model('organisation/Studienplan_model', 'StudienplanModel'); + $this->load->model('organisation/Studienordnung_model', 'StudienordnungModel'); + $this->load->model('organisation/Studiengang_model', 'StudiengangModel'); } public function getAufnahmetermine($person_id) { $result = $this->ReihungstestModel->getReihungstestPerson($person_id); + $arrayRt = $this->getDataOrTerminateWithError($result); - $data = $this->getDataOrTerminateWithError($result); + foreach ($arrayRt as $item) { + //Studienplan + $result = $this->StudienplanModel->loadWhere([ + 'studienplan_id' => $item->studienplan_id + ]); + $data = $this->getDataOrTerminateWithError($result); + $studienordnung_id_ber = current($data)->studienordnung_id; - $this->terminateWithSuccess($data); + //Studienordnung + $result = $this->StudienordnungModel->loadWhere([ + 'studienordnung_id' => $studienordnung_id_ber + ]); + $data = $this->getDataOrTerminateWithError($result); + $studiengang_kz_ber = current($data)->studiengang_kz; + + //Studiengang von studiengang_kz_ber + $result = $this->StudiengangModel->load($studiengang_kz_ber); + $data = $this->getDataOrTerminateWithError($result); + + $studiengangkurzbzlang_ber = current($data)->kurzbzlang; + $typ_ber = current($data)->typ; + + //add to Array + $item->studiengang_kz_ber = $studiengang_kz_ber; + $item->studiengangkurzbzlang_ber = $studiengangkurzbzlang_ber; + $item->studiengangtyp_ber = $typ_ber; + } + $this->terminateWithSuccess($arrayRt); } public function insertAufnahmetermin() @@ -60,7 +89,6 @@ class Aufnahmetermine extends FHCAPI_Controller return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Person ID']), self::ERROR_TYPE_GENERAL); } - $rt_id = (isset($formData['rt_id']) && !empty($formData['rt_id'])) ? $formData['rt_id'] : null; $anmeldedatum = (isset($formData['anmeldedatum']) && !empty($formData['anmeldedatum'])) ? $formData['anmeldedatum'] : null; $teilgenommen = (isset($formData['teilgenommen']) && !empty($formData['teilgenommen'])) ? $formData['teilgenommen'] : false; @@ -224,7 +252,11 @@ class Aufnahmetermine extends FHCAPI_Controller ) ); - $data = $this->getDataOrTerminateWithError($result); + //check if existing placementtest + if(!hasData($result)) + $this->terminateWithSuccess([]); + else + $data = getData($result); $studienplan_arr = []; $include_ids = []; @@ -233,12 +265,18 @@ class Aufnahmetermine extends FHCAPI_Controller if($item->studienplan_id != null) $studienplan_arr[] = $item->studienplan_id; } + if(!hasData($studienplan_arr)) + $this->terminateWithSuccess([]); //get Placementtests Person $person_id = $this->_getPersonId($prestudent_id); $resultRt = $this->ReihungstestModel->getReihungstestPerson($person_id); - $dataRt = $this->getDataOrTerminateWithError($resultRt); + //check if existing placementtest + if(!hasData($result)) + $this->terminateWithSuccess([]); + else + $dataRt = getData($resultRt); foreach ($dataRt as $item) { @@ -354,6 +392,7 @@ class Aufnahmetermine extends FHCAPI_Controller $person_id = $this->input->get('person_id'); $punkte = $this->input->get('punkte'); $reihungstest_id = $this->input->get('reihungstest_id'); + $has_excluded_gebiete = $this->input->get('hasExcludedAreas'); if(!$reihungstest_id) { @@ -364,22 +403,27 @@ class Aufnahmetermine extends FHCAPI_Controller $studiengang_kz = $this->input->get('studiengang_kz'); $this->load->model('testtool/Ablauf_model', 'AblaufModel'); - $result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz); + $result = $this->AblaufModel->getAblaufGebieteAndGewichte($studiengang_kz, 1); $data = $this->getDataOrTerminateWithError($result); $weightedArray = []; + $basis_gebiet_id_arr = []; + $basis_gebiet_id_toString = ''; foreach ($data as $abl) { $weightedArray[$abl->gebiet_id] = $abl->gewicht; + $basis_gebiet_id_arr[]= $abl->gebiet_id; } + $basis_gebiet_id_toString = implode(', ', $basis_gebiet_id_arr); - $result = $this->ReihungstestModel->getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray); - -/* if (isError($result)) - { - $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); - }*/ - + $result = $this->ReihungstestModel->getReihungstestErgebnisPerson( + $person_id, + $punkte, + $reihungstest_id, + $weightedArray, + $has_excluded_gebiete, + $basis_gebiet_id_toString + ); $this->terminateWithSuccess($result); } diff --git a/application/controllers/api/frontend/v1/stv/Config.php b/application/controllers/api/frontend/v1/stv/Config.php index c787381f0..bc1fbebfe 100644 --- a/application/controllers/api/frontend/v1/stv/Config.php +++ b/application/controllers/api/frontend/v1/stv/Config.php @@ -200,7 +200,8 @@ class Config extends FHCAPI_Controller 'type' => 'select', 'values' => $buchungstyp_kurzbz_plus_all, 'value_key' => 'buchungstyp_kurzbz', - 'label_key' => 'beschreibung' + 'label_key' => 'beschreibung', + 'default' => 'all' ], 'samestg' => [ 'type' => 'bool', @@ -226,7 +227,8 @@ class Config extends FHCAPI_Controller 'type' => 'select', 'values' => $buchungstyp_kurzbz_plus_all, 'value_key' => 'buchungstyp_kurzbz', - 'label_key' => 'beschreibung' + 'label_key' => 'beschreibung', + 'default' => 'all' ], 'samestg' => [ 'type' => 'bool', diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php index 9f54d0aa4..b8c7830bd 100644 --- a/application/controllers/api/frontend/v1/stv/Dokumente.php +++ b/application/controllers/api/frontend/v1/stv/Dokumente.php @@ -753,6 +753,10 @@ class Dokumente extends FHCAPI_Controller ); $data = $this->getDataOrTerminateWithError($result); + if(!(is_array($data) && count($data) > 0)) + { + return null; + } $student = current($data); return $student->student_uid; diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index 2fb354f0c..7694807e7 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -108,6 +108,10 @@ class Student extends FHCAPI_Controller $this->PrestudentModel->addSelect('p.matr_nr'); $this->PrestudentModel->addSelect('p.anrede'); $this->PrestudentModel->addSelect('p.zugangscode'); + if($this->permissionlib->isBerechtigt('student/bpk')) + { + $this->PrestudentModel->addSelect('p.bpk'); + } if (defined('ACTIVE_ADDONS') && strpos(ACTIVE_ADDONS, 'bewerbung') !== false) { $this->PrestudentModel->addSelect( diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php index acacca052..55f4b8976 100644 --- a/application/controllers/api/frontend/v1/stv/Students.php +++ b/application/controllers/api/frontend/v1/stv/Students.php @@ -611,7 +611,7 @@ class Students extends FHCAPI_Controller if (!$verband && !$gruppe && $orgform_kurzbz !== null) { $this->PrestudentModel->db->where( "( - SELECT orgform_kurzbz + SELECT orgform_kurzbz FROM public.tbl_prestudentstatus WHERE prestudent_id=tbl_prestudent.prestudent_id AND studiensemester_kurzbz=" . $this->PrestudentModel->escape($studiensemester_kurzbz) . " @@ -850,6 +850,41 @@ class Students extends FHCAPI_Controller { $stdsemEsc = $studiensemester_kurzbz ? $this->PrestudentModel->escape($studiensemester_kurzbz) : 'NULL'; + $this->load->config('stv'); + $tags = $this->config->item('stv_prestudent_tags'); + + $whereTags = ''; + if (is_array($tags) && !isEmptyArray($tags)) { + $tags = array_keys($tags); + + foreach ($tags as $key => $tag) { + $tags[$key] = $this->db->escape($tag); + } + $whereTags = " AND nt.typ_kurzbz IN (" . implode(",", $tags) . ")"; + } + $subQueryTag = " + ( + SELECT + tag.prestudent_id, + COALESCE(json_agg(tag ORDER BY tag.done), '[]'::json) AS tags + FROM ( + SELECT DISTINCT ON (n.notiz_id) + n.notiz_id AS id, + nt.typ_kurzbz, + array_to_json(nt.bezeichnung_mehrsprachig)->>0 AS beschreibung, + n.text AS notiz, + nt.style, + n.erledigt AS done, + nz.prestudent_id + FROM public.tbl_notizzuordnung AS nz + JOIN public.tbl_notiz AS n ON nz.notiz_id = n.notiz_id + JOIN public.tbl_notiz_typ AS nt ON n.typ = nt.typ_kurzbz " + . $whereTags . + " + ) AS tag + GROUP BY tag.prestudent_id + ) AS tag_data_agg + "; $this->PrestudentModel->addJoin('public.tbl_studiengang stg', 'studiengang_kz', 'LEFT'); $this->PrestudentModel->addJoin('public.tbl_person p', 'person_id'); @@ -872,8 +907,11 @@ class Students extends FHCAPI_Controller AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT'); + $this->PrestudentModel->addJoin($subQueryTag, 'tag_data_agg.prestudent_id = tbl_prestudent.prestudent_id', 'LEFT'); + $this->PrestudentModel->addSelect("b.uid"); + $this->PrestudentModel->addSelect('tag_data_agg.tags'); $this->PrestudentModel->addSelect('titelpre'); $this->PrestudentModel->addSelect('nachname'); $this->PrestudentModel->addSelect('vorname'); @@ -931,6 +969,7 @@ class Students extends FHCAPI_Controller $this->PrestudentModel->addSelect('mentor'); $this->PrestudentModel->addSelect('b.aktiv AS bnaktiv'); + $this->PrestudentModel->addSelect('unruly'); $this->PrestudentModel->db->where_in('tbl_prestudent.studiengang_kz', $this->allowedStgs); diff --git a/application/controllers/api/frontend/v1/stv/Tags.php b/application/controllers/api/frontend/v1/stv/Tags.php new file mode 100644 index 000000000..3004a1f3b --- /dev/null +++ b/application/controllers/api/frontend/v1/stv/Tags.php @@ -0,0 +1,48 @@ + self::BERECHTIGUNG_KURZBZ, + 'getTags' => self::BERECHTIGUNG_KURZBZ, + 'addTag' => self::BERECHTIGUNG_KURZBZ, + 'updateTag' => self::BERECHTIGUNG_KURZBZ, + 'doneTag' => self::BERECHTIGUNG_KURZBZ, + 'deleteTag' => self::BERECHTIGUNG_KURZBZ + ]); + + $this->config->load('stv'); + } + + public function getTag($readonly_tags = null) + { + parent::getTag($this->config->item('stv_prestudent_tags')); + } + public function getTags($tags = null) + { + parent::getTags($this->config->item('stv_prestudent_tags')); + } + public function addTag($withZuordnung = true, $updatable_tags = null) + { + parent::addTag(true, $this->config->item('stv_prestudent_tags')); + } + public function updateTag($updatable_tags = null) + { + parent::updateTag($this->config->item('stv_prestudent_tags')); + } + public function deleteTag($withZuordnung = true, $updatable_tags = null) + { + parent::deleteTag(true, $this->config->item('stv_prestudent_tags')); + } + public function doneTag($updatable_tags = null) + { + parent::doneTag($this->config->item('stv_prestudent_tags')); + } +} diff --git a/application/controllers/api/frontend/v1/vertraege/Config.php b/application/controllers/api/frontend/v1/vertraege/Config.php new file mode 100644 index 000000000..a4ebd8c48 --- /dev/null +++ b/application/controllers/api/frontend/v1/vertraege/Config.php @@ -0,0 +1,62 @@ +. + */ + +if (!defined('BASEPATH')) exit('No direct script access allowed'); + +use CI3_Events as Events; + +/** + * This controller operates between (interface) the JS (GUI) and the back-end + * Provides data to the ajax get calls about the VV Config + * This controller works with JSON calls on the HTTP GET or POST and the output is always JSON + */ +class Config extends FHCAPI_Controller +{ + public function __construct() + { + parent::__construct([ + 'printDocument' => ['vertrag/mitarbeiter:r'], + ]); + } + + public function printDocument() + { + $params = []; + $menu = []; + + Events::trigger( + 'multiActionPrintHonorarvertrag', + // passing $menu per reference + function & () use (&$menu) { + return $menu; + }, + $params + ); + + if (is_array($menu) && isset($menu[0])) + { + $this->terminateWithSuccess($menu[0]); + } + else + { + // $this->terminateWithError('Error with Event 'multiActionPrintHonorarvertrag'); + $this->terminateWithSuccess(); + + } + } +} diff --git a/application/controllers/api/frontend/v1/vertraege/Vertraege.php b/application/controllers/api/frontend/v1/vertraege/Vertraege.php index bb14bc511..c0683e999 100644 --- a/application/controllers/api/frontend/v1/vertraege/Vertraege.php +++ b/application/controllers/api/frontend/v1/vertraege/Vertraege.php @@ -26,9 +26,6 @@ class Vertraege extends FHCAPI_Controller 'deleteLehrauftrag' =>['vertrag/mitarbeiter:w'], 'deleteBetreuung' =>['vertrag/mitarbeiter:w'], 'getMitarbeiter' => ['vertrag/mitarbeiter:r'], - 'getHeader' => ['vertrag/mitarbeiter:r'], - 'getPersonAbteilung' => ['vertrag/mitarbeiter:r'], - 'getLeitungOrg' => ['vertrag/mitarbeiter:r'], ]); //Load Models and Libraries @@ -241,7 +238,7 @@ class Vertraege extends FHCAPI_Controller } } $this->db->trans_complete(); - $this->terminateWithSuccess(true); + $this->terminateWithSuccess($vertrag_id); } public function updateContract() @@ -358,7 +355,7 @@ class Vertraege extends FHCAPI_Controller } $this->db->trans_complete(); - $this->terminateWithSuccess(true); + $this->terminateWithSuccess($vertrag_id); } public function loadContract($vertrag_id) @@ -684,37 +681,4 @@ class Vertraege extends FHCAPI_Controller } return $this->terminateWithSuccess(getData($result)); } - - public function getPersonAbteilung($mitarbeiter_uid) - { - $this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel'); - - $result = $this->Mitarbeitermodel->getPersonAbteilung($mitarbeiter_uid); - - $data = $this->getDataOrTerminateWithError($result); - - $this->terminateWithSuccess(current($data)); - } - - public function getLeitungOrg($oekurzbz) - { - $this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel'); - - $result = $this->Mitarbeitermodel->getLeitungOrg($oekurzbz); - - $data = $this->getDataOrTerminateWithError($result); - - $this->terminateWithSuccess(current($data)); - } - - public function getHeader($person_id) - { - $this->load->model('ressource/Mitarbeiter_model', 'Mitarbeitermodel'); - - $result = $this->Mitarbeitermodel->getHeader($person_id); - - $data = $this->getDataOrTerminateWithError($result); - - $this->terminateWithSuccess(current($data)); - } } diff --git a/application/core/CI3_Events.php b/application/core/CI3_Events.php index 37f6c3f21..ad4aea729 100644 --- a/application/core/CI3_Events.php +++ b/application/core/CI3_Events.php @@ -35,7 +35,7 @@ class CI3_Events }); self::$eventsSorted[$event] = true; } - + foreach (self::$events[$event] as $conf) { $conf[1](...$args); } diff --git a/application/core/Notiz_Controller.php b/application/core/Notiz_Controller.php index cfc54d5f5..923970923 100644 --- a/application/core/Notiz_Controller.php +++ b/application/core/Notiz_Controller.php @@ -8,7 +8,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller { const DEFAULT_PERMISSION_R = 'admin:r'; const DEFAULT_PERMISSION_RW = 'admin:rw'; - //public function __construct($zuordnung = 'person/Notizzuordnung_model') + public function __construct($permissions) { $default_permissions = [ @@ -97,13 +97,13 @@ abstract class Notiz_Controller extends FHCAPI_Controller if (isError($result)) { $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } - return $this->terminateWithSuccess(getData($result) ?: []); + $this->terminateWithSuccess(getData($result) ?: []); } //Override function protected function isBerechtigt($id, $typeId){ - return $this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL); + $this->terminateWithError("in abstract function: define right in extension", self::ERROR_TYPE_GENERAL); } public function loadNotiz() @@ -112,7 +112,6 @@ abstract class Notiz_Controller extends FHCAPI_Controller $notiz_id = $this->input->post('notiz_id'); - //$this->load->model('person/Notiz_model', 'NotizModel'); $this->NotizModel->addJoin('public.tbl_notiz_dokument', 'notiz_id', 'LEFT'); $this->NotizModel->addSelect('*'); $this->NotizModel->addSelect("TO_CHAR(CASE WHEN public.tbl_notiz.updateamum >= public.tbl_notiz.insertamum @@ -143,14 +142,9 @@ abstract class Notiz_Controller extends FHCAPI_Controller $uid = getAuthUID(); - if (isset($_POST['data'])) - { - $data = json_decode($_POST['data']); - unset($_POST['data']); - foreach ($data as $k => $v) { - $_POST[$k] = $v; - } - } + $json = $this->input->post('data'); + $post_data = json_decode($json, true); + $this->form_validation->set_data($post_data); //Form Validation $this->form_validation->set_rules('titel', 'Titel', 'required', [ @@ -166,26 +160,25 @@ abstract class Notiz_Controller extends FHCAPI_Controller $this->terminateWithValidationErrors($this->form_validation->error_array()); } - $titel = $this->input->post('titel'); - $text = $this->input->post('text'); - $erledigt = $this->input->post('erledigt'); - $verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid; - $bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : null; - $type = $this->input->post('typeId'); - $start = $this->input->post('start'); - $ende = $this->input->post('ende'); + $titel = $post_data['titel']; + $text = $post_data['text']; + $erledigt = $post_data['erledigt']; + $bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : null; + $type = $post_data['typeId']; + $start = isset($post_data['start']) ? $post_data['start'] : null; + $ende = isset($post_data['ende']) ? $post_data['ende'] : null; // Start DB transaction $this->db->trans_start(); //Save note - $result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $verfasser_uid, - "insertvon" => $verfasser_uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid)); + $result = $this->NotizModel->insert(array('titel' => $titel, 'text' => $text, 'erledigt' => $erledigt, 'verfasser_uid' => $uid, + "insertvon" => $uid, 'start' => $start, 'ende' => $ende, 'bearbeiter_uid' => $bearbeiter_uid)); if (isError($result)) { $this->db->trans_rollback(); - return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } $notiz_id = $result->retval; @@ -220,7 +213,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller if (isError($result)) { $this->db->trans_rollback(); - return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } $dms_id_arr[] = $result->retval['dms_id']; } @@ -235,34 +228,28 @@ abstract class Notiz_Controller extends FHCAPI_Controller if (isError($result)) { $this->db->trans_rollback(); - return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } } } $this->db->trans_commit(); - return $this->terminateWithSuccess($result); + $this->terminateWithSuccess($result); } public function updateNotiz() { + $this->load->library('form_validation'); $this->load->library('DmsLib'); - if (isset($_POST['data'])) - { - $data = json_decode($_POST['data']); - unset($_POST['data']); - foreach ($data as $k => $v) { - $_POST[$k] = $v; - } - } + $json = $this->input->post('data'); + $post_data = json_decode($json, true); - $notiz_id = $this->input->post('notiz_id'); + $this->form_validation->set_data($post_data); - if(!$notiz_id) - { - $this->terminateWithError($this->p->t('ui','error_missingId',['id'=>'Notiz_id']), self::ERROR_TYPE_GENERAL); - } + $this->form_validation->set_rules('notiz_id', 'Notiz ID', 'required', [ + 'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'notiz_id']) + ]); //Form Validation $this->form_validation->set_rules('titel', 'Titel', 'required', [ @@ -280,25 +267,23 @@ abstract class Notiz_Controller extends FHCAPI_Controller //update Notiz $uid = getAuthUID(); - $titel = $this->input->post('titel'); - $text = $this->input->post('text'); - $verfasser_uid = isset($_POST['verfasser']) ? $_POST['verfasser'] : $uid; - $bearbeiter_uid = isset($_POST['bearbeiter']) ? $_POST['bearbeiter'] : $uid; - $erledigt = $this->input->post('erledigt'); - $start = $this->input->post('start'); - $ende = $this->input->post('ende'); + $titel = $post_data['titel']; + $text = $post_data['text']; + $bearbeiter_uid = isset($post_data['bearbeiter']) ? $post_data['bearbeiter'] : $post_data['bearbeiter_uid']; + $erledigt = $post_data['erledigt']; + $start = $post_data['start']; + $ende = $post_data['ende']; $result = $this->NotizModel->update( [ - 'notiz_id' => $notiz_id + 'notiz_id' => $post_data['notiz_id'], ], [ 'titel' => $titel, 'updatevon' => $uid, 'updateamum' => date('c'), 'text' => $text, - 'verfasser_uid' => $verfasser_uid, - 'bearbeiter_uid' => $bearbeiter_uid, + 'bearbeiter_uid' => isEmptyString($bearbeiter_uid) ? null : $bearbeiter_uid, 'start' => $start, 'ende' => $ende, 'erledigt' => $erledigt @@ -306,7 +291,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller ); if (isError($result)) { - return $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); + $this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL); } //update(1) loading all dms-entries with this notiz_id @@ -314,7 +299,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller $this->load->model('person/Notizdokument_model', 'NotizdokumentModel'); $this->NotizdokumentModel->addJoin('campus.tbl_dms_version', 'dms_id'); - $result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $notiz_id)); + $result = $this->NotizdokumentModel->loadWhere(array('notiz_id' => $post_data['notiz_id'])); $result = $this->getDataOrTerminateWithError($result); foreach ($result as $doc) { $dms_id_arr[$doc->dms_id] = array( @@ -351,7 +336,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller $result = $this->getDataOrTerminateWithError($result); $dms_id = $result['dms_id']; - $result = $this->NotizdokumentModel->insert(array('notiz_id' => $notiz_id, 'dms_id' => $dms_id)); + $result = $this->NotizdokumentModel->insert(array('notiz_id' => $post_data['notiz_id'], 'dms_id' => $dms_id)); $this->getDataOrTerminateWithError($result); } @@ -365,7 +350,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller $this->getDataOrTerminateWithError($result); } - return $this->terminateWithSuccess($result); + $this->terminateWithSuccess($result); } public function deleteNotiz() @@ -416,15 +401,15 @@ abstract class Notiz_Controller extends FHCAPI_Controller if (isError($result)) { $this->db->trans_rollback(); - return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); } if(!hasData($result)) { - return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL); } $this->db->trans_complete(); - return $this->terminateWithSuccess(getData($result)); + $this->terminateWithSuccess(getData($result)); } public function loadDokumente() @@ -440,14 +425,14 @@ abstract class Notiz_Controller extends FHCAPI_Controller array('public.tbl_notiz.notiz_id' => $notiz_id) ); if (isError($result)) { - return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); + $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); } if(!hasData($result)) { - return $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL); + $this->terminateWithError($this->p->t('ui','error_missingId', ['id'=> 'Notiz_id']), self::ERROR_TYPE_GENERAL); } - return $this->terminateWithSuccess(getData($result)); + $this->terminateWithSuccess(getData($result)); } public function getMitarbeiter($searchString) @@ -457,7 +442,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller if (isError($result)) { $this->terminateWithError($result, self::ERROR_TYPE_GENERAL); } - return $this->terminateWithSuccess($result); + $this->terminateWithSuccess($result); } public function getCountNotes($person_id) @@ -476,4 +461,4 @@ abstract class Notiz_Controller extends FHCAPI_Controller return $this->terminateWithSuccess($anzahl->anzahl ?: 0); } -} \ No newline at end of file +} diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php index 4f5a65cf7..937d5c3ff 100644 --- a/application/helpers/hlp_header_helper.php +++ b/application/helpers/hlp_header_helper.php @@ -279,3 +279,199 @@ function absoluteJsImportUrl($relurl) } return $url; } + +/* + * Manipulate CI views includes Array to load + * - public/js/FhcApps.js via customJSs and + * - app customisation js and/or css from extensions via customJSModules + * if customJSModules contains at least one vuejs app and customisation files + * exist in extensions + */ +class ExtendableAppsHelper +{ + private static $instance = null; + + protected $extensions; + + protected $customCSSs; + protected $customJSs; + protected $customJSModules; + + protected $initialised; + protected $appscount; + + protected $extCustomCSSs; + protected $extCustomJSs; + protected $extCustomJSModules; + + private function __construct() + { + $this->extensions = array(); + $this->customCSSs = null; + $this->customJSs = null; + $this->customJSModules = null; + + $this->initialised = false; + $this->appscount = 0; + + $this->extCustomCSSs = null; + $this->extCustomJSs = null; + $this->extCustomJSModules = null; + } + + public static function getInstance() + { + if(self::$instance === null) + { + self::$instance = new ExtendableAppsHelper(); + } + return self::$instance; + } + + public function init($customCSSs, $customJSs, $customJSModules) + { + if($this->initialised) + { + return; + } + + $this->customCSSs = $customCSSs; + $this->customJSs = $customJSs; + $this->customJSModules = $customJSModules; + $this->initialised = true; + + if(!isset($this->customJSModules)) + { + return; + } + + if(!is_array($this->customJSModules)) + { + $this->customJSModules = array($this->customJSModules); + } + + if(count($this->customJSModules) < 1) + { + return; + } + + $this->buildExtensionsList(); + $this->prepareExtendedArrays(); + } + + public function getCustomCSSs() + { + if(is_null($this->extCustomCSSs)) + { + return $this->customCSSs; + } + return $this->extCustomCSSs; + } + + public function getCustomJSs() + { + if(is_null($this->extCustomJSs)) + { + return $this->customJSs; + } + return $this->extCustomJSs; + } + + public function getCustomJSModules() + { + if(is_null($this->extCustomJSModules)) + { + return $this->customJSModules; + } + return $this->extCustomJSModules; + } + + protected function buildExtensionsList() + { + $this->extensions = array(); + $fsiterator = new FilesystemIterator(FHCPATH . 'application/extensions'); + foreach ($fsiterator as $fsitem) + { + if(preg_match('/^FHC-Core-/', $fsitem->getBasename())) + { + $this->extensions[] = $fsitem->getBasename(); + } + } + } + + protected function prepareExtendedArrays() + { + $this->appscount = 0; + $this->initExtCustomCSSs(); + $this->extCustomJSModules = array(); + foreach($this->customJSModules as $item) + { + $matches = array(); + if(preg_match('#^public/(extensions/FHC-Core-.+)?js/apps/(.*)\.js$#', $item, $matches)) + { + $this->appscount++; + + $fhcextension = $matches[1]; + $app = $matches[2]; + + $extend_js_suffix = 'js/extend_app/' . $fhcextension . $app . '.js'; + $extend_css_suffix = 'css/extend_app/' . $fhcextension . $app . '.css'; + + foreach($this->extensions as $extension) + { + $extend_js = 'public/extensions/' . $extension . '/' . $extend_js_suffix; + $extend_css = 'public/extensions/' . $extension . '/' . $extend_css_suffix; + + if(is_readable(FHCPATH . $extend_js)) + { + array_push($this->extCustomJSModules, $extend_js); + } + + if(is_readable(FHCPATH . $extend_css)) + { + array_push($this->extCustomCSSs, $extend_css); + } + } + } + array_push($this->extCustomJSModules, $item); + } + + if($this->appscount > 0) + { + $this->addFhcAppsJs(); + } + } + + protected function initExtCustomCSSs() + { + if(!isset($this->customCSSs)) + { + $this->extCustomCSSs = array(); + } + elseif(!is_array($this->customCSSs)) + { + $this->extCustomCSSs = array($this->customCSSs); + } + else + { + $this->extCustomCSSs = $this->customCSSs; + } + } + + protected function addFhcAppsJs() + { + if(!isset($this->customJSs)) + { + $this->extCustomJSs = array(); + } + elseif(!is_array($this->customJSs)) + { + $this->extCustomJSs = array($this->customJSs); + } + else + { + $this->extCustomJSs = $this->customJSs; + } + array_push($this->extCustomJSs, 'public/js/FhcApps.js'); + } +} diff --git a/application/libraries/DocsboxLib.php b/application/libraries/DocsboxLib.php index f9167c379..184855ad8 100644 --- a/application/libraries/DocsboxLib.php +++ b/application/libraries/DocsboxLib.php @@ -180,7 +180,8 @@ class DocsboxLib } // Just started or still working on it elseif ($getStatusResponse->body->status == self::STATUS_WORKING - || $getStatusResponse->body->status == self::STATUS_STARTED) + || $getStatusResponse->body->status == self::STATUS_STARTED + || $getStatusResponse->body->status == self::STATUS_QUEUED) { // go on! } diff --git a/application/models/accounting/Vertrag_model.php b/application/models/accounting/Vertrag_model.php index 4c036369b..97b5c72b6 100644 --- a/application/models/accounting/Vertrag_model.php +++ b/application/models/accounting/Vertrag_model.php @@ -490,6 +490,175 @@ class Vertrag_model extends DB_Model return $bezeichnung; } + /** + * Loads all Contracts of a Person + * @param $person_id + * @return array of objects + */ + public function loadContractsOfPerson($person_id) + { + $query = " + SELECT + *, + tbl_vertrag.bezeichnung as bezeichnung, + tbl_vertragstyp.bezeichnung as vertragstyp_bezeichnung, + tbl_vertrag.vertragsdatum, + (SELECT bezeichnung FROM lehre.tbl_vertragsstatus + JOIN lehre.tbl_vertrag_vertragsstatus USING(vertragsstatus_kurzbz) + WHERE vertrag_id=tbl_vertrag.vertrag_id ORDER BY datum desc limit 1) as status, anmerkung, + CASE + WHEN EXISTS ( + SELECT 1 + FROM lehre.tbl_vertrag_vertragsstatus + WHERE vertrag_id = tbl_vertrag.vertrag_id + AND vertragsstatus_kurzbz = 'abgerechnet' + ) THEN true + ELSE false + END AS isAbgerechnet + FROM + lehre.tbl_vertrag + LEFT JOIN lehre.tbl_vertragstyp USING(vertragstyp_kurzbz) + WHERE person_id= ?"; + + + return $this->execQuery($query, array($person_id)); + } + + /** + * Loads all Contracts of a Person that are not assigned yet + * @param $person_id + * @return array of objects + */ + public function loadContractsOfPersonNotAssigned($person_id) + { + $query = " +SELECT + 'Lehrauftrag' as type, + lehreinheit_id, + mitarbeiter_uid, + null as pruefung_id, + null as projektarbeit_id, + (tbl_lehreinheitmitarbeiter.semesterstunden*tbl_lehreinheitmitarbeiter.stundensatz) as betrag1, + tbl_lehreinheit.studiensemester_kurzbz, + null as betreuerart_kurzbz, + ( SELECT + upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz + FROM + lehre.tbl_lehrveranstaltung + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id) + as bezeichnung + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE + mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?) + AND vertrag_id IS NULL + UNION + SELECT + 'Betreuung' as type, + tbl_projektarbeit.lehreinheit_id as lehreinheit_id, + null as mitarbeiter_uid, + null::integer as pruefung_id, + projektarbeit_id, + (tbl_projektbetreuer.stunden*tbl_projektbetreuer.stundensatz) as betrag1, + tbl_lehreinheit.studiensemester_kurzbz, + tbl_projektbetreuer.betreuerart_kurzbz, + (SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid) + as bezeichnung + FROM + lehre.tbl_projektbetreuer + JOIN lehre.tbl_projektarbeit USING(projektarbeit_id) + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE + tbl_projektbetreuer.person_id=? + AND vertrag_id IS NULL + "; + + return $this->execQuery($query, array($person_id, $person_id)); + } + + /** + * Loads all Contracts of a Person that are assigned yet + * @param $person_id, $vertrag_id + * @return array of objects + */ + + public function loadContractsOfPersonAssigned($person_id, $vertrag_id) + { + $query = " + SELECT + 'Lehrauftrag' as type, + lehreinheit_id, + mitarbeiter_uid, + null as pruefung_id, + null as projektarbeit_id, + (tbl_lehreinheitmitarbeiter.semesterstunden * tbl_lehreinheitmitarbeiter.stundensatz) as betrag, + tbl_lehreinheit.studiensemester_kurzbz, + null as betreuerart_kurzbz, + ( SELECT + upper(tbl_studiengang.typ || tbl_studiengang.kurzbz) || tbl_lehrveranstaltung.semester || '-' || tbl_lehrveranstaltung.kurzbz || '-' || tbl_lehreinheit.lehrform_kurzbz + FROM + lehre.tbl_lehrveranstaltung + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE + lehrveranstaltung_id=tbl_lehreinheit.lehrveranstaltung_id) + as bezeichnung, vertrag_id + FROM + lehre.tbl_lehreinheitmitarbeiter + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE + mitarbeiter_uid IN (SELECT uid FROM public.tbl_benutzer WHERE person_id=?) + AND vertrag_id = ? + UNION + SELECT + 'Betreuung' as type, + tbl_projektarbeit.lehreinheit_id as lehreinheit_id, + null as mitarbeiter_uid, + null::integer as pruefung_id, + projektarbeit_id, + (tbl_projektbetreuer.stunden * tbl_projektbetreuer.stundensatz) as betrag, + tbl_lehreinheit.studiensemester_kurzbz, + tbl_projektbetreuer.betreuerart_kurzbz, + (SELECT nachname || ' ' || vorname FROM public.tbl_person JOIN public.tbl_benutzer USING(person_id) WHERE uid=tbl_projektarbeit.student_uid) + as bezeichnung, vertrag_id + FROM + lehre.tbl_projektbetreuer + JOIN lehre.tbl_projektarbeit USING(projektarbeit_id) + JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) + WHERE + tbl_projektbetreuer.person_id=? + AND vertrag_id = ? + "; + + return $this->execQuery($query, array($person_id, $vertrag_id, $person_id, $vertrag_id)); + } + + /** + * Returns all stati of a contract + * + * @param $vertrag_id + * @return array + */ + public function getStatiOfContract($vertrag_id) + { + $query = " + SELECT + *, + tbl_vertrag_vertragsstatus.datum, + tbl_vertrag_vertragsstatus.insertamum, + tbl_vertrag_vertragsstatus.updateamum + FROM + lehre.tbl_vertrag_vertragsstatus + JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz) + WHERE + tbl_vertrag_vertragsstatus.vertrag_id = ? + ORDER BY tbl_vertrag_vertragsstatus.datum DESC"; + + return $this->execQuery($query, array($vertrag_id)); + } + private function _updateVertragRelevant($vertrag_id) { $this->LehreinheitmitarbeiterModel->update( diff --git a/application/models/accounting/Vertragstyp_model.php b/application/models/accounting/Vertragstyp_model.php index 42d248217..a3275af6e 100644 --- a/application/models/accounting/Vertragstyp_model.php +++ b/application/models/accounting/Vertragstyp_model.php @@ -11,4 +11,5 @@ class Vertragstyp_model extends DB_Model $this->dbTable = 'lehre.tbl_vertragstyp'; $this->pk = 'vertragstyp_kurzbz'; } + } diff --git a/application/models/accounting/Vertragvertragsstatus_model.php b/application/models/accounting/Vertragvertragsstatus_model.php index 78a065540..75b0794cc 100644 --- a/application/models/accounting/Vertragvertragsstatus_model.php +++ b/application/models/accounting/Vertragvertragsstatus_model.php @@ -190,4 +190,6 @@ class Vertragvertragsstatus_model extends DB_Model return $this->loadWhere($condition); } + + } diff --git a/application/models/crm/Reihungstest_model.php b/application/models/crm/Reihungstest_model.php index a685b01cd..efef0a8fa 100644 --- a/application/models/crm/Reihungstest_model.php +++ b/application/models/crm/Reihungstest_model.php @@ -10,7 +10,7 @@ class Reihungstest_model extends DB_Model parent::__construct(); $this->dbTable = 'public.tbl_reihungstest'; $this->pk = 'reihungstest_id'; - } + } /** * Gets a test from a test id only if it is available @@ -42,8 +42,8 @@ class Reihungstest_model extends DB_Model /** * Checks if there are active studyplans which have no public placement tests assigned yet. * Only check assignment to studyplans that are - * - Bachelor, - * - active, + * - Bachelor, + * - active, * - set as online application * - valid for 1st terms * @return array Returns object array with studyplans that have no public placement tests assigned yet. @@ -97,7 +97,7 @@ class Reihungstest_model extends DB_Model USING (reihungstest_id) WHERE datum >= now() - AND + AND oeffentlich = \'t\' ) '; @@ -105,7 +105,7 @@ class Reihungstest_model extends DB_Model return $this->execQuery($query); } - /** + /** * Gets amount of free places. * @return array Returns object array with faculty and amount of free places * for each public actual placement test date. @@ -432,10 +432,10 @@ class Reihungstest_model extends DB_Model } /** - * Loads all applicants of a placement test - * @param integer $reihungstest_id ID of placement test - * @return array Returns object array with data of applicants. - */ + * Loads all applicants of a placement test + * @param integer $reihungstest_id ID of placement test + * @return array Returns object array with data of applicants. + */ public function getApplicantsOfPlacementTest($reihungstest_id) { $query = ' @@ -556,13 +556,22 @@ class Reihungstest_model extends DB_Model * Calculates Result of Placement Test for a given Person and given placementtest * and with taking account of weighting per area * - * @param $person_id ID of Person - * @param $punkte if true result is points else result is percentage of sum - * @param $reihungstest_id ID of Placementtest - * @param $weightedArray array of weighting per area (gewicht per gebiet_id) - * @return float result + * @param Number $person_id ID of Person + * @param Boolean $punkte if true result is points else result is percentage of sum + * @param Number $reihungstest_id ID of Placementtest + * @param Array $weightedArray array of weighting per area (gewicht per gebiet_id) + * @param Boolean $has_excluded_gebiete if true, areas in the configArray will be excluded + * @param Array $basis_gebiet_id_toString areas to exclude + * @return float result points of RT */ - public function getReihungstestErgebnisPerson($person_id, $punkte, $reihungstest_id, $weightedArray = null) + public function getReihungstestErgebnisPerson( + $person_id, + $punkte, + $reihungstest_id, + $weightedArray = null, + $has_excluded_gebiete = false, + $basis_gebiet_id_toString = null + ) { $parametersArray = array($reihungstest_id); @@ -577,6 +586,35 @@ class Reihungstest_model extends DB_Model WHERE reihungstest_id = ? "; + //areas of Studiengang + if (!empty($basis_gebiet_id_toString)) + { + $qry .= " + AND + gebiet_id IN (". $basis_gebiet_id_toString. ") + "; + } + + //areas to exclude + if($has_excluded_gebiete) + { + if (defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE)) + { + $excluded_gebiete = unserialize(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE); + $exclude_gebiet_id_arr = $excluded_gebiete; + if (is_array($exclude_gebiet_id_arr) && count($exclude_gebiet_id_arr) > 0) + { + $exclude_gebiet_id_toString = implode(', ', $exclude_gebiet_id_arr); + $qry .= " + AND + gebiet_id NOT IN (". $exclude_gebiet_id_toString. ") + -- AND + -- typ = 'b' + "; + } + } + } + //using prestudent Status to avoid to get the sum of more than 1 placement tests $qry .= " AND prestudent_id = ( diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index a650643f1..d8bbd7d63 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -209,7 +209,7 @@ class Mitarbeiter_model extends DB_Model { $qry = " SELECT - titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe + titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe, personalnummer, mitarbeiter_uid FROM public.tbl_person JOIN public.tbl_benutzer b USING(person_id) @@ -363,14 +363,14 @@ class Mitarbeiter_model extends DB_Model $returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter"; $qry = " - SELECT " . $returnwert . " - FROM + SELECT " . $returnwert . " + FROM public.tbl_mitarbeiter ma - JOIN + JOIN public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid) - JOIN + JOIN public.tbl_person p on (p.person_id = b.person_id) - WHERE + WHERE lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%' OR lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%' @@ -393,14 +393,14 @@ class Mitarbeiter_model extends DB_Model public function getMitarbeiterFromLV($lehrveranstaltung_id) { $qry = "SELECT DISTINCT - lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid - FROM + lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid + FROM lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit - WHERE + WHERE lehrveranstaltung_id= ? - AND - mitarbeiter_uid=uid - AND + AND + mitarbeiter_uid=uid + AND tbl_lehreinheitmitarbeiter.lehreinheit_id=tbl_lehreinheit.lehreinheit_id;"; $parametersArray = array($lehrveranstaltung_id); diff --git a/application/models/system/Message_model.php b/application/models/system/Message_model.php index 19129b606..3e59d7250 100644 --- a/application/models/system/Message_model.php +++ b/application/models/system/Message_model.php @@ -276,6 +276,8 @@ class Message_model extends DB_Model s.message_id, s.person_id, MAX(s.insertamum) as lastinserted from public.tbl_msg_status s + join + filtered_messages fm on fm.message_id = s.message_id and fm.recipient_id = s.person_id group by s.message_id, s.person_id ) ls diff --git a/application/views/Cis/LvInfo.php b/application/views/Cis/LvInfo.php deleted file mode 100644 index 49a7b7a85..000000000 --- a/application/views/Cis/LvInfo.php +++ /dev/null @@ -1,15 +0,0 @@ - 'LvInfo', - 'customJSModules' => ['public/js/apps/Cis/LvInfo.js'] -); - -$this->load->view('templates/CISVUE-Header', $includesArray); -?> - -
- - -
- -load->view('templates/CISVUE-Footer', $includesArray); ?> diff --git a/application/views/Cis/Profil.php b/application/views/Cis/Profil.php deleted file mode 100644 index f66ebf8a9..000000000 --- a/application/views/Cis/Profil.php +++ /dev/null @@ -1,18 +0,0 @@ - 'Profil', - 'customJSModules' => ['public/js/apps/Cis/Profil.js'], - 'tabulator5' => true, - 'primevue3' => true, - 'customCSSs' => ['public/css/components/calendar.css', 'public/css/components/FilterComponent.css','public/css/components/Profil.css','public/css/components/FormUnderline.css'], - -); - -$this->load->view('templates/CISVUE-Header', $includesArray); -?> - -
- -
- -load->view('templates/CISVUE-Footer', $includesArray); ?> diff --git a/application/views/Studentenverwaltung.php b/application/views/Studentenverwaltung.php index 1cd28d735..8dd2dd93d 100644 --- a/application/views/Studentenverwaltung.php +++ b/application/views/Studentenverwaltung.php @@ -7,19 +7,21 @@ 'vue3' => true, 'primevue3' => true, #'filtercomponent' => true, - 'tabulator5' => true, + 'tabulator6' => true, 'tinymce5' => true, 'phrases' => array( 'global', 'ui', 'notiz', ), + 'tags' => true, 'customCSSs' => [ #datepicker fuer component functions 'public/css/components/vue-datepicker.css', 'public/css/components/primevue.css', 'public/css/Studentenverwaltung.css', - 'public/css/components/function.css' + 'public/css/components/function.css', + 'public/css/components/Detailheader.css' ], 'customJSs' => [ 'vendor/vuejs/vuedatepicker_js/vue-datepicker.iife.js', @@ -45,6 +47,8 @@ $configArray = [ 'showAufnahmegruppen' => !defined('FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN') ? false : FAS_REIHUNGSTEST_AUFNAHMEGRUPPEN, 'allowUebernahmePunkte' => !defined('FAS_REIHUNGSTEST_PUNKTEUEBERNAHME') ? true : FAS_REIHUNGSTEST_PUNKTEUEBERNAHME, 'useReihungstestPunkte' => !defined('FAS_REIHUNGSTEST_PUNKTE') ? true : FAS_REIHUNGSTEST_PUNKTE, + 'hasExcludedAreas' => defined('FAS_REIHUNGSTEST_EXCLUDE_GEBIETE') && !empty(FAS_REIHUNGSTEST_EXCLUDE_GEBIETE), + 'stvTagsEnabled' => defined('STV_TAGS_ENABLED') ? STV_TAGS_ENABLED : false, ]; ?> diff --git a/application/views/Vertragsverwaltung.php b/application/views/Vertragsverwaltung.php new file mode 100644 index 000000000..8fa6dff27 --- /dev/null +++ b/application/views/Vertragsverwaltung.php @@ -0,0 +1,50 @@ + 'Vertragsverwaltung', + 'axios027' => true, + 'bootstrap5' => true, + 'fontawesome6' => true, + 'vue3' => true, + 'primevue3' => true, + 'filtercomponent' => true, + 'navigationcomponent' => true, + 'tabulator6' => true, + 'tinymce5' => true, + 'phrases' => array( + 'global', + 'ui', + ), + 'customCSSs' => [ + 'public/css/components/vue-datepicker.css', + 'public/css/components/primevue.css', + 'public/css/Vertragsverwaltung.css', + 'public/css/components/Detailheader.css' + ], + 'customJSs' => [ + #'vendor/npm-asset/primevue/tree/tree.min.js', + #'vendor/npm-asset/primevue/toast/toast.min.js' + ], + 'customJSModules' => [ + 'public/js/apps/Vertragsverwaltung.js' + ] +); + +$this->load->view('templates/FHC-Header', $includesArray); +?> + + !defined('DOMAIN') ? 'notDefined' : DOMAIN, +]; +?> + +
+ + +
+ +load->view('templates/FHC-Footer', $includesArray); ?> + diff --git a/application/views/templates/FHC-Footer.php b/application/views/templates/FHC-Footer.php index c816ebf2e..d2eb229f1 100644 --- a/application/views/templates/FHC-Footer.php +++ b/application/views/templates/FHC-Footer.php @@ -17,6 +17,7 @@ $use_vuejs_dev_version = $this->config->item('use_vuejs_dev_version'); // By default set the parameters to null + $customCSSs = isset($customCSSs) ? $customCSSs : null; $customJSs = isset($customJSs) ? $customJSs : null; $customJSModules = isset($customJSModules) ? $customJSModules : null; @@ -191,12 +192,13 @@ // NOTE: keep it as the last but one if ($addons === true) generateAddonsJSsInclude($calledPath.'/'.$calledMethod); - - + $extapphelper = ExtendableAppsHelper::getInstance(); + $extapphelper->init($customCSSs, $customJSs, $customJSModules); + // Eventually required JS // NOTE: keep it as the latest - generateJSsInclude($customJSs); - generateJSModulesInclude($customJSModules); + generateJSsInclude($extapphelper->getCustomJSs()); + generateJSModulesInclude($extapphelper->getCustomJSModules()); ?> diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php index f7b5491a1..7b53cbf5d 100644 --- a/application/views/templates/FHC-Header.php +++ b/application/views/templates/FHC-Header.php @@ -9,6 +9,8 @@ $title = isset($title) ? $title : null; $refresh = isset($refresh) ? $refresh : null; $customCSSs = isset($customCSSs) ? $customCSSs : null; + $customJSs = isset($customJSs) ? $customJSs : null; + $customJSModules = isset($customJSModules) ? $customJSModules : null; $skipID = isset($skipID) ? $skipID : null; ?> @@ -132,8 +134,11 @@ //Tags if ($tags === true) generateCSSsInclude('public/css/tags.css'); + $extapphelper = ExtendableAppsHelper::getInstance(); + $extapphelper->init($customCSSs, $customJSs, $customJSModules); + // Eventually required CSS - generateCSSsInclude($customCSSs); // Eventually required CSS + generateCSSsInclude($extapphelper->getCustomCSSs()); // Eventually required CSS ?> diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 6c8db5246..25f353c12 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -264,7 +264,7 @@ else tbl_bisio.bisio_id, tbl_bisio.bis, tbl_bisio.von, tbl_zeugnisnote.note,tbl_mobilitaet.mobilitaetstyp_kurzbz, (CASE WHEN bis.tbl_mobilitaet.studiensemester_kurzbz = vw_student_lehrveranstaltung.studiensemester_kurzbz THEN '1' ELSE '' END) as doubledegree, - tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung + tbl_note.lkt_ueberschreibbar, tbl_note.anmerkung, tbl_zeugnisnote.punkte FROM campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) JOIN public.tbl_person USING(person_id) JOIN public.tbl_student ON(uid=student_uid) @@ -306,7 +306,14 @@ else && $elem->von < $stsemdatumbis && (anzahlTage($elem->von, $elem->bis) >= 30)) $inc.=' (o)'; - $note = $elem->note; + if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true) + { + $note = $elem->punkte; + } + else + { + $note = $elem->note; + } if($elem->lkt_ueberschreibbar == 'f') // angerechnet / intern angerechnet / nicht zugelassen { @@ -339,20 +346,23 @@ else { $worksheet->write($lines,8, trim($elem->matrikelnr), $format_highlight); $pr = new Pruefung(); - $pr->getPruefungen($elem->uid, "Termin2", $lvid, $sem); + $pr->getPruefungen($elem->uid, "Termin2", $lvid, $stsem); $output2 = $pr->result; if ($output2) { $resultPr = $output2[0]; $worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date); - $worksheet->write($lines,10, $resultPr->note, $format_highlightright); + if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true) + $worksheet->write($lines,10, $resultPr->punkte, $format_highlightright); + else + $worksheet->write($lines,10, $resultPr->note, $format_highlightright); + } + else + { + $worksheet->write($lines,9, '', $format_highlightright_date); + $worksheet->write($lines,10, '', $format_highlightright); } - else - { - $worksheet->write($lines,9, '', $format_highlightright_date); - $worksheet->write($lines,10, '', $format_highlightright); - } } // Nachprüfung @@ -360,20 +370,23 @@ else { $worksheet->write($lines,12, trim($elem->matrikelnr), $format_highlight); $pr = new Pruefung(); - $pr->getPruefungen($elem->uid, "Termin3", $lvid, $sem); + $pr->getPruefungen($elem->uid, "Termin3", $lvid, $stsem); $output3 = $pr->result; if ($output3) { $resultPr = $output3[0]; $worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date); - $worksheet->write($lines,14, $resultPr->note, $format_highlightright); + if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE==true) + $worksheet->write($lines,14, $resultPr->punkte, $format_highlightright); + else + $worksheet->write($lines,14, $resultPr->note, $format_highlightright); + } + else + { + $worksheet->write($lines,13, '', $format_highlightright_date); + $worksheet->write($lines,14, '', $format_highlightright); } - else - { - $worksheet->write($lines,13, '', $format_highlightright_date); - $worksheet->write($lines,14, '', $format_highlightright); - } } $i++; diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index c43cb38d1..943363f6d 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -371,4 +371,6 @@ define('STATUS_VORRUECKEN_ANZEIGEN', true); //externe Ueberwachung im Testtool erlauben define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false); +//enable tags in StudVW +define('STV_TAGS_ENABLED', false); ?> diff --git a/public/css/Studentenverwaltung.css b/public/css/Studentenverwaltung.css index eb6becc15..cb4b8f2e9 100644 --- a/public/css/Studentenverwaltung.css +++ b/public/css/Studentenverwaltung.css @@ -12,22 +12,22 @@ html { font-size: .875em; } html.fs_xx-small { - font-size: .5em; + font-size: .625em; } html.fs_x-small { - font-size: .625em; + font-size: .6875em; } html.fs_small { font-size: .75em; } html.fs_normal { - font-size: .875em; + font-size: .8125em; } html.fs_big { - font-size: 1em; + font-size: .875em; } html.fs_huge { - font-size: 1.125em; + font-size: 1em; } #appMenu { @@ -74,6 +74,12 @@ html.fs_huge { color: var(--gray-500); } +/* Aufnahme Termine: background color green*/ +.stv-details-admission-table .row-green{ + background-color: lightgreen !important; + //color: var(--green-200); +} + /* Dropdown Toolbar Interessent, submenu */ .dropend .dropdown-toggle.d-flex::after { height: 0; @@ -116,6 +122,15 @@ html.fs_huge { position: inherit; z-index: 1; } + + .sidebar-collapsed #sidebarMenu { + display: none !important; + } + + .sidebar-collapsed .container-fluid > .row > main { + flex: 0 0 100%; + max-width: 100%; + } } @@ -168,7 +183,7 @@ html.fs_huge { } .has-filter .fa-filter { - color: var(--bs-success); + color: var(--bs-danger); } .override_filtercmpt_actions_style div.d-flex.align-items-baseline { align-items: end !important; @@ -185,3 +200,84 @@ html.fs_huge { .tiny-90 div.tox.tox-tinymce { height: 90% !important; } + +/* slim begin */ +.stv .form-label { + margin-bottom: .15rem; + font-weight: bold; +} + +.stv .form-control, +.stv .form-select, +.stv .input-group-text { + padding-top: .15rem; + padding-bottom: .15rem; +} + +:root { + --bs-body-line-height: 1.2; +} + +.stv .tabulator-row .tabulator-cell, +.stv .tabulator-header-filter input { + padding-top: 1px !important; + padding-bottom: 1px !important; +} + +.stv .tabulator-row { + min-height: 18px; +} + +.stv .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-line-height: 1.2; +} + +.stv .p-button.p-button-icon-only { + padding-top: 0; + padding-bottom: 0; +} + +.stv .p-tabview .p-tabview-nav li .p-tabview-nav-link { + padding: 0.25rem .5rem; +} +/* +.stv .p-tabview .p-tabview-panels { + background-color: #e5eff5; +} + +.stv .p-tabview .p-tabview-nav li.p-highlight .p-tabview-nav-link { + background: #e5eff5; + border-color: #dee2e6 #dee2e6 #e5eff5 #dee2e6; +} +*/ +.stv-details-details-foto img { + max-height: 120px; +} + +.stv .tabulator-row .tabulator-frozen, +.stv .tabulator-row .tabulator-cell { + border-bottom: none; +} + +/* +.stv .p-treetable .p-treetable-thead > tr > th, +.stv .p-treetable .p-treetable-tbody > tr { + background-color: #e5eff5; +} + +.stv .p-treetable .p-treetable-tbody > tr.p-highlight { + background: #007bff; + color: #fff; +} + +.stv .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody > tr:not(.p-highlight):hover { + background: #fff; + color: #212529; +} + +.tabulator-row.tabulator-row-even .tabulator-cell { + background-color: #e5eff5; +} +*/ +/* slim ende */ diff --git a/public/css/Vertragsverwaltung.css b/public/css/Vertragsverwaltung.css new file mode 100644 index 000000000..7b2d71481 --- /dev/null +++ b/public/css/Vertragsverwaltung.css @@ -0,0 +1,20 @@ +@import './components/verticalsplit.css'; + +html { + font-size: .875em; +} +.vv{ + display: flex; + flex-direction: column; + height: 100vh; +} +.vv> header { + flex: 0 0 auto; +} +.vv> div { + flex: 1 1 auto; +} + +.vv { + margin-left: 0 !important; +} diff --git a/public/css/components/Detailheader.css b/public/css/components/Detailheader.css new file mode 100644 index 000000000..dcfcf6806 --- /dev/null +++ b/public/css/components/Detailheader.css @@ -0,0 +1,64 @@ +.foto-container:hover .fotoedit { + opacity: 1 !important; +} + +.bg-unruly { + background-color: #ad1010 !important; + color: white; +} + +/*.fotosperre { + z-index: 1; + font-size: 1rem; + width: 1.25rem; + height: 1.25rem; +}*/ + +.foto-container .fotoedit { + opacity: 0; + transition: opacity 0.3s; + backdrop-filter: blur(2px); +} + +.fotoedit { + background-color: rgba(0, 0, 0, 0.4); + color: white; + border: none; + z-index: 4; + font-size: 1rem; + width: 1.8rem; + height: 1.8rem; + opacity:0; + transition: opacity 0.2s; + top:20%; +} + +/* fotoeditMa { + background-color: rgba(0, 0, 0, 0.4); + color: white; + border: none; + z-index: 4; + font-size: 1rem; + opacity:0; + transition: opacity 0.2s; + top:20%; +}*/ + +.buttonleft { + margin-left: .25rem; +} + +.buttonright { + margin-right: .25rem; +} + +/*.fotoEditMa { + z-index: 104; + font-size: 1rem; + width: 2.5rem; + height: 2.5rem; + opacity:0; + transition: opacity 0.2s; + top:13%;" + z-index: 104; font-size: 1rem; width: 2.5rem; height: 2.5rem; opacity:0; transition: opacity 0.2s; top:13%;" +}*/ diff --git a/public/css/components/primevue.css b/public/css/components/primevue.css index ac1950334..97b918011 100644 --- a/public/css/components/primevue.css +++ b/public/css/components/primevue.css @@ -3578,6 +3578,12 @@ transition: box-shadow 0.15s; margin-right: 0.5rem; } + +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg, +.p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler > svg * { + pointer-events: none; +} + .p-treetable .p-treetable-tbody > tr > td .p-treetable-toggler:enabled:hover { color: #495057; border-color: transparent; diff --git a/public/dist/js/apps/Abgabetool/Abgabetool.js b/public/dist/js/apps/Abgabetool/Abgabetool.js index 35cec7fde..e0ab72c77 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 a 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 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)}},s={loadCategory(t){return this.$fhcApi.get("/api/frontend/v1/phrasen/loadModule/"+t)},setLanguage(t,e){const a={categories:t,language:e};return this.$fhcApi.post("/api/frontend/v1/phrasen/setLanguage",a)},getLanguage(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getLanguage",{})},getActiveDbLanguages(){return this.$fhcApi.get("/api/frontend/v1/phrasen/getAllLanguages",{})}},o={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 a="/api/frontend/v1/studstatus/abmeldung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(a)},create(t,e,a){return this.$fhcApi.post("/api/frontend/v1/studstatus/abmeldung/createAntrag",{studiensemester:t,prestudent_id:e,grund:a},{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 a="/api/frontend/v1/studstatus/unterbrechung/"+(void 0!==t?"getDetailsForAntrag/"+t:"getDetailsForNewAntrag/"+e);return this.$fhcApi.get(a)},create(t,e,a,i,n){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:a,datum_wiedereinstieg:i,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,a){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)}}},c={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 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:a,topic:i,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:a,topic:i,requested_change:n})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:a,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:a,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,a=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,...a?{fileID:a}:{}})},updateProfilRequest:function(t,e,a,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:a,...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})}},u={getRoomInfo(t,e,a){return this.$fhcApi.post("/api/frontend/v1/LvPlan/getRoomplan",{ort_kurzbz:t,start_date:e,end_date:a})},getStunden(){return this.$fhcApi.get("/api/frontend/v1/LvPlan/Stunden",{})},getOrtReservierungen(t,e,a){return this.$fhcApi.post(`/api/frontend/v1/LvPlan/getReservierungen/${t}`,{start_date:e,end_date:a})},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,a){return this.$fhcApi.get("/api/frontend/v1/LvPlan/LvPlanEvents",{start_date:t,end_date:e,lv_id:a})}},b={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 a="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/uid/"+encodeURIComponent(t);return this.$fhcApi.getUri(a)},prestudent(t,e){let a="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/prestudent/"+encodeURIComponent(t);return this.$fhcApi.getUri(a)},person(t,e){let a="api/frontend/v1/stv/students/"+encodeURIComponent(e)+"/person/"+encodeURIComponent(t);return this.$fhcApi.getUri(a)},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,a)=>this.$fhcApi.post(t,a,e),t.ajaxResponse=(t,e,a)=>a.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,a){return this.$fhcApi.get("api/frontend/v1/stv/Gruppen/getGruppen/"+a.id)},deleteGroup(t){return this.$fhcApi.post("api/frontend/v1/stv/Gruppen/deleteGruppe/",t)}},kontakt:{getAdressen(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getAdressen/"+a.id)},addNewAddress(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewAddress/"+e,a)},loadAddress(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadAddress/",{address_id:t})},updateAddress(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateAddress/"+e,a)},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,a){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getBankverbindung/"+a.id)},addNewBankverbindung(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewBankverbindung/"+e,a)},loadBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadBankverbindung/",{bankverbindung_id:t})},updateBankverbindung(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateBankverbindung/"+e,a)},deleteBankverbindung(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/deleteBankverbindung/",{bankverbindung_id:t})},getKontakte(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/kontakt/getKontakte/"+a.id)},addNewContact(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/addNewContact/"+e,a)},loadContact(t){return this.$fhcApi.post("api/frontend/v1/stv/kontakt/loadContact/",{kontakt_id:t})},updateContact(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/kontakt/updateContact/"+e,a)},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,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/prestudent/updatePrestudent/"+e,a)},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,a){return this.$fhcApi.get("api/frontend/v1/stv/status/getHistoryPrestudent/"+a.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:a,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+a+"/"+i)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:a,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+a+"/"+i)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:a,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+a+"/"+i)},getLastBismeldestichtag(){return this.$fhcApi.get("api/frontend/v1/stv/status/getLastBismeldestichtag/")},getHistoryPrestudents(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/prestudent/getHistoryPrestudents/"+a.id)}},status:{insertStatus(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/insertStatus/"+e,a)},loadStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:a,ausbildungssemester:i}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+a+"/"+i)},updateStatus(t,{prestudent_id:e,status_kurzbz:a,studiensemester_kurzbz:i,ausbildungssemester:n},r){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+a+"/"+i+"/"+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 a="api/frontend/v1/stv/student/get/"+encodeURIComponent(t)+"/"+encodeURIComponent(e);return this.$fhcApi.post(a)},save(t,e,a,i){let n="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(a);return this.$fhcApi.post(t,n,i)}},exam:{getPruefungen(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/pruefung/getPruefungen/"+a.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,a){return this.$fhcApi.post(t,"api/frontend/v1/stv/pruefung/updatePruefung/"+e,a)},deletePruefung(t){return this.$fhcApi.post("api/frontend/v1/stv/pruefung/deletePruefung/"+t)}},abschlusspruefung:{getAbschlusspruefung(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/"+a.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 a="api/frontend/v1/stv/grades/getCertificate/"+encodeURIComponent(t);return e&&(a=a+"/"+encodeURIComponent(e)),this.$fhcApi.get(a)},getTeacherProposal(t,e){let a="api/frontend/v1/stv/grades/getTeacherProposal/"+encodeURIComponent(t);return e&&(a=a+"/"+encodeURIComponent(e)),this.$fhcApi.get(a)},getRepeaterGrades(t,e){let a="api/frontend/v1/stv/grades/getRepeaterGrades/"+encodeURIComponent(t);return e&&(a=a+"/"+encodeURIComponent(e)),this.$fhcApi.get(a)},updateCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:a,note:i,lehrveranstaltung_bezeichnung:n}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:a,note:i},{errorHeader:n})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:a,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:a},{errorHeader:i})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:a,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:a},{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,a,i){const n=i?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:a},n)}},mobility:{getMobilitaeten(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getMobilitaeten/"+a.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,a){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getPurposes/"+a.id)},getSupports(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/mobility/getSupports/"+a.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,a)=>this.$fhcApi.post(t,a,e),t.ajaxResponse=(t,e,a)=>a.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,a){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsUnaccepted/"+a.id+"/"+a.studiengang_kz)},getDocumentsAccepted(t,e,a){return this.$fhcApi.get("api/frontend/v1/stv/dokumente/getDocumentsAccepted/"+a.id+"/"+a.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,a){return this.$fhcApi.get("api/frontend/v1/stv/anrechnungen/getAnrechnungen/"+a.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,a){return this.$fhcApi.get("api/frontend/v1/stv/GemeinsameStudien/getStudien/"+a.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,a){return this.$fhcApi.get("api/frontend/v1/stv/LvTermine/getStundenplan/"+a.student_uid+"/"+a.start_date+"/"+a.end_date+"/"+a.group_consecutiveHours+"/"+a.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")}},h={person:{getNotizen(t,e,a){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getNotizen/"+a.id+"/"+a.type)},getUid(){return this.$fhcApi.get("api/frontend/v1/notiz/notizPerson/getUid/")},addNewNotiz(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/addNewNotiz/"+e,a)},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,a){return this.$fhcApi.post("api/frontend/v1/notiz/notizPerson/deleteNotiz/",{notiz_id:t,type_id:e,id:a})},updateNotiz(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/notiz/notizPerson/updateNotiz/"+e,a)},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/")}}},g={person:{getAllBetriebsmittel(t,e,a){return this.$fhcApi.get("api/frontend/v1/betriebsmittel/betriebsmittelP/getAllBetriebsmittel/"+a.type+"/"+a.id)},addNewBetriebsmittel(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/addNewBetriebsmittel/"+e,a)},loadBetriebsmittel(t){return this.$fhcApi.post("api/frontend/v1/betriebsmittel/betriebsmittelP/loadBetriebsmittel/"+t)},updateBetriebsmittel(t,e,a){return this.$fhcApi.post(t,"api/frontend/v1/betriebsmittel/betriebsmittelP/updateBetriebsmittel/"+e,a)},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)}}},f={updatePersonUnrulyStatus(t,e){try{const a={person_id:t,unruly:e},i="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(i,a,null)}catch(t){throw t}},filterPerson(t,e=""){try{const a=e+"/api/frontend/v1/checkperson/CheckPerson/filterPerson";return axios.post(a,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,a,i,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:a,typ:i,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")}},v={content(t,e=null,a=null,i=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...a?{sprache:a}:{},...i?{sichtbar:i}:{}})},getNews(t=1,e=10,a){return this.$fhcApi.get("/api/frontend/v1/Cms/getNews",{page:t,page_size:e,sprache:a})},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",{})}},y={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}`,{})}},A={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}`,{})}},w={person:{getMessages(t,e,a){return this.$fhcApi.get("api/frontend/v1/messages/messages/getMessages/"+a.id+"/"+a.type+"/"+a.size+"/"+a.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,a){return this.$fhcApi.post(t,"api/frontend/v1/messages/messages/sendMessage/"+e,a)},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)}}},_={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},$={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,a=void 0,i=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:a,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}`,{})}},k={search:r,phrasen:s,navigation:o,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:l,studstatus:d,profil:c,profilUpdate:p,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:a,tag:i=null}){return this.$fhcApi.post(`/api/frontend/v1/Bookmark/update/${t}`,{url:e,title:a})},insert:function({url:t,title:e,tag:a}){return this.$fhcApi.post("/api/frontend/v1/Bookmark/insert",{url:t,title:e,tag:a})}},stv:b,notiz:h,betriebsmittel:g,checkperson:f,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:v,lehre:y,addons:A,messages:w,vorlagen:_,addons:A,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",{})}},studium:$,language:{getAll(){return this.$fhcApi.get("/api/frontend/v1/language/get")}}},T={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 a(t,e,a,i){if("string"==typeof t&&void 0===i)[e,a,i]=[t,e,a],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===a&&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,a,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 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,a])=>{if(a instanceof FileList)for(const i of a)t.FormData.append(e+(a.length>1?"[]":""),i);else Array.isArray(a)?a.every(t=>!(t instanceof File))?t.jsondata[e]=a:a.forEach(i=>t.FormData.append(e+(a.length>1?"[]":""),i)):t.jsondata[e]=a;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(a=>(e.config[a.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[a.type])(a,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(a=>(e.config[a.type+"ErrorHandler"]||t.config.globalProperties.$fhcApi._defaultErrorHandlers[a.type])(a,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,i,r)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,i,r]=a(t,e,i,r),i&&(r?r.params=i:r={params:i}),n.get(e,r)),post:(t,e,i,r)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,i,r]=a(t,e,i,r),n.post(e,i,r)),_defaultErrorHandlers:{validation(e,a){const i=t.config.globalProperties.$fhcAlert;return a?.form?(a.form.clearValidation(),a.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(i.alertError),!1):"object"!=typeof e.messages||(a?.errorHeader?Object.values(e.messages).forEach(e=>i.alertDefault("error",Array.isArray(a.errorHeader)?t.config.globalProperties.$p.t.apply(null,a.errorHeader):a.errorHeader,e,!0)):Object.entries(e.messages).forEach(([t,e])=>i.alertDefault("error",t,e,!0)),!1)},general(e,a){const i=t.config.globalProperties.$fhcAlert;a?.form?a.form.setFeedback(!1,e.message):a?.errorHeader?i.alertDefault("error",Array.isArray(a.errorHeader)?t.config.globalProperties.$p.t.apply(null,a.errorHeader):a.errorHeader,e.message,!0):i.alertError(e.message)},php(e){const a=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":a.alertDefault("warn","PHP "+e.severity,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":a.alertDefault("info","PHP "+e.severity,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,a.alertSystemError(i)}},exception(e){const a=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"})),a.alertSystemError(i)},db(e){const a=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"),a.alertSystemError(i)},auth(e,a){const i=t.config.globalProperties.$fhcAlert;var n="";n+="Controller name: "+e.controller+"\n",n+="Method name: "+e.method+"\n",n+="Required permissions: "+e.required_permissions,a?.errorHeader?i.alertDefault("error",Array.isArray(a.errorHeader)?t.config.globalProperties.$p.t.apply(null,a.errorHeader):a.errorHeader,e.message,!0):i.alertDefault("error",e.message,n)}}};class r{constructor(e,a){void 0===a?(this.$fhcApi={getUri:e=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.getUri(e)),get:(e,a,i,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,a,i,n)),post:(e,a,i,n)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,a,i,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(a||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 s=new r(k);e?.factory&&(console.warn("$fhcApi is DEPRECATED!"),s.addEndpoints(e.factory)),t.config.globalProperties.$fhcApi.factory=s,t.provide("$fhcApi",t.config.globalProperties.$fhcApi)}};const S="error",z="retval",F={get:function(t,e,a=null){return F._axiosCall(t,e,"get",a)},post:function(t,e,a=null){return F._axiosCall(t,e,"post",a)},isSuccess:function(t){return!("object"!=typeof t||!t.hasOwnProperty(S)||!t.hasOwnProperty(z)||0!=t.error)},isError:function(t){return!F.isSuccess(t)},hasData:function(t){return!(!F.isSuccess(t)||!("object"==typeof t[z]&&Object.keys(t[z]).length>0||"array"==typeof t[z]&&t[z].length>0||"string"==typeof t[z]&&""!=t[z].trim()||"number"==typeof t[z]))},getData:function(t){return F.hasData(t)?t[z]:null},getError:function(t){return"object"==typeof t&&Object.keys(t).length>0&&t.hasOwnProperty(z)?t[z]:"Generic error"},getErrorCode:function(t){return"object"==typeof t&&t.hasOwnProperty(S)?t[S]: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,a){},_axiosCall:function(t,e,a,i){let n={method:a,url:F._generateRouterURI(t),timeout:5e3};if("get"==a?n.params=e:n.data=e,"object"==typeof i)for(var r in i)n[r]=i[r];return axios(n)}},x=document.createElement("div"),C=Vue.createApp({name:"FhcAlertApp",components:{PvToast:e,PvConfirm:a},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(){x.parentElement.removeChild(x)},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'});C.use(t),C.use(i);const D=C.mount(x);document.body.appendChild(x);var O={install:(t,e)=>{t.config.globalProperties.$p||t.use(N);const a={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);D.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);D.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);D.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);D.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);D.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,a)=>{D.$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((a,i)=>{D.$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(){a(!0)},reject(){a(!1)}})}),alertDefault(t,e,a,i=!1,n=!1){let r={severity:t,summary:e,detail:a,html:n};i||(r.life=3e3),D.$refs.toast.add(r)},alertMultiple(t,e="info",a="Info",i=!1,n=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,a,t,i,n)),!0)},handleSystemError(t){if(!t.hasOwnProperty("name")||t.name.toLowerCase()!=="AbortError".toLowerCase()){if("string"==typeof t)return a.alertSystemError(t);if(Array.isArray(t)&&t.every(t=>"string"==typeof t))return t.every(a.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,a.alertSystemError(e)}a.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 a.alertWarning(t);if(Array.isArray(t)){if(t.every(t=>"string"==typeof t))return t.every(a.alertWarning);if(t.every(t=>"object"==typeof t)&&null!==msg)return t.every(t=>{t.hasOwnProperty("data")&&t.data.hasOwnProperty("retval")?a.alertWarning(JSON.stringify(t.data.retval)):a.alertSystemError(JSON.stringify(t))})}"object"!=typeof t||null===t?a.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")?a.alertWarning(JSON.stringify(t.data.retval)):a.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=>a.handleFormValidation(e,t)}else if(400==t?.response?.status){let i=F.getError(t.response.data);"object"!=typeof i&&(i=t.response.data),a.resetFormValidation(e);const n=Object.entries(i).filter(([t,a])=>{const i=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!i||(i.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:a})),!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(a.alertError))}if(400==t?.response?.status){let e=F.getError(t.response.data);a.alertError("object"==typeof e?Object.values(e):e)}else a.handleSystemError(t)}};t.config.globalProperties.$fhcAlert=a,t.provide("$fhcAlert",t.config.globalProperties.$fhcAlert)}},E={install:(t,e)=>{if(t.config.globalProperties.$api)return;function a(t,e){Array.isArray(t)?t.forEach(e):Object.entries(t).forEach(([t,a])=>a.forEach(a=>e(a,t)))}t.config.globalProperties.$fhcAlert||t.use(O);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 a=t.config.globalProperties.$p;if(!a)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,a])=>{t[e]||(t[e]=[]),Array.isArray(a)?t[e].push(...a):t[e].push(a)})}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 a.loadCategory("dashboard");t='
'+a.t("dashboard/general")+"
"}else t="
"+t+"
";return e+=i.length,t+"
"+i.join("
")+"
"}));return{counter:e,msgs:i}}let n,r;Array.isArray(e)?({counter:n,msgs:r}=await i(e)):({counter:n,msgs:r}=await Object.entries(e).reduce(async(t,[e,a])=>{const n=await t,{counter:r,msgs:s}=await i(a);return n.counter+=r,n.msgs.push("
"+e+"
"+s.join("")+"
"),n},Promise.resolve({counter:0,msgs:[]}))),await a.loadCategory("ui");const s=a.t("ui/n_errors",{n:n});t.config.globalProperties.$fhcAlert.alertDefault("error",s,"
"+r.join("")+"
",!0,!0)},php(e){a(e,(e,a)=>{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":a?a+=": PHP "+e.severity:a="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("warn",a,i,!0);break;case"Notice":case"User Notice":case"Runtime Notice":a?a+=": PHP "+e.severity:a="PHP "+e.severity,t.config.globalProperties.$fhcAlert.alertDefault("info",a,i,!0);break;default:i="Type: PHP "+e.severity+"\n\n"+i,a&&(i=a+"\n\n"+i),t.config.globalProperties.$fhcAlert.alertSystemError(i)}})},exception(e){a(e,(e,a)=>{var i="";a&&(i+=a+"\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){a(e,(e,a)=>{var i="";a&&(i+=a+"\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){a(e,(e,a)=>{a?a+=": "+e.message:a=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",a,i,!0)})}}};function n(t,e,a,i){if("string"==typeof t&&void 0===i)[e,a,i]=[t,e,a],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===a&&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,a,i]}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 s(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:a,handler:n,combine:r}=t;return t={...i},Object.entries({fail:a,success:e}).forEach(([e,a])=>{void 0!==a&&(t[e]=a)}),Object.entries({handler:n,combine:r}).forEach(([e,a])=>{void 0!==a&&(t[e]={...t[e],...a})}),t}function o(t){const e=s(t?.errorHandling);if(t?.form){const a=e.handler.form;e.handler={...e.handler,form:e=>a(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 a={},i=[];if(null==e)return{};for(;e.length;)i.push(e.pop());for(var n of i){let i=n.type,s=null;for(var r in t.combine){let e=t.combine[r].includes(i),a=t.handler[r];if(e&&a&&(s=r,"form"==s))break}s&&(i=s);t.handler[i]?(a[i]||(a[i]=[]),Array.isArray(n)?a[i].push(...n):a[i].push(n)):e.push(n)}return a}void 0!==e?.errorHandling&&(i=s(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,a])=>{if(a instanceof FileList)for(const i of a)t.FormData.append(e+(a.length>1?"[]":""),i);else Array.isArray(a)?a.every(t=>!(t instanceof File))?t.jsondata[e]=a:a.forEach(i=>t.FormData.append(e+(a.length>1?"[]":""),i)):t.jsondata[e]=a;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(a=>(e.config[a.type+"ErrorHandler"]||t.config.globalProperties.$api._defaultErrorHandlers[a.type])(a,e.config))),r(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 a=l(t),i=d(e,a);for(var n in i)e.handler[n](i[n]);return a.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>c.getUri({url:t}),get:(t,e,a,i)=>([e,a,i]=n(t,e,a,i),a&&(i?i.params=a:i={params:a}),c.get(e,i)),post:(t,e,a,i)=>([e,a,i]=n(t,e,a,i),c.post(e,a,i)),call(e,a,i){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(i,void 0,void 0,a||{}),r=o(e);if(!r.success&&!r.fail)return t;const s={};for(var c of t){const[t,e]="fulfilled"===c.status?[r.success,c.value]:[r.fail,c.reason];if(!t)return;const a=d(r,l(e));for(var p in a)s[p]?s[p][e.config.errorHeader]=a[p]:s[p]={[e.config.errorHeader]:a[p]}}for(var u in s)r.handler[u](s[u]);return t})}let{method:r,url:s,params:c,config:p}=e;return void 0!==a&&(p=a),r||(r="get"),r.toLowerCase&&(r=r.toLowerCase()),"get"==r?this.get(i,s,c,p):"post"==r?this.post(i,s,c,p):void console.error("FhcApi: method not allowed:",r)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},P={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 j=Vue.reactive({}),B={};let M=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),R=Vue.computed(()=>M.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==M.value).LC_Time:null);const L={user_language:M,user_locale:R,setLanguage(t){const e=Object.keys(j);return this.config.globalProperties.$api.call(P.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{j[t.category][t.phrase]=t.text}),M.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(B[t]||(B[t]=this.config.globalProperties.$api.call(P.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=>{j[t]=e})),B[t])},t_ref(t,e,a){return console.warn("deprecated"),Vue.computed(()=>this.t(t,e,a))},t(t,e,a){if(void 0===a&&(Array.isArray(t)&&2==t.length||t.split&&2==t.split("/").length)&&(a=e,[t,e]=t.split?t.split("/"):t),void 0===e)return console.error("invalid input",t,e,a),"";let i=Vue.computed(()=>j[t]?function(t,e,a){let i=j[t][e];return i?(a&&(i=i.replace(/\{([^}]*)\}/g,(t,e)=>void 0===a[e]?t:a[e])),i):"<< PHRASE "+e+">>"}(t,e,a):"");return j[t]||this.loadCategory(t),i.value}};var N={install(t,e){t.config.globalProperties.$fhcApi||t.use(T),t.config.globalProperties.$api||t.use(E),t.config.globalProperties.$p={t:L.t,loadCategory:e=>L.loadCategory.call(t,e),setLanguage:e=>L.setLanguage.call(t,e),user_language:M,user_locale:R,t_ref:L.t_ref},t.provide("$p",t.config.globalProperties.$p)}},V=Object.freeze({__proto__:null,default:N,user_locale:R}),I={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,a=[];for(var i of this.modelValue)e.items.add(i),a.push(this.stringifyFile(i));for(var i of t.target.files)a.indexOf(this.stringifyFile(i))<0&&e.items.add(i);this.$emit("update:modelValue",e.files)},removeFile(t){const e=Array.from(this.modelValue)[t],a=new DataTransfer;for(var i of this.modelValue)i!==e&&a.items.add(i);this.$emit("update:modelValue",a.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 a of t)if(a instanceof File)e.items.add(a);else{const t=new File([JSON.stringify(a)],a.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
    '},H={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,a,i){const n=this,r={};void 0!==t&&(r.default=()=>t),void 0!==a&&(r.title=()=>a),void 0!==i&&(r.footer=()=>i);let s=!1;return"undefined"!=typeof primevue&&(s=!0),new Promise((t,a)=>{const i=Vue.createApp({name:"ModalTmpApp",setup:()=>()=>Vue.h(n,{class:"fade",...e,ref:"modal","onHidden.bs.modal":i.unmount},r),mounted(){this.$refs.modal.show()},beforeUnmount(){this.$refs.modal&&(!1!==this.$refs.modal.result?t(this.$refs.modal.result):a())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");s&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return V}).then(t=>{i.use(t.default),i.mount(o),document.body.appendChild(o)})})},template:''},G={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,a,i,n,r,s)=>({method:"post",url:"/api/frontend/v1/Abgabe/postSerientermin",params:{datum:t,paabgabetyp_kurzbz:e,bezeichnung:a,kurzbz:i,upload_allowed:n,projektarbeit_ids:r,fixtermin:s}}),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 U={name:"FhcOverlay",props:{active:{type:Boolean,default:!1}},template:'\t\n\t\t
    \n\t\t\t\n\t\t
    \n\t'},q={name:"AbgabeStudentDetail",components:{Upload:I,BsModal:H,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:U},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),a=t=>String(t).padStart(2,"0"),i=a(e.getMonth()+1);return`${a(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 a=0;a{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 '},J="Europe/Vienna",Z=luxon.DateTime.now().setZone(J);function W(t,e){const a=luxon.DateTime.fromISO(t.datum,{zone:J}).endOf("day"),i=t.abgabedatum?luxon.DateTime.fromISO(t.abgabedatum,{zone:J}):null;t.diffindays=a.diff(Z,"days").days;const n=i&&i>a;if(t.note){const a="object"==typeof t.note?t.note:e.find(e=>e.note==t.note);if(!0===a?.positiv)return"bestanden";if(!1===a?.positiv)return"nichtbestanden"}return t.bezeichnung?.benotbar&&a<=Z?"beurteilungerforderlich":t.upload_allowed?t.abgabedatum?n?"verspaetet":"abgegeben":athis.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,a=!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&&(a=!0))}),e&&a},checkQualityGatesOptional(t){const e=t.find(t=>"qualgate1"==t.paabgabetyp_kurzbz),a=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 n=!0;return a&&(n=!1,t.forEach(t=>{const e=this.notenOptions?.find(e=>e.note==t.note);e&&e.positiv&&"qualgate2"==t.paabgabetyp_kurzbz&&(n=!0)})),i&&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 a=this.projektarbeiten?.find(e=>e.projektarbeit_id==t.projektarbeit_id);a.abgabetermine=e.data[0].retval;const i=null!==a.note;a.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(a.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=W(t,this.notenOptions)}),a.betreuer=this.buildBetreuer(a),a.student_uid=this.student_uid,this.selectedProjektarbeit=a,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(G.getStudentProjektarbeiten(this.student_uid)).then(t=>{t?.data&&this.setupData(t.data)})},loadAbgaben(t){return new Promise(e=>{this.$api.call(G.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(G.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(G.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1}),this.$api.call(G.getConfigStudent()).then(t=>{this.moodle_link=t.data?.moodle_link}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\n '},K={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'},Q="Filter Component New Filter";var X={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 a=e.type.toLowerCase();return a.indexOf("int")>=0?t[e.name]="Numeric":a.indexOf("varchar")>=0||a.indexOf("text")>=0||a.indexOf("bpchar")>=0?t[e.name]="Text":a.indexOf("timestamp")>=0||a.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!=Q);t.filter(t=>""==t.condition).length?alert("Please fill all the filter options"):this.$emit("applyFilterConfig",t)},addField(t){this.currentFields.push({name:Q})},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'},tt={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 et={jsonLines:"fa-file-lines",xlsx:"fa-file-excel",pdf:"fa-file-pdf",html:"fa-file-code",json:"fa-file",csv:"fa-file-csv"},at={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 it={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 a,i=t[e];i&&("[object String]"===Object.prototype.toString.call(i)?null!==(a=this.stringToFileFormatter(i))?n.push({icon:"fa-solid "+et[a],label:i===e?at[a]:e,formatter:a}):null!==(a=this.stringToFileFormatter(e))?n.push({icon:"fa-solid "+et[a],label:i,formatter:a}):alert("neither "+e+" nor "+i+" are supported download file types"):"object"!=typeof i||Array.isArray(i)?null!==(a=this.stringToFileFormatter(e))?n.push({icon:"fa-solid "+et[a],label:at[a],formatter:a}):alert(e+" is not a supported download file type"):null!==(a=this.stringToFileFormatter(e))?(void 0===i.formatter&&(i.formatter=a),void 0===i.label&&(i.label=at[a]),void 0===i.icon&&(i.icon=et[a]),n.push(i)):(void 0===i.label&&(i.label=e),n.push(i)))}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 "+et[e],label:at[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 nt=new WeakMap;var rt={mounted(t,e){let a=!1;nt.set(t,e=>{if(!a)return;if(t.contains(e.target))return;const i=bootstrap.Collapse.getInstance(t);i&&i.hide()}),t.addEventListener("shown.bs.collapse",()=>{a=!0}),t.addEventListener("hide.bs.collapse",()=>{a=!1}),document.addEventListener("click",nt.get(t),!0)},beforeUnmount(t,e){document.removeEventListener("click",nt.get(t)),delete t.collapsibleAutoHideFunc}};window.Tabulator?.extendModule("layout","modes",{fitDataStretchFrozen(t,e){var a=0,i=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&&(a+=t.getWidth())}),r?(n=i-a+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 st={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}})},ot=0;const lt={components:{CoreFetchCmpt:K,FilterConfig:X,FilterColumns:tt,TableDownload:it},directives:{collapseAutoClose:rt},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined"],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))||[],a=null;if(this.tabulatorOptions&&this.tabulatorOptions.hasOwnProperty("columns")&&(a=this.tabulatorOptions.columns),!Array.isArray(a)||Array.isArray(a)&&a.length=0,a.push(t)}}else for(let i of a)i.visible=e.indexOf(i.field)>=0||-1==t.indexOf(i.field),i.hasOwnProperty("resizable")&&(i.resizable=i.visible);return a},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,a=e=>{this.setRenderData(e),t()};null===e?this.startFetchCmpt(t=>this.$api.call(st.getFilter(t)),null,a):this.startFetchCmpt(t=>this.$api.call(st.getFilterById(t)),{filterId:e},a)});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 a=0;a{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})},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(st.getFilter(t)),null,this.render):this.startFetchCmpt(t=>this.$api.call(st.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(st.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(st.removeCustomFilter(t)),{filterId:e},this.getFilter)},handlerGetFilterById:function(t){let e=null,a=t.currentTarget.getAttribute("href");e=null==a?t.currentTarget.value:a.substring(1),this.switchFilter(e)},switchFilter(t){this.selectedFilter=t,this.getFilter()},applyFilterConfig(t){this.selectedFilter=null,this.startFetchCmpt(t=>this.$api.call(st.applyFilterFields(t)),{filterFields:t},this.getFilter)},appendChild(t,e){let a=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'},dt={name:"AbgabeMitarbeiterDetail",components:{BsModal:H,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(G.postProjektarbeitAbgabe(t)).then(e=>{if("success"==e?.meta?.status){this.$fhcAlert.alertSuccess(this.$p.t("ui/gespeichert"));const a=this.allowedNotenOptions.find(t=>t.note==e.data[0].note),i={allowedToSave:!0,allowedToDelete:!0,...e.data[0]};i.note&&(i.note=a,i.noteBackend=a),i.invertedFixtermin=!i.fixtermin;const n=e.data[1],r=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz==i.paabgabetyp_kurzbz);if(i.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=i.paabgabetyp_kurzbz,t.noteBackend=a,t.dateStyle=W(t,this.notenOptions)}else i.dateStyle=W(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 s=!n&&!i.note?.positiv&&null!==i.note,o=n&&!i.note?.positiv&&null!==i.note&&(n.note?.positiv||void 0===n.note);s||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(G.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(G.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),a=t=>String(t).padStart(2,"0"),i=a(e.getMonth()+1);return`${a(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'};function ct(t,e,a){let i=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){a(t)}},template:'\n\t\t\t\t '}).use(primevue.config.default).mount(i),i}async function pt(t,e,a,i,n){let r=t.join(","),s="";const o=a&&"string"==typeof a?a.length+9:0;if(r.length>2024&&!1===await i.confirm({message:n.t("stv","zuvieleEMails")}))return;let l=!0,d=e?.ctrlKey||e?.metaKey;for(;r.length>0;){if(r.length+o>2024){let t=r.lastIndexOf(",",1900);s=r.substring(0,t),r=r.substring(t+1)}else s=r,r="";let t=d?`mailto:?bcc=${s}`:`mailto:${s}`;a&&"string"==typeof a&&(t+=`?subject=${a}`),l?(window.location.href=t,l=!1):!0===await i.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 a=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),a>=e&&a<=i}return a.toDateString()===e.toDateString()}let i=new Date(t);return a.toDateString()===i.toDateString()}});const ut={name:"AbgabetoolMitarbeiter",components:{BsModal:H,CoreFilterCmpt:lt,AbgabeDetail:dt,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Textarea:primevue.textarea,TieredMenu:primevue.tieredmenu,VueDatePicker:n,FhcOverlay:U},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,a){if(!t.getRow().getData().selectable)return;let i=document.createElement("input");i.type="checkbox",i.addEventListener("click",a=>{a.stopPropagation(),e&&e.handleClick&&e.handleClick(a,t)}),t.getRow().getData().checkbox=i;let n=document.createElement("div");return n.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",n.appendChild(i),n},titleFormatter:function(t,e,a){let i=document.createElement("input");return i.type="checkbox",i.addEventListener("click",a=>{a.stopPropagation(),e&&e.handleClick&&e.handleClick(a,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:ct,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:ct,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}`)});pt([...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,a,i,n,r,s)=>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 a=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},n=i(t[0]),r=i(t[1]);return n&&!r?a.hasSame(n,"day"):!(!n||!r)&&(a>=n.startOf("day")&&a<=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 a=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(a),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let a of e.headerFilters)t.setHeaderFilterValue(a.field,a.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const a=e.sort.map(e=>{const a=t.columnManager.findColumn(e.field);return a?{column:a,dir:e.dir}:null}).filter(Boolean);t.setSort(a)},100)),this.stateRestored=!0}})},checkQualityGateStatus(t){const e=[],a=[];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&&a.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)}),a.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(a=>{a.dateStyle=W(a,this.notenOptions);const i=luxon.DateTime.fromISO(a.datum).endOf("day");a.luxonDate=i,a.diffMs=i.toMillis()-e.toMillis(),a.diffMs<0?(!t.prevTermin||a.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=a):a.diffMs>0&&(!t.nextTermin||a.diffMs
    '+t+'

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

    "}return""},selectHandler(t,e){const a=e.getRow();return a.isSelected()?a.deselect():a.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const a=e.getTable().getRows().filter(t=>t.getData().selectable);return a.every(t=>t.isSelected())?a.forEach(t=>t.deselect()):a.forEach(t=>t.select()),t.stopPropagation(),!1},handleToggleFullscreenDetail(){this.detailIsFullscreen=!this.detailIsFullscreen},getOptionLabelAbgabetyp:t=>t.bezeichnung,formatDate(t){const e=new Date(t),a=t=>String(t).padStart(2,"0"),i=a(e.getMonth()+1);return`${a(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(G.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 a=this.$refs.abgabeTable?.tabulator.element.querySelector(".tabulator-tableholder");a&&(a.scrollLeft=t,a.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 a=!1;if(void 0!==e.note&&null!==e.note){this.notenOptionsNonFinal.find(t=>t.note)&&(a=!1),a=!0}e?.abgabetermine?.length&&this.$api.call(G.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const a=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);a&&void 0!==t.signatur&&(a.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=!a,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(G.getMitarbeiterProjektarbeiten(t)).then(t=>{t?.data&&this.setupData(t.data)}).finally(()=>{e&&e()})},loadAbgaben(t){return new Promise(e=>{this.$api.call(G.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 a=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-a.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(G.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(G.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(G.getPaAbgabetypen()).then(t=>{this.abgabeTypeOptions=t.data}).catch(t=>{this.loading=!1})},mounted(){this.setupMounted()},template:'\n\t\n '};var bt={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,a,i){const n=this,r={};void 0!==t&&(r.default=()=>t),void 0!==a&&(r.title=()=>a),void 0!==i&&(r.footer=()=>i);let s=!1;return"undefined"!=typeof primevue&&(s=!0),new Promise((t,a)=>{const i=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):a())},unmounted(){o.parentElement.removeChild(o)}}),o=document.createElement("div");s&&i.use(primevue.config.default,{zIndex:{overlay:9999}}),Promise.resolve().then(function(){return V}).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'},ht={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 gt={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:H,BsOffcanvas:bt,CoreFilterCmpt:lt,AbgabeDetail:dt,Checkbox:primevue.checkbox,Dropdown:primevue.dropdown,Inplace:primevue.inplace,Textarea:primevue.textarea,Timeline:primevue.timeline,TieredMenu:primevue.tieredmenu,VueDatePicker:n,FhcOverlay:U},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,a){if(!t.getRow().getData().selectable)return;let i=document.createElement("input");i.type="checkbox",i.addEventListener("click",a=>{a.stopPropagation(),e&&e.handleClick&&e.handleClick(a,t)}),t.getRow().getData().checkbox=i;let n=document.createElement("div");return n.style.cssText="display: flex; justify-content: center; align-items: center; height: 100%; width: 100%;",n.appendChild(i),n},titleFormatter:function(t,e,a){let i=document.createElement("input");return i.type="checkbox",i.addEventListener("click",a=>{a.stopPropagation(),e&&e.handleClick&&e.handleClick(a,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:ct,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:ct,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,a,i,n,r,s)=>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 a=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},n=i(t[0]),r=i(t[1]);return n&&!r?a.hasSame(n,"day"):!(!n||!r)&&(a>=n.startOf("day")&&a<=r.endOf("day"))},sammelMailStudent(t){const e=[];this.selectedData.forEach(t=>{e.push(`${t.student_uid}@${this.domain}`)});const a=[...new Set(e)],i=this.$p.t("abgabetool/c4sammelmailStudentBetreff",[this.selectedStudiengangOption?.bezeichnung]);pt(a,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 a=[...new Set(e)],i=this.$p.t("abgabetool/c4sammelmailBetreuerBetreff",[this.selectedStudiengangOption?.bezeichnung]);pt(a,t.originalEvent,i,this.$fhcAlert,this.$p)},selectHandler(t,e){const a=e.getRow();return a.isSelected()?a.deselect():a.select(),t.stopPropagation(),!1},selectAllHandler(t,e){const a=e.getTable().getRows().filter(t=>t.getData().selectable);return a.every(t=>t.isSelected())?a.forEach(t=>t.deselect()):a.forEach(t=>t.select()),t.stopPropagation(),!1},checkQualityGateStatus(t){const e=[],a=[];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&&a.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)}),a.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,a=e.getFilters().filter(t=>"studiensemester_kurzbz"!=t.field),i=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:i};e.setFilter([...a,n])}},checkAbgabetermineProjektarbeit(t){const e=luxon.DateTime.now();t.abgabetermine.forEach(a=>{a.bezeichnung=this.abgabeTypeOptions.find(t=>t.paabgabetyp_kurzbz===a.paabgabetyp_kurzbz),a.dateStyle=W(a,this.notenOptions);const i=luxon.DateTime.fromISO(a.datum).endOf("day");a.luxonDate=i,a.diffMs=i.toMillis()-e.toMillis(),a.diffMs<0?(!t.prevTermin||a.diffMs>t.prevTermin.diffMs)&&(t.prevTermin=a):a.diffMs>0&&(!t.nextTermin||a.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 a=e.columns.map(t=>({field:t.field,width:t.width,visible:t.visible}));t.setColumnLayout(a),this.colLayoutRestored=!0}if(e?.filters&&!this.filtersRestored&&(this.filtersRestored=!0,t.setFilter(e.filters)),e?.headerFilters&&!this.headerFiltersRestored){this.headerFiltersRestored=!0;for(let a of e.headerFilters)t.setHeaderFilterValue(a.field,a.value)}e?.sort?.length&&!this.sortRestored&&(this.sortRestored=!0,setTimeout(()=>{const a=e.sort.map(e=>{const a=t.columnManager.findColumn(e.field);return a?{column:a,dir:e.dir}:null}).filter(Boolean);t.setSort(a)},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),a=t=>String(t).padStart(2,"0"),i=a(e.getMonth()+1);return`${a(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 a=t.getValue(),i=(t,e,a)=>{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(),a()}),i};return e.append(i("fa fa-folder-open","abgabetool/c4details",()=>this.setDetailComponent(a)),i("fa fa-timeline","abgabetool/c4termineTimeLine",()=>this.openTimeline(a))),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(G.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 a=e.data;t.forEach(t=>{const e=a.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,n=i.rowManager.scrollLeft,r=i.rowManager.scrollTop,s=this.mapProjekteToTableData(this.projektarbeiten);i.setData(s),i.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(G.getSignaturStatusForProjektarbeitAbgaben(e.abgabetermine.map(t=>t.paabgabe_id),e.student_uid)).then(t=>{"success"===t.meta.status&&t.data.forEach(t=>{const a=e.abgabetermine.find(e=>e.paabgabe_id==t.paabgabe_id);a&&void 0!==t.signatur&&(a.signatur=t.signatur)})});const a=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=!a,t.allowedToDelete=!a&&!t.abgabedatum});const i=e.vorname??e.student_vorname,n=e.nachname??e.student_nachname;e.student=`${i} ${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 a=e.bezeichnung?.bezeichnung??e.bezeichnung;return'
    '+t+'

    '+a+" - "+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(G.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(G.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 a=e.getBoundingClientRect();this.abgabeTableOptions.height=window.visualViewport.height-a.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 a=e.getRows();t.forEach(t=>{const e=a.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(G.getConfig()),this.$api.call(G.getStudiengaenge()),this.$api.call(ht.getAllStudiensemesterAndAktOrNext()),this.$api.call(G.getNoten()),this.$api.call(G.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 a={studiensemester_kurzbz:this.$p.t("abgabetool/c4all")};this.curSem=a,this.studiensemesterOptions=[a,...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 '},ft={name:"DeadlineOverview",components:{CoreFilterCmpt:lt},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(G.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 a=e.getBoundingClientRect();this.deadlineTableOptions.height=window.visualViewport.height-a.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 mt=Vue.createApp({name:"AbgabetoolApp",components:{AbgabetoolStudent:Y,AbgabetoolMitarbeiter:ut,AbgabetoolAssistenz:gt,DeadlineOverview:ft},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 a=t.getAttribute("uid");this.uid=a;const i=t.getAttribute("stg_kz_prop");this.stg_kz=i;const n=t.getAttribute("student_uid_prop");this.student_uid=n},template:'\n\t\t\n\t'});mt.config.globalProperties.$capitalize=function(t){return t?t[0].toUpperCase()+t.slice(1):""},mt.use(primevue.config.default,{zIndex:{overlay:9e3,tooltip:8e3}}),mt.directive("tooltip",primevue.tooltip),mt.use(N),mt.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.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"); //# 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 ed7cecd77..79d25476f 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.js","../../../../js/api/notiz/person.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/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}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\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}","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 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\tstudium,\n language\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};","/**\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],\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});\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\t/**\n\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","notiz","getNotizen","type","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","event","isBerechtigt","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","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","projekt","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.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 diff --git a/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js b/public/dist/js/apps/Bismeldestichtag/Bismeldestichtag.js index 9e9e2652a..11ecaa734 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 r from"../../../../../index.ci.php/public/js/components/primevue/confirmationservice/confirmationservice.esm.min.js";const i=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"},u={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 i=[];for(var e in t){var n,r=t[e];r&&("[object String]"===Object.prototype.toString.call(r)?null!==(n=this.stringToFileFormatter(r))?i.push({icon:"fa-solid "+d[n],label:r===e?u[n]:e,formatter:n}):null!==(n=this.stringToFileFormatter(e))?i.push({icon:"fa-solid "+d[n],label:r,formatter:n}):alert("neither "+e+" nor "+r+" are supported download file types"):"object"!=typeof r||Array.isArray(r)?null!==(n=this.stringToFileFormatter(e))?i.push({icon:"fa-solid "+d[n],label:u[n],formatter:n}):alert(e+" is not a supported download file type"):null!==(n=this.stringToFileFormatter(e))?(void 0===r.formatter&&(r.formatter=n),void 0===r.label&&(r.label=u[n]),void 0===r.icon&&(r.icon=d[n]),i.push(r)):(void 0===r.label&&(r.label=e),i.push(r)))}t=i}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:u[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 r=bootstrap.Collapse.getInstance(t);r&&r.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,r=this.table.rowManager.element.clientWidth,i=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?(i=r-n+s.getWidth(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&(s.setWidth(0),this.table.modules.responsiveLayout.update()),i>0?s.setWidth(i):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 m={components:{CoreFetchCmpt:s,FilterConfig:o,FilterColumns:l,TableDownload:p},directives:{collapseAutoClose:f},emits:["nwNewEntry","click:new","tableBuilt","uuidDefined"],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 r of n)r.visible=e.indexOf(r.field)>=0||-1==t.indexOf(r.field),r.hasOwnProperty("resizable")&&(r.resizable=r.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})},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 r=0;r{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={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(v.getHeader(this.getNavigationPage()))},fetchCmptApiFunctionSideMenu(){return this.$api.call(v.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,r){let i={method:n,url:y._generateRouterURI(t),timeout:5e3};if("get"==n?i.params=e:i.data=e,"object"==typeof r)for(var s in r)i[s]=r[s];return axios(i)}},F=2e3,$={getStudiensemester:function(){return y.get("codex/Bismeldestichtag/getStudiensemester",null,{timeout:F})},getBismeldestichtage:function(){return y.get("codex/Bismeldestichtag/getBismeldestichtage",null,{timeout:F})},addBismeldestichtag:function(t){return y.post("codex/Bismeldestichtag/addBismeldestichtag",{meldestichtag:t.meldestichtag,studiensemester_kurzbz:t.studiensemester_kurzbz},{timeout:F})},deleteBismeldestichtag:function(t){return y.post("codex/Bismeldestichtag/deleteBismeldestichtag",{meldestichtag_id:t.meldestichtag_id},{timeout:F})}};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})}},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})}},P={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,r,i){return this.$fhcApi.post("/api/frontend/v1/studstatus/unterbrechung/createAntrag",{studiensemester:t,prestudent_id:e,grund:n,datum_wiedereinstieg:r,attachment:i},{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",{})}},D={ +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={ //! 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:r,requested_change:i}){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:r,requested_change:i})},denyProfilRequest:function({profil_update_id:t,uid:e,topic:n,status_message:r}){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:r})},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,r=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,...r?{fileID:r}:{}})},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})}},O={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})}},w={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:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/advanceStatus/"+t+"/"+e+"/"+n+"/"+r)},confirmStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/confirmStatus/"+t+"/"+e+"/"+n+"/"+r)},isLastStatus(t){return this.$fhcApi.get("api/frontend/v1/stv/status/isLastStatus/"+t)},deleteStatus({prestudent_id:t,status_kurzbz:e,studiensemester_kurzbz:n,ausbildungssemester:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/deleteStatus/"+t+"/"+e+"/"+n+"/"+r)},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:r}){return this.$fhcApi.post("api/frontend/v1/stv/status/loadStatus/"+t+"/"+e+"/"+n+"/"+r)},updateStatus(t,{prestudent_id:e,status_kurzbz:n,studiensemester_kurzbz:r,ausbildungssemester:i},s){return this.$fhcApi.post(t,"api/frontend/v1/stv/status/updateStatus/"+e+"/"+n+"/"+r+"/"+i,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,r){let i="api/frontend/v1/stv/student/save/"+encodeURIComponent(e)+"/"+encodeURIComponent(n);return this.$fhcApi.post(t,i,r)}},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:r,lehrveranstaltung_bezeichnung:i}){return this.$fhcApi.post("api/frontend/v1/stv/grades/updateCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,note:r},{errorHeader:i})},deleteCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/deleteCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:r})},copyTeacherProposalToCertificate({lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n,lehrveranstaltung_bezeichnung:r}){return this.$fhcApi.post("api/frontend/v1/stv/grades/copyTeacherProposalToCertificate",{lehrveranstaltung_id:t,student_uid:e,studiensemester_kurzbz:n},{errorHeader:r})},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,r){const i=r?{errorHandling:!1}:{};return this.$fhcApi.post("api/frontend/v1/stv/grades/getGradeFromPoints",{points:t,lehrveranstaltung_id:e,studiensemester_kurzbz:n},i)}},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")}},B={person:{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/")}}},H={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},r="/api/frontend/v1/checkperson/CheckPerson/updatePersonUnrulyStatus";return this.$fhcApi.post(r,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}}},L={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,r,i=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:r,personenanzahl:i})},getRoomTypes(){return this.$fhcApi.get(FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/api/frontend/v1/Ort/getTypes")}},x={content(t,e=null,n=null,r=null){return this.$fhcApi.get("/api/frontend/v1/Cms/content",{content_id:t,...e?{version:e}:{},...n?{sprache:n}:{},...r?{sichtbar:r}:{}})},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}`,{})}},M={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}`,{})}},j={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)}}},I={getVorlagen(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagen/")},getVorlagenByLoggedInUser(){return this.$fhcApi.get("api/frontend/v1/vorlagen/vorlagen/getVorlagenByLoggedInUser/")}},z={getStudiensemester:function(){return this.$fhcApi.get("/components/Cis/Mylv/Studiensemester",{})},getAllStudienSemester:function(t=void 0,e=void 0,n=void 0,r=void 0){return this.$fhcApi.get("/api/frontend/v1/Studium/getStudienAllSemester",{studiensemester:t,studiengang:e,semester:n,studienplan:r})},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}`,{})}},N={search:C,phrasen:S,navigation:E,dashboard:{async getViewData(){return this.$fhcApi.get("/api/frontend/v1/Cis4FhcApi/getViewData",null,null)}},filter:T,studstatus:P,profil:k,profilUpdate:D,lvPlan:O,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:r=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:w,notiz:B,betriebsmittel:H,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:L,cms:x,lehre:J,addons:M,messages:j,vorlagen:I,addons:M,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",{})}},studium:z,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,r){if("string"==typeof t&&void 0===r)[e,n,r]=[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===r&&(r=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},r?r.form=t:r={form:t}}return[e,n,r]}function r(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 i=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});i.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 r of n)t.FormData.append(e+(n.length>1?"[]":""),r);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(r=>t.FormData.append(e+(n.length>1?"[]":""),r)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),i.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))),r(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."),i.getUri({url:t})),get:(t,e,r,s)=>(console.warn("$fhcApi.get is DEPRECATED! Use $api.get instead."),[e,r,s]=n(t,e,r,s),r&&(s?s.params=r:s={params:r}),i.get(e,s)),post:(t,e,r,s)=>(console.warn("$fhcApi.post is DEPRECATED! Use $api.post instead."),[e,r,s]=n(t,e,r,s),i.post(e,r,s)),_defaultErrorHandlers:{validation(e,n){const r=t.config.globalProperties.$fhcAlert;return n?.form?(n.form.clearValidation(),n.form.setFeedback(!1,e.messages),!1):Array.isArray(e.messages)?(e.messages.forEach(r.alertError),!1):"object"!=typeof e.messages||(n?.errorHeader?Object.values(e.messages).forEach(e=>r.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])=>r.alertDefault("error",t,e,!0)),!1)},general(e,n){const r=t.config.globalProperties.$fhcAlert;n?.form?n.form.setFeedback(!1,e.message):n?.errorHeader?r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):r.alertError(e.message)},php(e){const n=t.config.globalProperties.$fhcAlert;var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),e.severity){case"Warning":case"Core Warning":case"Compile Warning":case"User Warning":n.alertDefault("warn","PHP "+e.severity,r,!0);break;case"Notice":case"User Notice":case"Runtime Notice":n.alertDefault("info","PHP "+e.severity,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,n.alertSystemError(r)}},exception(e){const n=t.config.globalProperties.$fhcAlert;var r="";r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),n.alertSystemError(r)},db(e){const n=t.config.globalProperties.$fhcAlert;var r="";void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),n.alertSystemError(r)},auth(e,n){const r=t.config.globalProperties.$fhcAlert;var i="";i+="Controller name: "+e.controller+"\n",i+="Method name: "+e.method+"\n",i+="Required permissions: "+e.required_permissions,n?.errorHeader?r.alertDefault("error",Array.isArray(n.errorHeader)?t.config.globalProperties.$p.t.apply(null,n.errorHeader):n.errorHeader,e.message,!0):r.alertDefault("error",e.message,i)}}};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,r,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.get(e,n,r,i)),post:(e,n,r,i)=>(console.warn("$fhcApi.factory is DEPRECATED!"),t.config.globalProperties.$fhcApi.post(e,n,r,i))},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(N);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 U=document.createElement("div"),q=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(){U.parentElement.removeChild(U)},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'});q.use(t),q.use(r);const V=q.mount(U);document.body.appendChild(U);var W={install:(t,e)=>{t.config.globalProperties.$p||t.use(nt);const n={alertSuccess(t){if(Array.isArray(t))return t.forEach(this.alertSuccess);V.$refs.toast.add({severity:"success",summary:"Info",detail:t,life:1e3})},alertInfo(t){if(Array.isArray(t))return t.forEach(this.alertInfo);V.$refs.toast.add({severity:"info",summary:"Info",detail:t,life:3e3})},alertWarning(t){if(Array.isArray(t))return t.forEach(this.alertWarning);V.$refs.toast.add({severity:"warn",summary:"Achtung",detail:t})},alertError(t){if(Array.isArray(t))return t.forEach(this.alertError);V.$refs.toast.add({severity:"error",summary:"Achtung",detail:t})},alertSystemError(e){if(Array.isArray(e))return e.forEach(this.alertSystemError);V.$refs.alert.add({severity:"error",summary:Vue.computed(()=>t.config.globalProperties.$p.t("alert/systemerror")),detail:e})},confirmDelete:()=>new Promise((e,n)=>{V.$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,r)=>{V.$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,r=!1,i=!1){let s={severity:t,summary:e,detail:n,html:i};r||(s.life=3e3),V.$refs.toast.add(s)},alertMultiple(t,e="info",n="Info",r=!1,i=!1){return!!t.every(t=>"string"==typeof t)&&(t.forEach(t=>this.alertDefault(e,n,t,r,i)),!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 r=y.getError(t.response.data);"object"!=typeof r&&(r=t.response.data),n.resetFormValidation(e);const i=Object.entries(r).filter(([t,n])=>{const r=e.querySelector('[data-fhc-form-validate="'+t+'"]');return!r||(r.dispatchEvent(new CustomEvent("fhc-form-invalidate",{detail:n})),!1)}).map(t=>t[1]),s=e.querySelector("[data-fhc-form-error]");return void(s&&i.length?s.dispatchEvent(new CustomEvent("fhc-form-error",{detail:i})):i.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)}},Z={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(W);let r={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 r(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 r=await Promise.all(Object.entries(t).sort((t,e)=>["_default"].indexOf(e[0])-["_default"].indexOf(t[0])).map(async([t,r])=>{if("_default"==t){await n.loadCategory("dashboard");t='
    '+n.t("dashboard/general")+"
    "}else t="
    "+t+"
    ";return e+=r.length,t+"
    "+r.join("
    ")+"
    "}));return{counter:e,msgs:r}}let i,s;Array.isArray(e)?({counter:i,msgs:s}=await r(e)):({counter:i,msgs:s}=await Object.entries(e).reduce(async(t,[e,n])=>{const i=await t,{counter:s,msgs:a}=await r(n);return i.counter+=s,i.msgs.push("
    "+e+"
    "+a.join("")+"
    "),i},Promise.resolve({counter:0,msgs:[]}))),await n.loadCategory("ui");const a=n.t("ui/n_errors",{n:i});t.config.globalProperties.$fhcAlert.alertDefault("error",a,"
    "+s.join("")+"
    ",!0,!0)},php(e){n(e,(e,n)=>{var r="";switch(r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\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,r,!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,r,!0);break;default:r="Type: PHP "+e.severity+"\n\n"+r,n&&(r=n+"\n\n"+r),t.config.globalProperties.$fhcAlert.alertSystemError(r)}})},exception(e){n(e,(e,n)=>{var r="";n&&(r+=n+"\n\n"),r+="Type: "+e.class+"\n\n",r+="Message: "+e.message+"\n\n",r+="Filename: "+e.filename+"\n",r+="Line Number: "+e.line+"\n",e.backtrace&&e.backtrace.length&&(r+="\nBacktrace: ",e.backtrace.forEach(t=>{r+="\n\tFile: "+t.file+"\n",r+="\tLine: "+t.line+"\n",r+="\tFunction: "+t.function+"\n"})),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},db(e){n(e,(e,n)=>{var r="";n&&(r+=n+"\n\n"),void 0!==e.heading&&(r+=e.heading+"\n\n"),void 0!==e.code&&(r+="Code: "+e.code+"\n\n"),void 0!==e.sql&&(r+="SQL: "+e.sql+"\n\n"),void 0!==e.message?r+="Message: "+e.message+"\n\n":void 0!==e.messages&&(r+="Messages: "+e.messages.join("\n\t")+"\n\n"),void 0!==e.filename&&(r+="Filename: "+e.filename+"\n"),void 0!==e.line&&(r+="Line Number: "+e.line+"\n"),t.config.globalProperties.$fhcAlert.alertSystemError(r)})},auth(e){n(e,(e,n)=>{n?n+=": "+e.message:n=e.message;var r="";r+="Controller name: "+e.controller+"\n",r+="Method name: "+e.method+"\n",r+="Required permissions: "+e.required_permissions,t.config.globalProperties.$fhcAlert.alertDefault("error",n,r,!0)})}}};function i(t,e,n,r){if("string"==typeof t&&void 0===r)[e,n,r]=[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===r&&(r=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},r?r.form=t:r={form:t}}return[e,n,r]}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{...r,success:!1,fail:!1};if(!t||!0===t)return{...r};if("success"===t)return{...r,fail:!1};if("fail"===t)return{...r,success:!1};const{success:e,fail:n,handler:i,combine:s}=t;return t={...r},Object.entries({fail:n,success:e}).forEach(([e,n])=>{void 0!==n&&(t[e]=n)}),Object.entries({handler:i,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={},r=[];if(null==e)return{};for(;e.length;)r.push(e.pop());for(var i of r){let r=i.type,a=null;for(var s in t.combine){let e=t.combine[s].includes(r),n=t.handler[s];if(e&&n&&(a=s,"form"==a))break}a&&(r=a);t.handler[r]?(n[r]||(n[r]=[]),Array.isArray(i)?n[r].push(...i):n[r].push(i)):e.push(i)}return n}void 0!==e?.errorHandling&&(r=a(e.errorHandling));const u=axios.create({timeout:5e5,baseURL:FHC_JS_DATA_STORAGE_OBJECT.app_root+FHC_JS_DATA_STORAGE_OBJECT.ci_router+"/"});u.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 r of n)t.FormData.append(e+(n.length>1?"[]":""),r);else Array.isArray(n)?n.every(t=>!(t instanceof File))?t.jsondata[e]=n:n.forEach(r=>t.FormData.append(e+(n.length>1?"[]":""),r)):t.jsondata[e]=n;return t},{FormData:new FormData,jsondata:{}});e.FormData.append("_jsondata",JSON.stringify(e.jsondata)),t.data=e.FormData}return t}),u.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),r=d(e,n);for(var i in r)e.handler[i](r[i]);return n.length?Promise.reject(t):Promise.reject({handled:!0,...t})}),t.config.globalProperties.$api={getUri:t=>u.getUri({url:t}),get:(t,e,n,r)=>([e,n,r]=i(t,e,n,r),n&&(r?r.params=n:r={params:n}),u.get(e,r)),post:(t,e,n,r)=>([e,n,r]=i(t,e,n,r),u.post(e,n,r)),call(e,n,r){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]=i(r,void 0,void 0,n||{}),s=o(e);if(!s.success&&!s.fail)return t;const a={};for(var u of t){const[t,e]="fulfilled"===u.status?[s.success,u.value]:[s.fail,u.reason];if(!t)return;const n=d(s,l(e));for(var p in n)a[p]?a[p][e.config.errorHeader]=n[p]:a[p]={[e.config.errorHeader]:n[p]}}for(var c in a)s.handler[c](a[c]);return t})}let{method:s,url:a,params:u,config:p}=e;return void 0!==n&&(p=n),s||(s="get"),s.toLowerCase&&(s=s.toLowerCase()),"get"==s?this.get(r,a,u,p):"post"==s?this.post(r,a,u,p):void console.error("FhcApi: method not allowed:",s)},getErrorHandler:t=>o(t)},t.provide("$api",t.config.globalProperties.$api)}},K={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 X=Vue.reactive({}),Q={};let Y=Vue.ref(FHC_JS_DATA_STORAGE_OBJECT.user_language),tt=Vue.computed(()=>Y.value?FHC_JS_DATA_STORAGE_OBJECT.server_languages.find(t=>t.sprache==Y.value).LC_Time:null);const et={user_language:Y,user_locale:tt,setLanguage(t){const e=Object.keys(X);return this.config.globalProperties.$api.call(K.setLanguage(e,t)).then(e=>(e.data.forEach(t=>{X[t.category][t.phrase]=t.text}),Y.value=t,e))},loadCategory(t){return Array.isArray(t)?Promise.all(t.map(this.config.globalProperties.$p.loadCategory)):(Q[t]||(Q[t]=this.config.globalProperties.$api.call(K.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=>{X[t]=e})),Q[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 r=Vue.computed(()=>X[t]?function(t,e,n){let r=X[t][e];return r?(n&&(r=r.replace(/\{([^}]*)\}/g,(t,e)=>void 0===n[e]?t:n[e])),r):"<< PHRASE "+e+">>"}(t,e,n):"");return X[t]||this.loadCategory(t),r.value}};var nt={install(t,e){t.config.globalProperties.$fhcApi||t.use(G),t.config.globalProperties.$api||t.use(Z),t.config.globalProperties.$p={t:et.t,loadCategory:e=>et.loadCategory.call(t,e),setLanguage:e=>et.setLanguage.call(t,e),user_language:Y,user_locale:tt,t_ref:et.t_ref},t.provide("$p",t.config.globalProperties.$p)}};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 i(t.getValue())}},{title:"Studiensemester",field:"studiensemester_kurzbz",headerFilter:!0,sorter:function(t,e,n,r,i,s,a){return new Date(n.getData().semester_start)-new Date(r.getData().semester_start)}},{title:"Semesterstart",field:"semester_start",headerFilter:!0,visible:!1,formatter:function(t){return i(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+": "+i(t.meldestichtag))}}},{event:"tableBuilt",handler:()=>{this.handlerStudiensemester()}}],meldestichtag:null,semList:null,currSem:null,fetchCmptApiFunction:{},fetchCmptApiFunctionParams:null,fetchCmptDataFetched:null,fetchCmptRefresh:!0}},components:{CoreNavigationCmpt:A,CoreFilterCmpt:m,BismeldestichtagAPIs:$,CoreFetchCmpt:s,datepicker:VueDatePicker},methods:{handlerStudiensemester:function(){this.startFetchCmpt($.getStudiensemester,null,this.fetchCmptDataFetchedStudiensemester)},handlerBismeldestichtage:function(){this.startFetchCmpt($.getBismeldestichtage,null,this.fetchCmptDataFetchedBismeldestichtage)},handlerAddBismeldestichtag:function(t){this.startFetchCmpt($.addBismeldestichtag,{meldestichtag:this.meldestichtag,studiensemester_kurzbz:this.currSem},this.fetchCmptDataFetchedAddBismeldestichtag)},handlerDeleteBismeldestichtag:function(t){this.startFetchCmpt($.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}}}).use(nt).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)}}},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"); //# 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 1bc2971cf..527f13d86 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.js","../../../../js/api/notiz/person.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/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],\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});\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\t/**\n\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}","import person from \"./notiz/person.js\";\n\nexport default {\n\tperson\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}","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 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\tstudium,\n language\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};","/**\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\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","notiz","getNotizen","getUid","addNewNotiz","formData","loadNotiz","notiz_id","loadDokumente","deleteNotiz","type_id","updateNotiz","isBerechtigt","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","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","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"],"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.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 diff --git a/public/dist/js/apps/Cis.js b/public/dist/js/apps/Cis.js index ed8d81cec..62679a33b 100644 --- a/public/dist/js/apps/Cis.js +++ b/public/dist/js/apps/Cis.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 r from"../../../../index.ci.php/public/js/components/primevue/confirmdialog/confirmdialog.esm.min.js";import n 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'},a={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
    '},i={name:"SearchbarResultPerson",components:{TemplateFrame:a},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'},o={name:"SearchbarResultRoom",components:{TemplateFrame:a},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'},l={name:"SearchbarResultEmployee",components:{TemplateFrame:a},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'},c={name:"SearchbarResultOrganistationunit",components:{TemplateFrame:a},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'},d={name:"SearchbarResultStudent",components:{TemplateFrame:a},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'},u={name:"SearchbarResultPrestudent",components:{TemplateFrame:a},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'},p={name:"SearchbarResultDms",components:{TemplateFrame:a},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'},h={name:"SearchbarResultCms",components:{TemplateFrame:a},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(),r=Math.min(this.query.split(" ").reduce((t,r)=>{if("or"==r)return t;let n=r.indexOf(":");if(n<0||n>0&&["content","inhalt"].includes(r.split(":")[0])){let n=e.indexOf(r);n>=0&&t.push(n)}return t},[]));if(r){if(!(r+997>=t.length))return"..."+t.substr(r,994)+"...";if(r=t.length-997,r>0)return"..."+t.substr(r,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'},f={name:"SearchbarResultMergedstudent",components:{ResultPrestudent:u,ResultStudent:d},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'},g={name:"SearchbarResultMergedperson",components:{TemplateFrame:a,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:r,name:n}=this.res.list[0];let s;if("simple"==this.mode){let t=(this.students?this.students.find(t=>t.foto):null)?.foto;t&&(t="data:image/jpeg;base64,"+t),s=t||this.employee?.photo_url}else s=((this.students?this.students.find(t=>t.photo_url):null)||this.employee)?.photo_url;return{person_id:r,name:n,photo_url:s,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,r)=>{if("prestudent"===t.type)return!0;return!r.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'},v={name:"FhcSearchbar",components:{person:i,room:o,employee:l,organisationunit:c,student:d,prestudent:u,dms:p,cms:h,mergedStudent:f,mergedPerson:g},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