diff --git a/application/config/routes.php b/application/config/routes.php index 7a42e6c69..79e15edd9 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -129,13 +129,19 @@ $route['api/frontend/v1/treemenudata/stv/.*'] = 'api/frontend/v1/stv/students/in $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/semester/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/semester/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; -$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; -$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStg/$1/$2/$3'; + +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/semester/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3/$4'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/semester/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3/$4'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/stg/(:any)/orgform/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByStgOrgform/$1/$2/$3'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/emp/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByEmp/$1/$2'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/emp/(:any)/stg/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByEmp/$1/$2/$3'; $route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/emp/(:any)/stg/(:any)/.*'] = 'api/frontend/v1/Lehrveranstaltung/getByEmp/$1/$2/$3'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/le/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByLe/$1/$2'; +$route['api/frontend/v1/treemenudata/lvverwaltung/stdsem/(:any)/lv/(:any)'] = 'api/frontend/v1/Lehrveranstaltung/getByLv/$1/$2'; + // load routes from extensions, also look for environment-specific configs $subdirs = ['application/config/extensions', 'application/config/' . ENVIRONMENT . '/extensions']; diff --git a/application/config/treemenu/custom/lvvw.php b/application/config/treemenu/custom/lvvw.php index 977c0459e..09a10ed2b 100644 --- a/application/config/treemenu/custom/lvvw.php +++ b/application/config/treemenu/custom/lvvw.php @@ -26,7 +26,8 @@ $config['root'] = [ 'verband' => [ 'group' ] - ], - 'orgform' + ] ] ]; + +$config['root']['stg']['orgform'] = $config['root']['stg']; diff --git a/application/controllers/api/frontend/v1/Lehrveranstaltung.php b/application/controllers/api/frontend/v1/Lehrveranstaltung.php index 78e0acce3..e67a8a53f 100644 --- a/application/controllers/api/frontend/v1/Lehrveranstaltung.php +++ b/application/controllers/api/frontend/v1/Lehrveranstaltung.php @@ -28,7 +28,10 @@ class Lehrveranstaltung extends FHCAPI_Controller { parent::__construct([ 'getByEmp' => ['admin:r', 'assistenz:r'], + 'getByLe' => ['admin:r', 'assistenz:r'], + 'getByLv' => ['admin:r', 'assistenz:r'], 'getByStg' => ['admin:r', 'assistenz:r'], + 'getByStgOrgform' => ['admin:r', 'assistenz:r'], 'loadByLV' => ['admin:r', 'assistenz:r'], ]); @@ -77,41 +80,117 @@ class Lehrveranstaltung extends FHCAPI_Controller $this->terminateWithSuccess($tree); } + + public function getByLe($studiensemester_kurzbz = null, $lehreinheit_id = null) + { + if (is_null($lehreinheit_id)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + + $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); + + + $lehreinheiten = $this->_ci->LehreinheitModel->getByLeStudiensemester($lehreinheit_id, $studiensemester_kurzbz); + $lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten); + + $this->terminateWithSuccess($lehreinheiten_data); + } + + public function getByLv($studiensemester_kurzbz = null, $lehrveranstaltung_id = null) + { + if (is_null($lehrveranstaltung_id)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + + $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); + + $tree = []; + + $this->_ci->LehrveranstaltungModel->addSelect('studiengang_kz'); + $lv = $this->_ci->LehrveranstaltungModel->load($lehrveranstaltung_id); + $lv = $this->getDataOrTerminateWithError($lv); + + if (empty($lv)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); + + $lehrveranstaltungen_data = array(); + foreach ($this->_loadLvRows(current($lv)->studiengang_kz, $studiensemester_kurzbz) as $row) + { + if ((string)$row->lehrveranstaltung_id === (string)$lehrveranstaltung_id) + { + $lehrveranstaltungen_data[] = $row; + break; + } + } + + if (empty($lehrveranstaltungen_data)) + { + + $this->_ci->LehrveranstaltungModel->addSelect(' + tbl_lehrveranstaltung.*, + tbl_lehrveranstaltung.kurzbz as lv_kurzbz, + lehrveranstaltung_id, + lehrtyp_kurzbz, + studiengang_kz as lv_studiengang_kz, + UPPER(CONCAT(tbl_studiengang.typ, tbl_studiengang.kurzbz)) as studiengang, + semester as semester, + tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, + ects as lv_ects, + lehreverzeichnis as lv_lehreverzeichnis, + planfaktor as lv_planfaktor, + planlektoren as lv_planlektoren, + planpersonalkosten as lv_planpersonalkosten, + plankostenprolektor as lv_plankostenprolektor, + tbl_lehrveranstaltung.orgform_kurzbz as orgform_kurzbz, + tbl_lehrveranstaltung.sprache as sprache, + lehrform_kurzbz as lv_lehrform_kurzbz, + tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english, + semesterstunden as lv_semesterstunden, + '); + $this->_ci->LehrveranstaltungModel->addJoin('public.tbl_studiengang', 'studiengang_kz'); + $lehrveranstaltungen = $this->_ci->LehrveranstaltungModel->load($lehrveranstaltung_id); + $lehrveranstaltungen_data = $this->getDataOrTerminateWithError($lehrveranstaltungen); + } + + foreach ($lehrveranstaltungen_data as $lehrveranstaltung) + { + $lehreinheiten = $this->_ci->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz); + $lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten); + + if (!isset($lehrveranstaltung->_children)) + { + $lehrveranstaltung->_children = $lehreinheiten_data; + } + $tree[] = $lehrveranstaltung; + } + + $counter = 0; + $this->assignUniqueIndex($tree, $counter); + $this->terminateWithSuccess($tree); + } + public function getByStg($studiensemester_kurzbz = null, $stg_kz = null, $semester = null) + { + $this->_getLvTree($studiensemester_kurzbz, $stg_kz, $semester, null); + } + + public function getByStgOrgform($studiensemester_kurzbz = null, $stg_kz = null, $orgform = null, $semester = null) + { + $orgform_kurzbz = $this->getOrgformKurzbz($orgform); + $this->_getLvTree($studiensemester_kurzbz, $stg_kz, $semester, $orgform_kurzbz); + } + + private function _getLvTree($studiensemester_kurzbz, $stg_kz, $semester, $orgform_kurzbz) { $studiengang_kz = $this->getStudiengangKz($stg_kz); if (is_null($studiengang_kz) || !preg_match("/^(-?[1-9][0-9]*|0)$/", (string)$studiengang_kz)) $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); - $verband = null; - if (!is_null($semester) && !is_numeric($semester)) - { - $verband = $this->getOrgformKurzbz($semester); - $semester = null; - } - - $this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel'); + if (!is_null($semester) && !ctype_digit((string)$semester)) + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz); - $studienplan_data = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $studiensemester_kurzbz, $semester, $verband); - $studienplan_ids = array(); - $only_ids = array(); - $placeholders = array(); - - if (hasData($studienplan_data)) - { - foreach (getData($studienplan_data) as $studienplan) { - $placeholders[] = "(?, ?)"; - $studienplan_ids[] = $studienplan->studienplan_id; - $studienplan_ids[] = $studienplan->semester; - $only_ids[] = $studienplan->studienplan_id; - } - } - - $lehrveranstaltungen_data = $this->_ci->LehrveranstaltungModel->getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester, $verband); - $lehrveranstaltungen_data = hasData($lehrveranstaltungen_data) ? getData($lehrveranstaltungen_data) : array(); + $lehrveranstaltungen_data = $this->_loadLvRows($studiengang_kz, $studiensemester_kurzbz, $semester, $orgform_kurzbz); $tree = []; foreach ($lehrveranstaltungen_data as $row) @@ -244,6 +323,31 @@ class Lehrveranstaltung extends FHCAPI_Controller $this->LehreinheitModel->getLvsByFachbereich($fachbereich, $studiensemester_kurzbz, $mitarbeiter_uid); }*/ + + private function _loadLvRows($studiengang_kz, $studiensemester_kurzbz, $semester = null, $orgform_kurzbz = null) + { + $this->_ci->load->model('organisation/Studienplan_model', 'StudienplanModel'); + + $studienplan_data = $this->_ci->StudienplanModel->getStudienplaeneBySemester($studiengang_kz, $studiensemester_kurzbz, $semester, $orgform_kurzbz); + + $studienplan_ids = array(); + $only_ids = array(); + $placeholders = array(); + + if (hasData($studienplan_data)) + { + foreach (getData($studienplan_data) as $studienplan) { + $placeholders[] = "(?, ?)"; + $studienplan_ids[] = $studienplan->studienplan_id; + $studienplan_ids[] = $studienplan->semester; + $only_ids[] = $studienplan->studienplan_id; + } + } + + $lehrveranstaltungen_data = $this->_ci->LehrveranstaltungModel->getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester, $orgform_kurzbz); + return hasData($lehrveranstaltungen_data) ? getData($lehrveranstaltungen_data) : array(); + } + private function _setAuthUID() { $this->_uid = getAuthUID(); @@ -309,8 +413,8 @@ class Lehrveranstaltung extends FHCAPI_Controller $data = $this->getDataOrTerminateWithError($result); if (!$data) - return $orgform_kurzbz; + $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL); return current($data)->orgform_kurzbz; } -} +} \ No newline at end of file diff --git a/application/controllers/api/frontend/v1/organisation/Studiensemester.php b/application/controllers/api/frontend/v1/organisation/Studiensemester.php index eaafc6ac5..c082d8b97 100644 --- a/application/controllers/api/frontend/v1/organisation/Studiensemester.php +++ b/application/controllers/api/frontend/v1/organisation/Studiensemester.php @@ -28,7 +28,8 @@ class Studiensemester extends FHCAPI_Controller 'getStudienjahrByStudiensemester' => self::PERM_LOGGED, 'getAllStudiensemesterAndAktOrNext' => self::PERM_LOGGED, 'current' => self::PERM_LOGGED, - 'set' => self::PERM_LOGGED + 'set' => self::PERM_LOGGED, + 'getContainingOrNearestByDateRange' => self::PERM_LOGGED, ) ); // Load model StudiensemesterModel @@ -203,4 +204,15 @@ class Studiensemester extends FHCAPI_Controller $this->terminateWithSuccess(true); } + + public function getContainingOrNearestByDateRange() + { + $from = $this->input->get("from"); + $to = $this->input->get("to"); + + $result = $this->StudiensemesterModel->getContainingOrNearestByDateRange($from, $to); + $data = $this->getDataOrTerminateWithError($result); + + $this->terminateWithSuccess($data); + } } diff --git a/application/libraries/SearchBarLib.php b/application/libraries/SearchBarLib.php index f19365c02..c228d318f 100644 --- a/application/libraries/SearchBarLib.php +++ b/application/libraries/SearchBarLib.php @@ -33,7 +33,7 @@ class SearchBarLib const ERROR_NOT_AUTH = 'ERR005'; // List of allowed types of search - const ALLOWED_TYPES = ['mitarbeiter', 'mitarbeiter_ohne_zuordnung', 'organisationunit', 'raum', 'person', 'student','studentStv', 'prestudent', 'document', 'cms']; + const ALLOWED_TYPES = ['mitarbeiter', 'mitarbeiter_ohne_zuordnung', 'organisationunit', 'raum', 'person', 'student','studentStv', 'prestudent', 'document', 'cms', 'lehreinheit', 'lehrveranstaltung']; const PHOTO_IMG_URL = '/cis/public/bild.php?src=person&person_id='; @@ -180,10 +180,14 @@ class SearchBarLib protected function buildSearchClause(DB_Model $dbModel, array $columns, $searchstr) { $searchstr = preg_replace('/[[:punct:]]/', ' ', $searchstr); + $words = preg_split('/\s+/', trim($searchstr), -1, PREG_SPLIT_NO_EMPTY); + + if (empty($words)) return array(); + $document = implode(' || \' \' || ', $columns); - $query = '\'' . implode(':* & ', explode(' ', trim($searchstr))) . ':*\''; - $reversequery = '\'*:' . implode(' & *:', explode(' ', trim($searchstr))) . '\''; - $nospacequery = '\'' . implode('', explode(' ', trim($searchstr))) . ':*\''; + $query = '\'' . implode(':* & ', $words) . ':*\''; + $reversequery = '\'*:' . implode(' & *:', $words) . '\''; + $nospacequery = '\'' . implode('', $words) . ':*\''; $searchclause = <<execReadOnlyQuery(' + SELECT + \'teachingunit\' AS renderer, + \''.$type.'\' AS type, + le.lehreinheit_id AS id, + le.studiensemester_kurzbz, + lv.bezeichnung, + \'lv_table_icon icon-\' AS foto, + UPPER(stg.typ || stg.kurzbz) AS studiengang, + le.lehrform_kurzbz, + lv.semester + FROM lehre.tbl_lehreinheit le + JOIN lehre.tbl_lehrveranstaltung lv ON (lv.lehrveranstaltung_id = le.lehrveranstaltung_id) + JOIN public.tbl_studiengang stg ON (stg.studiengang_kz = lv.studiengang_kz) + JOIN public.tbl_studiensemester sem ON (sem.studiensemester_kurzbz = le.studiensemester_kurzbz) + WHERE (' . + $this->buildSearchClause( + $dbModel, + array( + '(stg.typ || stg.kurzbz)', + 'lv.semester', + 'lv.bezeichnung' + ), + $searchstr + ) . ')' . $idwhere . ' + '); + + // If something has been found then return it + if (hasData($lehreinheit)) return getData($lehreinheit); + + // Otherwise return an empty array + return array(); + } + + private function _lehrveranstaltung($searchstr, $type) + { + $dbModel = new DB_Model(); + + $idwhere = ''; + + if (ctype_digit(trim($searchstr))) + { + $id = (int)trim($searchstr); + $idwhere = ' OR tbl_lehrveranstaltung.lehrveranstaltung_id = ' . $id; + } + + $lehreinheit = $dbModel->execReadOnlyQuery(' + + SELECT + \'teachingunit\' AS renderer, + \''.$type.'\' AS type, + lehrveranstaltung_id as id, + tbl_lehrveranstaltung.bezeichnung, + \'lv_table_icon icon-lv\' as foto, + UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as studiengang, + semester, + lehrform_kurzbz, + tbl_organisationseinheit.bezeichnung as oe_bezeichnung + FROM lehre.tbl_lehrveranstaltung + JOIN public.tbl_studiengang USING(studiengang_kz) + JOIN public.tbl_organisationseinheit ON tbl_lehrveranstaltung.oe_kurzbz = tbl_organisationseinheit.oe_kurzbz + WHERE (' . + $this->buildSearchClause( + $dbModel, + array( + '(tbl_studiengang.typ || tbl_studiengang.kurzbz)', + 'semester', + 'tbl_lehrveranstaltung.bezeichnung' + ), + $searchstr + ) . ')' . $idwhere . ' + '); + + // If something has been found then return it + if (hasData($lehreinheit)) return getData($lehreinheit); + + // Otherwise return an empty array + return array(); + } + } diff --git a/application/libraries/treemenu/LvVwLib.php b/application/libraries/treemenu/LvVwLib.php index d3c91a196..171a8c191 100644 --- a/application/libraries/treemenu/LvVwLib.php +++ b/application/libraries/treemenu/LvVwLib.php @@ -159,8 +159,6 @@ class LvVwLib if (!$stg->mischform) return []; - $this->_ci->StudiengangModel->db->select('TRUE AS leaf', false); - return $this->_ci->stglib->orgform($path_template, $stg->studiengang_kz); } diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index bbca9836b..8cc701da2 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -340,6 +340,20 @@ EOSQL; } + public function getByLeStudiensemester($lehreinheit_id, $studiensemester_kurzbz) + { + $qry = "WITH lehreinheiten AS ( + SELECT * + FROM lehre.tbl_lehreinheit + WHERE lehreinheit_id = ? + AND studiensemester_kurzbz = ? + )," . $this->_getLeCTE(); + + $params = array($lehreinheit_id, $studiensemester_kurzbz); + + return $this->execReadOnlyQuery($qry, $params); + + } public function getByLvidStudiensemester($lv_id, $studiensemester_kurzbz, $mitarbeiter_uid = null, $fachbereich_kurzbz = null) { $qry = "WITH lehreinheiten AS ( @@ -347,35 +361,7 @@ EOSQL; FROM lehre.tbl_lehreinheit WHERE lehrveranstaltung_id = ? AND studiensemester_kurzbz = ? - ), - ". $this->_getGruppenCTE() . ", - ". $this->_getLektorenCTE() . ", - ". $this->_getFachbereichCTE() . ", - ". $this->_getTagsCTE() . " - - SELECT lehreinheiten.*, - lehreinheiten.lehrform_kurzbz as lv_lehrform_kurzbz, - tbl_lehrveranstaltung.kurzbz as lv_kurzbz, - tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, - COALESCE(tag_data_agg.tags, '[]'::json) AS tags, - gruppen.gruppen, - mitarbeiter.lektoren, - mitarbeiter.le_planstunden, - mitarbeiter.vorname, - mitarbeiter.nachname, - mitarbeiter.semesterstunden, - fachbereich.bezeichnung as fachbereich, - UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang, - semester - FROM lehreinheiten - LEFT JOIN lehre.tbl_lehrveranstaltung ON tbl_lehrveranstaltung.lehrveranstaltung_id = lehreinheiten.lehrfach_id - LEFT JOIN public.tbl_studiengang USING(studiengang_kz) - LEFT JOIN tag_data_agg ON tag_data_agg.lehreinheit_id = lehreinheiten.lehreinheit_id - LEFT JOIN mitarbeiter ON lehreinheiten.lehreinheit_id = mitarbeiter.lehreinheit_id - LEFT JOIN fachbereich ON lehreinheiten.lehreinheit_id = fachbereich.lehreinheit_id - LEFT JOIN gruppen ON lehreinheiten.lehreinheit_id = gruppen.lehreinheit_id - WHERE true - "; + )," . $this->_getLeCTE(); $params = array($lv_id, $studiensemester_kurzbz); @@ -469,9 +455,9 @@ EOSQL; return $db->execReadOnlyQuery($qry, array_merge($lehreinheit_ids, $lehreinheit_ids)); } - private function getLVTmp($stg_kz = null) + private function getLVTmp() { - $qry = "SELECT DISTINCT ON(lehrveranstaltung_id) *, + return "SELECT DISTINCT ON(lehrveranstaltung_id) *, '' as stundenblockung, '' as lehreinheit_id, '' as wochenrythmus, @@ -482,24 +468,33 @@ EOSQL; '' as studienplan_beeichnung, UPPER(CONCAT(vw_lehreinheit.stg_typ, vw_lehreinheit.stg_kurzbz)) as studiengang FROM campus.vw_lehreinheit - WHERE mitarbeiter_uid = ? - AND studiensemester_kurzbz = ?"; - - if (!is_null($stg_kz)) { - $qry .= " AND lv_studiengang_kz = ?"; - } - - return $qry; + WHERE studiensemester_kurzbz = ? "; } - public function getLvsByEmployee($mitarbeiter_uid, $studiensemester_kurzbz, $stg_kz = null) + public function getLvsById($lehrveranstaltung_id, $studiensemester_kurzbz) { - $qry = "WITH lvs AS (" . $this->getLVTmp($stg_kz) . ") + $where = ' AND lehrveranstaltung_id = ?'; + $qry = "WITH lvs AS (" . $this->getLVTmp() . $where .") SELECT lvs.* FROM lvs - "; + "; + + $params = array($studiensemester_kurzbz, $lehrveranstaltung_id); + return $this->execReadOnlyQuery($qry, $params); + } + public function getLvsByEmployee($mitarbeiter_uid, $studiensemester_kurzbz, $stg_kz = null) + { + $where = ' AND mitarbeiter_uid = ?'; + + if ($stg_kz != null) + $where .= " AND lv_studiengang_kz = ?"; + + $qry = "WITH lvs AS (" . $this->getLVTmp() . $where .") + SELECT lvs.* + FROM lvs"; + + $params = array($studiensemester_kurzbz, $mitarbeiter_uid); - $params = array($mitarbeiter_uid, $studiensemester_kurzbz); if (!is_null($stg_kz)) { $params[] = $stg_kz; @@ -706,6 +701,36 @@ EOSQL; return success('Contract successfully updated.'); } + private function _getLeCTE() + { + return $this->_getGruppenCTE() . ", + ". $this->_getLektorenCTE() . ", + ". $this->_getFachbereichCTE() . ", + ". $this->_getTagsCTE() . " + + SELECT lehreinheiten.*, + lehreinheiten.lehrform_kurzbz as lv_lehrform_kurzbz, + tbl_lehrveranstaltung.kurzbz as lv_kurzbz, + tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, + COALESCE(tag_data_agg.tags, '[]'::json) AS tags, + gruppen.gruppen, + mitarbeiter.lektoren, + mitarbeiter.le_planstunden, + mitarbeiter.vorname, + mitarbeiter.nachname, + mitarbeiter.semesterstunden, + fachbereich.bezeichnung as fachbereich, + UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang, + semester + FROM lehreinheiten + LEFT JOIN lehre.tbl_lehrveranstaltung ON tbl_lehrveranstaltung.lehrveranstaltung_id = lehreinheiten.lehrfach_id + LEFT JOIN public.tbl_studiengang USING(studiengang_kz) + LEFT JOIN tag_data_agg ON tag_data_agg.lehreinheit_id = lehreinheiten.lehreinheit_id + LEFT JOIN mitarbeiter ON lehreinheiten.lehreinheit_id = mitarbeiter.lehreinheit_id + LEFT JOIN fachbereich ON lehreinheiten.lehreinheit_id = fachbereich.lehreinheit_id + LEFT JOIN gruppen ON lehreinheiten.lehreinheit_id = gruppen.lehreinheit_id + WHERE true"; + } private function _getGruppenCTE() { return "gruppen AS ( diff --git a/application/models/organisation/Studiensemester_model.php b/application/models/organisation/Studiensemester_model.php index 064b9091d..e53850560 100644 --- a/application/models/organisation/Studiensemester_model.php +++ b/application/models/organisation/Studiensemester_model.php @@ -292,13 +292,29 @@ class Studiensemester_model extends DB_Model COALESCE( (SELECT studiensemester_kurzbz FROM semester_interval_startdate), (SELECT studiensemester_kurzbz FROM nearest_semester_interval_startdate) - ) AS studiensemester_kurzbz + ) AS studiensemester_kurzbz, + COALESCE( + (SELECT start FROM semester_interval_startdate), + (SELECT start FROM nearest_semester_interval_startdate) + ) as start, + COALESCE( + (SELECT ende FROM semester_interval_startdate), + (SELECT ende FROM nearest_semester_interval_startdate) + ) as ende UNION SELECT COALESCE( (SELECT studiensemester_kurzbz FROM semester_interval_enddate), (SELECT studiensemester_kurzbz FROM nearest_semester_interval_enddate) - ) AS studiensemester_kurzbz + ) AS studiensemester_kurzbz, + COALESCE( + (SELECT start FROM semester_interval_enddate), + (SELECT start FROM nearest_semester_interval_enddate) + ) as start, + COALESCE( + (SELECT ende FROM semester_interval_enddate), + (SELECT ende FROM nearest_semester_interval_enddate) + ) as ende EOSQL; diff --git a/application/views/templates/CISVUE-Header.php b/application/views/templates/CISVUE-Header.php index d98cbc9cd..f28012dd5 100644 --- a/application/views/templates/CISVUE-Header.php +++ b/application/views/templates/CISVUE-Header.php @@ -21,6 +21,7 @@ $this->load->view('templates/FHC-Header', $includesArray); ?> diff --git a/include/entwicklungsteam.class.php b/include/entwicklungsteam.class.php index b88c3971e..ec68f6918 100644 --- a/include/entwicklungsteam.class.php +++ b/include/entwicklungsteam.class.php @@ -21,6 +21,7 @@ * Manuela Thamer */ require_once(dirname(__FILE__).'/basis_db.class.php'); +require_once(dirname(__FILE__).'/mitarbeiter.class.php'); class entwicklungsteam extends basis_db { @@ -43,7 +44,6 @@ class entwicklungsteam extends basis_db public $ext_id; public $besqual; - public $studiengang_kz_old; /** * Konstruktor @@ -74,7 +74,7 @@ class entwicklungsteam extends basis_db $qry = "SELECT * FROM bis.tbl_entwicklungsteam JOIN bis.tbl_besqual USING(besqualcode) WHERE entwicklungsteam_id=".$this->db_add_param($entwicklungsteam_id); - $qry.=";"; + $qry.=";"; if($this->db_query($qry)) { @@ -147,6 +147,11 @@ class entwicklungsteam extends basis_db $this->errormsg = 'Es muss ein Mitarbeiter angegeben werden'; return false; } + if(!$this->checkIfExistingUid($this->mitarbeiter_uid)) + { + $this->errormsg = 'Bitte einen Eintrag aus dem Dropdown Personensuche auswählen!'; + return false; + } if($this->studiengang_kz=='') { $this->errormsg = 'Es muss ein Studiengang angegeben werden'; @@ -162,6 +167,26 @@ class entwicklungsteam extends basis_db $this->errormsg = 'Endedatum darf nicht vor Anfangsdatum liegen'; return false; } + + if($this->beginn != '') + { + $beginnParts = explode('-', $this->beginn); + if (!checkdate((int)$beginnParts[1], (int)$beginnParts[2], (int)$beginnParts[0])) { + $this->errormsg = 'Anfangsdatum ist ungültig'; + return false; + } + } + + if($this->ende != '') + { + $endeParts = explode('-', $this->ende); + if (!checkdate((int)$endeParts[1], (int)$endeParts[2], (int)$endeParts[0])) + { + $this->errormsg = 'Endedatum ist ungültig'; + return false; + } + } + return true; } @@ -183,30 +208,28 @@ class entwicklungsteam extends basis_db //Neuen Datensatz anlegen $qry = "INSERT INTO bis.tbl_entwicklungsteam (mitarbeiter_uid, studiengang_kz, besqualcode, beginn, ende, updateamum, updatevon, insertamum, insertvon) VALUES (". - $this->db_add_param($this->mitarbeiter_uid).', '. - $this->db_add_param($this->studiengang_kz, FHC_INTEGER).', '. - $this->db_add_param($this->besqualcode, FHC_INTEGER).', '. - $this->db_add_param($this->beginn).', '. - $this->db_add_param($this->ende).', '. - $this->db_add_param($this->updateamum).', '. - $this->db_add_param($this->updatevon).', '. - $this->db_add_param($this->insertamum).', '. - $this->db_add_param($this->insertvon).');'; + $this->db_add_param($this->mitarbeiter_uid).', '. + $this->db_add_param($this->studiengang_kz, FHC_INTEGER).', '. + $this->db_add_param($this->besqualcode, FHC_INTEGER).', '. + $this->db_add_param($this->beginn).', '. + $this->db_add_param($this->ende).', '. + $this->db_add_param($this->updateamum).', '. + $this->db_add_param($this->updatevon).', '. + $this->db_add_param($this->insertamum).', '. + $this->db_add_param($this->insertvon).');'; } else { - if($this->studiengang_kz_old=='') - $this->studiengang_kz_old = $this->studiengang_kz; - //Bestehenden Datensatz aktualisieren $qry= "UPDATE bis.tbl_entwicklungsteam SET". - " besqualcode=".$this->db_add_param($this->besqualcode, FHC_INTEGER).",". - " beginn=".$this->db_add_param($this->beginn).",". - " studiengang_kz=".$this->db_add_param($this->studiengang_kz, FHC_INTEGER).",". - " ende=".$this->db_add_param($this->ende).",". - " updateamum=".$this->db_add_param($this->updateamum).",". - " updatevon=".$this->db_add_param($this->updatevon). - " WHERE entwicklungsteam_id=".$this->db_add_param($this->entwicklungsteam_id).";"; + " besqualcode=".$this->db_add_param($this->besqualcode, FHC_INTEGER).",". + " beginn=".$this->db_add_param($this->beginn).",". + " studiengang_kz=".$this->db_add_param($this->studiengang_kz, FHC_INTEGER).",". + " ende=".$this->db_add_param($this->ende).",". + " mitarbeiter_uid=".$this->db_add_param($this->mitarbeiter_uid).",". + " updateamum=".$this->db_add_param($this->updateamum).",". + " updatevon=".$this->db_add_param($this->updatevon). + " WHERE entwicklungsteam_id=".$this->db_add_param($this->entwicklungsteam_id).";"; } if($this->db_query($qry)) @@ -234,7 +257,7 @@ class entwicklungsteam extends basis_db if($studiengang_kz!=null) $qry.=" AND studiengang_kz=".$this->db_add_param($studiengang_kz); - $qry.=";"; + $qry.=";"; if($this->db_query($qry)) { @@ -316,7 +339,7 @@ class entwicklungsteam extends basis_db if ($sort != null) { - $qry .= " ORDER BY ".$sort; + $qry .= " ORDER BY ".$sort; } $qry .= ";"; @@ -364,7 +387,7 @@ class entwicklungsteam extends basis_db $bismeldung_jahr = $datetime->format('Y'); //laden des Datensatzes - $qry = "SELECT tbl_entwicklungsteam.*, tbl_besqual.*, tbl_studiengang.studiengang_kz, tbl_studiengang.melderelevant + $qry = "SELECT tbl_entwicklungsteam.*, tbl_besqual.*, tbl_studiengang.studiengang_kz, tbl_studiengang.melderelevant FROM bis.tbl_entwicklungsteam JOIN bis.tbl_besqual USING(besqualcode) JOIN public.tbl_studiengang USING(studiengang_kz) @@ -375,7 +398,7 @@ class entwicklungsteam extends basis_db if($studiengang_kz!=null) $qry.=" AND studiengang_kz=".$this->db_add_param($studiengang_kz); - $qry.=";"; + $qry.=";"; if($this->db_query($qry)) { @@ -407,5 +430,20 @@ class entwicklungsteam extends basis_db return false; } } + + /* + * Überprüft, ob die übergebene Uid in der Tabelle tbl_mitarbeiter vorhanden ist + * @param String $uid UID des Mitarbeiters + * @return true wenn vorhanden, false wenn nicht + */ + private function checkIfExistingUid($uid) + { + $mitarbeiter = new mitarbeiter(); + + if(!$mitarbeiter->checkIfExistingUid($uid)) + return false; + + return true; + } } ?> diff --git a/include/mitarbeiter.class.php b/include/mitarbeiter.class.php index 1517122c2..7138b8578 100644 --- a/include/mitarbeiter.class.php +++ b/include/mitarbeiter.class.php @@ -1995,5 +1995,23 @@ class mitarbeiter extends benutzer return true; } } + + /** + * Prueft ob eine existierende ma_uid übergeben wurde + * @param String $mitarbeiter_uid mitarbeiter_uid + * @return bool True wenn mitarbeiter_uid vorhanden sonst false. + */ + public function checkIfExistingUid($mitarbeiter_uid) + { + $qry = "Select 1 from public.tbl_mitarbeiter where mitarbeiter_uid =".$this->db_add_param($mitarbeiter_uid); + + if ($result = $this->db_query($qry)) + { + if ($this->db_num_rows($result) > 0) + return true; + else + return false; + } + } } ?> diff --git a/public/css/Cis4/Cis.css b/public/css/Cis4/Cis.css index b1424e4d3..2e6dc1141 100644 --- a/public/css/Cis4/Cis.css +++ b/public/css/Cis4/Cis.css @@ -454,8 +454,8 @@ html { /* desktop */ @media (min-width: 992px) { - body { - display: flex; + body.cis4 { + display: flex; padding-top: var(--fhc-cis-header-height); width: calc(100svw - var(--scrollbar-width, 0px)); /* overflow: visible !important; */ diff --git a/public/js/api/factory/studiensemester.js b/public/js/api/factory/studiensemester.js index f57c10763..12a5106a2 100644 --- a/public/js/api/factory/studiensemester.js +++ b/public/js/api/factory/studiensemester.js @@ -44,5 +44,15 @@ export default { studiensemester_kurzbz } }; - } + }, + getContainingOrNearestByDateRange(from, to) { + return { + method: 'get', + url: 'api/frontend/v1/organisation/studiensemester/getContainingOrNearestByDateRange', + params: { + from, + to, + } + }; + }, }; \ No newline at end of file diff --git a/public/js/apps/LVVerwaltung.js b/public/js/apps/LVVerwaltung.js index b9ab52ef6..39c9a94ad 100644 --- a/public/js/apps/LVVerwaltung.js +++ b/public/js/apps/LVVerwaltung.js @@ -17,6 +17,8 @@ const router = VueRouter.createRouter({ component: LVVerwaltung, children: [ { name: 'emp', path: 'emp/:emp/:treemenu(.*)*', component: LVVerwaltung }, + { name: 'le', path: 'le/:le', component: LVVerwaltung }, + { name: 'lv', path: 'lv/:lv', component: LVVerwaltung }, { name: 'treemenu', path: ':treemenu(.*)*', component: LVVerwaltung } ] }, diff --git a/public/js/components/Cis/LvPlan/MyLvPlan.js b/public/js/components/Cis/LvPlan/MyLvPlan.js index cb43a06d9..f146df93b 100644 --- a/public/js/components/Cis/LvPlan/MyLvPlan.js +++ b/public/js/components/Cis/LvPlan/MyLvPlan.js @@ -1,6 +1,7 @@ import FhcCalendar from "../../Calendar/LvPlan.js"; import ApiLvPlan from '../../../api/factory/lvPlan.js'; +import ApiStudienSemester from '../../../api/factory/studiensemester.js'; import ApiAuthinfo from '../../../api/factory/authinfo.js'; export const DEFAULT_MODE_LVPLAN_DESKTOP = "Week"; @@ -16,13 +17,12 @@ export default { }, data() { return { - studiensemester_kurzbz: null, - studiensemester_start: null, - studiensemester_ende: null, uid: null, isMitarbeiter: false, isStudent: false, timezone: FHC_JS_DATA_STORAGE_OBJECT.timezone, + startSemester: null, + endSemester: null, }; }, inject: ["isMobile"], @@ -48,9 +48,12 @@ export default { return this.propsViewData?.mode; }, downloadLinks() { - if (!this.studiensemester_start || !this.studiensemester_ende || !this.uid) - return false; + const startDate = this.startSemester?.start; + const endDate = this.endSemester ? this.endSemester.ende : this.startSemester?.ende; + if (!startDate || !endDate || !this.uid) + return false; + let type = false; type = this.isStudent ? 'student' : type; type = this.isMitarbeiter ? 'lektor' : type; @@ -61,10 +64,10 @@ export default { const opts = { zone: this.timezone }; const start = luxon.DateTime - .fromISO(this.studiensemester_start, opts) + .fromISO(startDate, opts) .toUnixInteger(); const ende = luxon.DateTime - .fromISO(this.studiensemester_ende, opts) + .fromISO(endDate, opts) .toUnixInteger(); const download_link = FHC_JS_DATA_STORAGE_OBJECT.app_root @@ -109,16 +112,21 @@ export default { } }); }, - updateRange(rangeInterval) { - this.$api - .call(ApiLvPlan.studiensemesterDateInterval( - rangeInterval.end.startOf('week').toISODate() - )) - .then(res => { - this.studiensemester_kurzbz = res.data.studiensemester_kurzbz; - this.studiensemester_start = res.data.start; - this.studiensemester_ende = res.data.ende; - }); + async updateRange(rangeInterval) { + const semesterResponse = await this.$api.call( + ApiStudienSemester.getContainingOrNearestByDateRange( + rangeInterval.s.toISO().slice(0, 10), + rangeInterval.e.toISO().slice(0, 10), + ), + ); + this.startSemester = + semesterResponse.data.length + ? semesterResponse.data[0] + : null; + this.endSemester = + semesterResponse.data.length > 1 + ? semesterResponse.data[1] + : null; }, getPromiseFunc(start, end) { return [ @@ -142,8 +150,11 @@ export default {

{{ $p.t('lehre/stundenplan') }} - - {{ studiensemester_kurzbz }} + + {{ startSemester.studiensemester_kurzbz }} + + {{ "- " + endSemester.studiensemester_kurzbz }} +


diff --git a/public/js/components/Cis/LvPlan/OtherLvPlan.js b/public/js/components/Cis/LvPlan/OtherLvPlan.js index 6c70e1c93..48bc03760 100644 --- a/public/js/components/Cis/LvPlan/OtherLvPlan.js +++ b/public/js/components/Cis/LvPlan/OtherLvPlan.js @@ -5,6 +5,7 @@ import FhcCalendar from "../../Calendar/LvPlan.js"; import ApiLvPlan from "../.././../api/factory/lvPlan.js"; import ApiOtherLvPlan from "../.././../api/factory/otherLvPlan.js"; import ApiAuthinfo from "../../../api/factory/authinfo.js"; +import ApiStudienSemester from '../../../api/factory/studiensemester.js'; export const DEFAULT_MODE_LVPLAN_DESKTOP = "Week"; export const DEFAULT_MODE_LVPLAN_MOBILE = "List"; @@ -22,9 +23,6 @@ export default { data() { return { localProps: {}, - studiensemester_kurzbz: null, - studiensemester_start: null, - studiensemester_ende: null, isOtherPersonMitarbeiter: false, isOtherPersonStudent: false, currentStgBezeichnung: null, @@ -36,6 +34,8 @@ export default { photo: "", }, timezone: FHC_JS_DATA_STORAGE_OBJECT.timezone, + startSemester: null, + endSemester: null, }; }, inject: ["isMobile"], @@ -67,11 +67,10 @@ export default { // do not show download links in otherLvPlan Mode return false; - if ( - !this.studiensemester_start || - !this.studiensemester_ende || - !this.propsViewData.otherUid - ) + const startDate = this.startSemester?.start; + const endDate = this.endSemester ? this.endSemester.ende : this.startSemester?.ende; + + if (!startDate || !endDate || !this.uid) return false; const type = this.isOtherPersonStudent @@ -84,11 +83,11 @@ export default { const opts = { zone: this.timezone }; const start = luxon.DateTime.fromISO( - this.studiensemester_start, + startDate, opts, ).toUnixInteger(); const ende = luxon.DateTime.fromISO( - this.studiensemester_ende, + endDate, opts, ).toUnixInteger(); @@ -166,19 +165,21 @@ export default { }, }); }, - updateRange(rangeInterval) { - this.$api - .call( - ApiLvPlan.studiensemesterDateInterval( - rangeInterval.end.startOf("week").toISODate(), - ), - ) - .then((res) => { - this.studiensemester_kurzbz = - res.data.studiensemester_kurzbz; - this.studiensemester_start = res.data.start; - this.studiensemester_ende = res.data.ende; - }); + async updateRange(rangeInterval) { + const semesterResponse = await this.$api.call( + ApiStudienSemester.getContainingOrNearestByDateRange( + rangeInterval.s.toISO().slice(0, 10), + rangeInterval.e.toISO().slice(0, 10), + ), + ); + this.startSemester = + semesterResponse.data.length + ? semesterResponse.data[0] + : null; + this.endSemester = + semesterResponse.data.length > 1 + ? semesterResponse.data[1] + : null; }, getPromiseFunc(start, end) { return [ @@ -250,8 +251,14 @@ export default {

- - {{ $p.t('lehre/stundenplan') + (studiensemester_kurzbz ? " " + studiensemester_kurzbz : "") }} + + {{ $p.t('lehre/stundenplan') }} + + {{ startSemester.studiensemester_kurzbz }} + + {{ "- " + endSemester.studiensemester_kurzbz }} + +
diff --git a/public/js/components/Cis/Mylv/LvUebersicht.js b/public/js/components/Cis/Mylv/LvUebersicht.js index df79275d0..dfc1d4e35 100644 --- a/public/js/components/Cis/Mylv/LvUebersicht.js +++ b/public/js/components/Cis/Mylv/LvUebersicht.js @@ -73,7 +73,7 @@ export default { // check if the lv has lvplan entries for this studiensemester if (this.studiensemester && this.event) { return this.$fhcApi.factory.studium.getLvPlanForStudiensemester(this.studiensemester, this.event.lehreinheit_id ?? this.event.lehrveranstaltung_id) - .then(data => data.data) + .then(data => data.data?.retval) .then(res => { if (Array.isArray(res) && res.length > 0) { this.hasLvPlanEintraege = true; @@ -114,4 +114,4 @@ export default { `, -}; \ No newline at end of file +}; diff --git a/public/js/components/Cis/Renderer/Feiertage/calendarEvent.js b/public/js/components/Cis/Renderer/Feiertage/calendarEvent.js index 79e3c8568..d08b6f348 100644 --- a/public/js/components/Cis/Renderer/Feiertage/calendarEvent.js +++ b/public/js/components/Cis/Renderer/Feiertage/calendarEvent.js @@ -1,5 +1,6 @@ export default { + name: 'Cis-Renderer-Feiertag-CalendarEvent', props: { event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Feiertage/modalContent.js b/public/js/components/Cis/Renderer/Feiertage/modalContent.js index aa0db470c..fa7af46bb 100644 --- a/public/js/components/Cis/Renderer/Feiertage/modalContent.js +++ b/public/js/components/Cis/Renderer/Feiertage/modalContent.js @@ -1,6 +1,7 @@ import { formatDate } from "../../../../helpers/DateHelpers.js" export default { + name: 'Cis-Renderer-Feiertag-ModalContent', props:{ event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Feiertage/modalTitle.js b/public/js/components/Cis/Renderer/Feiertage/modalTitle.js index 59feee375..674bb5be9 100644 --- a/public/js/components/Cis/Renderer/Feiertage/modalTitle.js +++ b/public/js/components/Cis/Renderer/Feiertage/modalTitle.js @@ -1,4 +1,5 @@ export default { + name: 'Cis-Renderer-Feiertag-ModalTitle', props:{ event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js b/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js index 652b29645..314e15a5a 100644 --- a/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js +++ b/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js @@ -1,4 +1,5 @@ export default { + name: 'Cis-Renderer-Lehreinheit-CalendarEvent', props:{ event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js b/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js index eb8908648..c073cdab5 100644 --- a/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js +++ b/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js @@ -5,6 +5,7 @@ import ApiLvPlan from '../../../../api/factory/lvPlan.js'; import ApiAddons from '../../../../api/factory/addons.js'; export default { + name: 'Cis-Renderer-Lehreinheit-ModalContent', components:{ LvMenu, }, @@ -49,6 +50,16 @@ export default { return this.event.ende; } return numberPadding(this.event.ende.getHours()) + ":" + numberPadding(this.event.ende.getMinutes()); + }, + showLvMenu: function() { + const hideOnRoutes = [ + 'OtherLvPlan', + 'StgOrgLvPlan' + ]; + if(hideOnRoutes.includes(this.$route.name)) { + return false; + } + return true; } }, watch: { @@ -162,6 +173,6 @@ export default { - +
`, } \ No newline at end of file diff --git a/public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js b/public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js index 4acb90248..cd2553f30 100644 --- a/public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js +++ b/public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js @@ -1,4 +1,5 @@ export default { + name: 'Cis-Renderer-Lehreinheit-ModalTitle', props:{ event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js b/public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js index 181ef29bd..f03887c64 100644 --- a/public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js +++ b/public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js @@ -1,4 +1,5 @@ export default { + name: 'Cis-Renderer-Reservierung-CalendarEvent', props: { event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Reservierungen/modalContent.js b/public/js/components/Cis/Renderer/Reservierungen/modalContent.js index 0d6c62672..9f43e371c 100644 --- a/public/js/components/Cis/Renderer/Reservierungen/modalContent.js +++ b/public/js/components/Cis/Renderer/Reservierungen/modalContent.js @@ -2,6 +2,7 @@ import { numberPadding, formatDate } from "../../../../helpers/DateHelpers.js" import LvMenu from "../../Mylv/LvMenu.js"; export default { + name: 'Cis-Renderer-Reservierung-ModalContent', props:{ event: { type: Object, diff --git a/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js b/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js index c5f195ddb..1fed5d3f0 100644 --- a/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js +++ b/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js @@ -1,4 +1,5 @@ export default { + name: 'Cis-Renderer-Reservierung-ModalTitle', props:{ event: { type: Object, diff --git a/public/js/components/LVVerwaltung/LVVerwaltung.js b/public/js/components/LVVerwaltung/LVVerwaltung.js index 6d9331d38..beb7c68c0 100644 --- a/public/js/components/LVVerwaltung/LVVerwaltung.js +++ b/public/js/components/LVVerwaltung/LVVerwaltung.js @@ -61,6 +61,7 @@ export default { selected: [], studiengang_kz: null, selectedStudiensemester: this.defaultSemester, + preselected: null, dropdowns: { studiensemester_array: [], sprachen_array: [], @@ -73,7 +74,11 @@ export default { calcheightonly: true, types: [ "mitarbeiter", - "mitarbeiter_ohne_zuordnung" + "mitarbeiter_ohne_zuordnung", +/* + "lehreinheit", + "lehrveranstaltung", +*/ ], actions: { employee: { @@ -86,6 +91,26 @@ export default { childactions: [ ] }, + lehreinheit: { + defaultaction: { + type: "function", + action: (data) => { + this.onSelectLehreinheit(data); + } + }, + childactions: [ + ] + }, + lehrveranstaltung: { + defaultaction: { + type: "function", + action: (data) => { + this.onSelectLehrveranstaltung(data); + } + }, + childactions: [ + ] + } } }, } @@ -94,6 +119,8 @@ export default { filter() { let filter = { emp: this.$route.params.emp, + le: this.$route.params.le, + lv: this.$route.params.lv, studiensemester_kurzbz: this.selectedStudiensemester }; let index; @@ -105,7 +132,7 @@ export default { if (index > -1) filter.semester = this.$route.params.treemenu[index+1]; } - filter.activeFilter = filter.emp ? 'employee' : filter.stg ? 'verband' : null; + filter.activeFilter = filter.emp ? 'employee' : filter.stg ? 'verband' : filter.le ? 'lehreinheit' : filter.lv ? 'lehrveranstaltung' : null; return filter; }, emp() { @@ -203,20 +230,50 @@ export default { }, onSelectEmployee(emp) { + let params = { ...this.$route.params } + delete params.le; + delete params.lv; + this.$router.push({ name: 'emp', params: { - ...this.$route.params, + ...params, emp } }); }, + onSelectLehreinheit(lehreinheit) + { + this.$router.push({ + name: 'le', + params: { + le: lehreinheit.id, + stdsem: lehreinheit.studiensemester_kurzbz.toLowerCase() + } + }); + }, + + onSelectLehrveranstaltung(lehrveranstaltung) + { + this.$router.push({ + name: 'lv', + params: { + lv: lehrveranstaltung.id, + stdsem: lehrveranstaltung?.studiensemester_kurzbz?.toLowerCase() ?? this.selectedStudiensemester.toLowerCase() + } + }); + }, onSelectVerband({ path: link, stg_kz }) { + + let params = { ...this.$route.params } + delete params.le; + delete params.lv; + this.$router.push({ name: this.$route.name == 'emp' ? 'emp' : 'treemenu', params: { - ...this.$route.params, + ...params, treemenu: link.split('/') } }); @@ -295,7 +352,7 @@ export default { } }, created() { - if (!this.$route.params.stdsem) { + if (this.$route.name !== 'le' && this.$route.name !== 'lv' && !this.$route.params.stdsem) { this.$router.replace({ name: 'stdsem', params: { @@ -477,7 +534,8 @@ export default {