diff --git a/application/controllers/api/frontend/v1/lv/Lehreinheit.php b/application/controllers/api/frontend/v1/lv/Lehreinheit.php index fd1c23667..b851f8c22 100644 --- a/application/controllers/api/frontend/v1/lv/Lehreinheit.php +++ b/application/controllers/api/frontend/v1/lv/Lehreinheit.php @@ -80,7 +80,7 @@ class Lehreinheit extends FHCAPI_Controller $lehrveranstaltung = getData($lehrveranstaltung_result)[0]; - $oe_result = $this->_ci->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id, $lehrveranstaltung->studiengang_kz); + $oe_result = $this->_ci->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id); $oe_array = hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array(); if (!$this->_ci->permissionlib->isBerechtigtMultipleOe('admin', $oe_array, 'suid') && diff --git a/application/controllers/api/frontend/v1/lv/StgTree.php b/application/controllers/api/frontend/v1/lv/StgTree.php index fe3047902..8272da978 100644 --- a/application/controllers/api/frontend/v1/lv/StgTree.php +++ b/application/controllers/api/frontend/v1/lv/StgTree.php @@ -86,6 +86,32 @@ class StgTree extends FHCAPI_Controller ]); $list = $this->getDataOrTerminateWithError($result); + $result = $this->StudiengangModel->load($studiengang_kz); + $result = $this->getDataOrTerminateWithError($result); + if ($result) + { + if (current($result)->mischform) + { + $this->load->model('organisation/Studienordnung_model', 'StudienordnungModel'); + + $this->StudienordnungModel->addDistinct(); + $this->StudienordnungModel->addSelect("CONCAT(studiengang_kz, '/', p.orgform_kurzbz) AS link"); + $this->StudienordnungModel->addSelect("p.orgform_kurzbz AS name"); + $this->StudienordnungModel->addSelect("TRUE as leaf", false); + + $this->StudienordnungModel->addJoin('lehre.tbl_studienplan p', 'studienordnung_id'); + + $result = $this->StudienordnungModel->loadWhere([ + 'aktiv' => true, + 'studiengang_kz' => $studiengang_kz, + 'p.orgform_kurzbz !=' => 'DDP' + ]); + $result = $this->getDataOrTerminateWithError($result); + + $list = array_merge($list, $result); + } + } + $this->terminateWithSuccess($list); } } diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index c33b87ad4..c373f5449 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -322,7 +322,7 @@ EOSQL; if (hasData($result)) { $lehrveranstaltung = getData($result)[0]; - $oe_result = $this->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id, $lehrveranstaltung->studiengang_kz); + $oe_result = $this->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id); return success(hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array('')); } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 303bebe1e..31ec2901f 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -1161,7 +1161,7 @@ class Lehrveranstaltung_model extends DB_Model } if (!is_null($verband)) { - $qry .= ' AND (orgform_kurzbz = ? OR orgform_kurzbz IS NULL)'; + $qry .= ' AND (tbl_lehrveranstaltung.orgform_kurzbz = ? OR tbl_lehrveranstaltung.orgform_kurzbz IS NULL)'; $params[] = $verband; } @@ -1198,31 +1198,29 @@ class Lehrveranstaltung_model extends DB_Model "; } - public function getAllOe($lv_id, $stg_kz = null) + public function getAllOe($lv_id) { - $qry = "(SELECT DISTINCT oe_kurzbz - FROM lehre.tbl_studienplan_lehrveranstaltung - JOIN lehre.tbl_studienplan USING(studienplan_id) - JOIN lehre.tbl_studienordnung USING(studienordnung_id) - JOIN public.tbl_studiengang USING(studiengang_kz) - WHERE lehrveranstaltung_id = ?)"; + $qry = "SELECT DISTINCT oe_kurzbz + FROM lehre.tbl_studienplan_lehrveranstaltung + JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN public.tbl_studiengang USING(studiengang_kz) + WHERE lehrveranstaltung_id = ? - $params = array($lv_id); - if (!is_null($stg_kz)) - { - $qry .= ' UNION - (SELECT oe_kurzbz - FROM public.tbl_studiengang WHERE studiengang_kz = ?)'; - $params[] = $stg_kz; - } - else - { - $qry .= ' UNION - (SELECT oe_kurzbz - FROM public.tbl_studiengang WHERE studiengang_kz = (SELECT tbl_lehrveranstaltung.studiengang_kz FROM lehre.tbl_lehrveranstaltung WHERE lehrveranstaltung_id = ?)) - '; - $params[] = $lv_id; - } + UNION + + ( + SELECT oe_kurzbz + FROM public.tbl_studiengang + WHERE studiengang_kz = ( + SELECT tbl_lehrveranstaltung.studiengang_kz + FROM lehre.tbl_lehrveranstaltung + WHERE lehrveranstaltung_id = ? + ) + ) + "; + + $params = array($lv_id, $lv_id); return $this->execReadOnlyQuery($qry, $params); } diff --git a/application/models/organisation/Studienplan_model.php b/application/models/organisation/Studienplan_model.php index 5a9097d9a..0b41a8c39 100644 --- a/application/models/organisation/Studienplan_model.php +++ b/application/models/organisation/Studienplan_model.php @@ -107,6 +107,8 @@ class Studienplan_model extends DB_Model )); } + // Deprecated + // im Lehrveranstaltung_model vorhanden public function getAllOesForLv($lehrveranstaltung_id) { $this->addDistinct('oe_kurzbz'); diff --git a/public/js/apps/LVVerwaltung.js b/public/js/apps/LVVerwaltung.js index c72f9fc9e..f365b74a8 100644 --- a/public/js/apps/LVVerwaltung.js +++ b/public/js/apps/LVVerwaltung.js @@ -31,6 +31,7 @@ const router = VueRouter.createRouter({ studiensemester_kurzbz: studiensemester_kurzbz, emp: emp, stg: stg, + semester: semester }; }, beforeEnter: (to, from, next) => { @@ -62,12 +63,12 @@ const router = VueRouter.createRouter({ studiensemester_kurzbz = undefined; if (stg === '') - semester = undefined; + stg = undefined; return { studiensemester_kurzbz: studiensemester_kurzbz, stg: stg, - semester: semester != null ? Number(semester) : null, + semester: semester, }; }, beforeEnter: (to, from, next) => { diff --git a/public/js/components/LVVerwaltung/Details/Gruppen.js b/public/js/components/LVVerwaltung/Details/Gruppen.js index 62dae172f..219b956d8 100644 --- a/public/js/components/LVVerwaltung/Details/Gruppen.js +++ b/public/js/components/LVVerwaltung/Details/Gruppen.js @@ -103,7 +103,7 @@ export default{ { const query = event.query.toLowerCase().trim(); this.filteredGroups = this.dropdowns.gruppen_array.filter(gruppe => { - return gruppe.gruppe_kurzbz.toLowerCase().includes(query); + return gruppe.gruppe_kurzbz.toLowerCase().includes(query) || gruppe?.bezeichnung?.toLowerCase().includes(query); }).map(gruppe => ({ label: gruppe.bezeichnung ? `${gruppe.gruppe_kurzbz.trim()} (${gruppe.bezeichnung})` diff --git a/public/js/components/LVVerwaltung/LVVerwaltung.js b/public/js/components/LVVerwaltung/LVVerwaltung.js index 7b8921c80..7bfb3ec82 100644 --- a/public/js/components/LVVerwaltung/LVVerwaltung.js +++ b/public/js/components/LVVerwaltung/LVVerwaltung.js @@ -28,7 +28,7 @@ export default { permissions: Object, config: Object, stg: { type: String, required: false }, - semester: { type: Number, required: false, default: null }, + semester: { type: [Number, String], required: false, default: null }, studiensemester_kurzbz: { type: String, required: false, default: null }, emp: { type: String, required: false, default: null } }, @@ -159,7 +159,7 @@ export default { const params = { stg }; if (semester !== null) - params.semester = Number(semester); + params.semester = semester; if (studiensemester_kurzbz) params.studiensemester_kurzbz = studiensemester_kurzbz; if (this.filter.emp) @@ -176,7 +176,7 @@ export default { else { delete newParams.emp; - newParams.semester = null; + this.$router.replace({ name: 'byStg', params: newParams }); } },