diff --git a/application/controllers/api/frontend/v1/Lehrveranstaltung.php b/application/controllers/api/frontend/v1/Lehrveranstaltung.php
index 1b2e2bc35..098d44712 100644
--- a/application/controllers/api/frontend/v1/Lehrveranstaltung.php
+++ b/application/controllers/api/frontend/v1/Lehrveranstaltung.php
@@ -39,6 +39,12 @@ class Lehrveranstaltung extends FHCAPI_Controller
$this->_ci->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$this->_ci->load->library('VariableLib', ['uid' => $this->_uid]);
+
+ $this->loadPhrases(
+ array(
+ 'ui'
+ )
+ );
}
public function loadByEmployee($mitarbeiter_uid = null, $stg_kz = null)
{
@@ -54,7 +60,7 @@ class Lehrveranstaltung extends FHCAPI_Controller
foreach ($lehrveranstaltungen_data as $lehrveranstaltung)
{
- $lehreinheiten = $this->_ci->LehreinheitModel->getLEByLV($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid);
+ $lehreinheiten = $this->_ci->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz, $mitarbeiter_uid);
$lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten);
if (!isset($lehrveranstaltung->_children))
@@ -69,8 +75,8 @@ class Lehrveranstaltung extends FHCAPI_Controller
public function loadByStudiengang($studiengang_kz = null, $semester = null)
{
- if (is_null($studiengang_kz) || !ctype_digit((string)$studiengang_kz))
- $this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
+ if (is_null($studiengang_kz) || !preg_match("/^-?[1-9][0-9]*$/", (string)$studiengang_kz))
+ $this->terminateWithError($this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
$verband = null;
if (!is_null($semester) && !is_numeric($semester))
@@ -164,7 +170,7 @@ class Lehrveranstaltung extends FHCAPI_Controller
if (is_null($lehrveranstaltung_id) || !ctype_digit((string)$lehrveranstaltung_id))
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
- $this->_ci->LehrveranstaltungModel->addSelect('lehrveranstaltung_id, lehrform_kurzbz, lehre, bezeichnung as lvbezeichnung');
+ $this->_ci->LehrveranstaltungModel->addSelect('lehrveranstaltung_id, lehrform_kurzbz, lehre, bezeichnung as lvbezeichnung, sprache');
$lehrveranstaltung_result = $this->_ci->LehrveranstaltungModel->loadWhere(array('lehrveranstaltung_id' => $lehrveranstaltung_id));
$lehrveranstaltung_result = $this->getDataOrTerminateWithError($lehrveranstaltung_result);
$lehrveranstaltung = $lehrveranstaltung_result[0];
@@ -202,7 +208,7 @@ class Lehrveranstaltung extends FHCAPI_Controller
foreach ($lehrveranstaltungen_data as $lehrveranstaltung)
{
- $lehreinheiten = $this->LehreinheitModel->getLEByLV($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz);
+ $lehreinheiten = $this->LehreinheitModel->getByLvidStudiensemester($lehrveranstaltung->lehrveranstaltung_id, $studiensemester_kurzbz);
$lehreinheiten_data = $this->getDataOrTerminateWithError($lehreinheiten);
if (!isset($lehrveranstaltung->_children))
diff --git a/application/controllers/api/frontend/v1/lv/Gruppe.php b/application/controllers/api/frontend/v1/lv/Gruppe.php
index 01c11f98f..09f253a59 100644
--- a/application/controllers/api/frontend/v1/lv/Gruppe.php
+++ b/application/controllers/api/frontend/v1/lv/Gruppe.php
@@ -19,6 +19,13 @@ class Gruppe extends FHCAPI_Controller
$this->_ci = &get_instance();
$this->_setAuthUID();
+ $this->_ci->load->library('PhrasesLib');
+ $this->loadPhrases(
+ array(
+ 'ui'
+ )
+ );
+
$this->_ci->load->model('organisation/Gruppe_model', 'GruppeModel');
$this->_ci->load->model('organisation/Lehrverband_model', 'LehrverbandModel');
$this->_ci->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
@@ -57,10 +64,6 @@ class Gruppe extends FHCAPI_Controller
if (is_null($lehreinheit_id) || !ctype_digit((string)$lehreinheit_id) || is_null($gid) || !ctype_digit((string)$gid) || is_null($lehrverband))
$this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
- $gruppe_result = $this->_ci->GruppeModel->loadWhere(array('gid' => $gid));
- if (!hasData($gruppe_result) || isError($gruppe_result))
- $this->terminateWithError( $this->p->t('ui', 'ungueltigeParameter'), self::ERROR_TYPE_GENERAL);
-
$this->checkPermission($lehreinheit_id);
$result = $this->_ci->LehreinheitgruppeModel->addGroup($lehreinheit_id, $gid, !($lehrverband === 'false'));
diff --git a/application/controllers/api/frontend/v1/lv/Lehreinheit.php b/application/controllers/api/frontend/v1/lv/Lehreinheit.php
index 84ee66d5d..0c42c0082 100644
--- a/application/controllers/api/frontend/v1/lv/Lehreinheit.php
+++ b/application/controllers/api/frontend/v1/lv/Lehreinheit.php
@@ -164,7 +164,6 @@ class Lehreinheit extends FHCAPI_Controller
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
-
$updateData = array();
foreach ($updatableFields as $field)
{
@@ -183,6 +182,12 @@ class Lehreinheit extends FHCAPI_Controller
$updateData
);
+ if (!isset($updateData['unr']))
+ {
+ $unr = getData($result);
+ $this->_ci->LehreinheitModel->update($unr, array('unr' => $unr));
+ }
+
$this->terminateWithSuccess($result);
}
diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php
index ba9e82c64..ce414bad2 100644
--- a/application/models/education/Lehreinheit_model.php
+++ b/application/models/education/Lehreinheit_model.php
@@ -335,7 +335,7 @@ EOSQL;
}
- public function getByLvidStudiensemester($lv_id, $studiensemester_kurzbz)
+ public function getByLvidStudiensemester($lv_id, $studiensemester_kurzbz, $mitarbeiter_uid = null, $fachbereich_kurzbz = null)
{
$qry = "WITH lehreinheiten AS (
SELECT *
@@ -343,98 +343,64 @@ EOSQL;
WHERE lehrveranstaltung_id = ?
AND studiensemester_kurzbz = ?
),
- gruppen AS (
- SELECT
- COALESCE(
- string_agg(
- tbl_lehreinheitgruppe.gruppe_kurzbz, ' '
- ) FILTER (WHERE NOT direktinskription),
- string_agg(
- COALESCE(
- upper(tbl_studiengang.typ::varchar(1) ||tbl_studiengang.kurzbz) ||
- '-'||
- COALESCE(tbl_lehreinheitgruppe.semester::varchar, '') ||
- COALESCE(tbl_lehreinheitgruppe.verband::varchar, '')||
- COALESCE(tbl_lehreinheitgruppe.gruppe, '')), ', '
- )
- ) AS gruppe,
- lehreinheit_id
- FROM
- lehre.tbl_lehreinheitgruppe
- LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
- LEFT JOIN public.tbl_gruppe USING(gruppe_kurzbz)
- GROUP BY lehreinheit_id
- ),
- mitarbeiter AS (
- SELECT kurzbz, semesterstunden, planstunden, lehreinheit_id
- FROM lehre.tbl_lehreinheitmitarbeiter
- JOIN public.tbl_mitarbeiter USING(mitarbeiter_uid)
- ),
- fachbereich AS (
- SELECT
- tbl_organisationseinheit.bezeichnung,
- tbl_organisationseinheit.organisationseinheittyp_kurzbz,
- lehreinheit_id
- FROM
- public.tbl_organisationseinheit,
- lehre.tbl_lehrveranstaltung as lehrfach,
- lehre.tbl_lehreinheit
- WHERE tbl_organisationseinheit.oe_kurzbz = lehrfach.oe_kurzbz
- AND lehrfach.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id
- ),
- tag_data_agg AS (
- SELECT
- lehreinheit_id,
- COALESCE(json_agg(tag ORDER BY id), '[]'::json) AS tags
- FROM (
- SELECT DISTINCT ON (public.tbl_notiz.notiz_id)
- tbl_notiz.notiz_id AS id,
- typ_kurzbz,
- array_to_json(tbl_notiz_typ.bezeichnung_mehrsprachig)->>0 AS beschreibung,
- text AS notiz,
- style,
- erledigt AS done,
- lehreinheit_id
- FROM public.tbl_notizzuordnung
- JOIN public.tbl_notiz ON tbl_notizzuordnung.notiz_id = tbl_notiz.notiz_id
- JOIN public.tbl_notiz_typ ON tbl_notiz.typ = tbl_notiz_typ.typ_kurzbz
- WHERE lehreinheit_id IN (SELECT lehreinheit_id FROM lehreinheiten)
- ) AS tag
- GROUP BY lehreinheit_id
- )
+ ". $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,
- (
- SELECT string_agg(gr.gruppe, ' ')
- FROM gruppen gr
- WHERE gr.lehreinheit_id = lehreinheiten.lehreinheit_id
- ) AS gruppen,
- (
- SELECT string_agg(ma.kurzbz, ' ')
- FROM mitarbeiter ma
- WHERE ma.lehreinheit_id = lehreinheiten.lehreinheit_id
- ) AS lektoren,
- (
- SELECT string_agg(fachbereich.bezeichnung, ' ')
- FROM fachbereich
- WHERE fachbereich.lehreinheit_id = lehreinheiten.lehreinheit_id
- ) AS fachbereich
+ gruppen.gruppen,
+ mitarbeiter.lektoren,
+ mitarbeiter.le_planstunden,
+ 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 tag_data_agg ON tag_data_agg.lehreinheit_id = lehreinheiten.lehreinheit_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
+ ";
- return $this->execReadOnlyQuery($qry, array($lv_id, $studiensemester_kurzbz));
+ $params = array($lv_id, $studiensemester_kurzbz);
+
+ if ($mitarbeiter_uid !== null)
+ {
+ $qry .= " AND lehreinheiten.lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheitmitarbeiter WHERE mitarbeiter_uid = ?) ";
+ $params[] = $mitarbeiter_uid;
+ }
+
+ if($fachbereich_kurzbz !== null)
+ {
+ $qry .= " AND EXISTS ( SELECT 1 FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_fachbereich USING(oe_kurzbz) WHERE fachbereich_kurzbz= ? AND lehrveranstaltung_id=lehreinheiten.lehrfach_id)";
+ $params[] = $fachbereich_kurzbz;
+ }
+ $qry .= " ORDER BY lehrveranstaltung_id;";
+
+ return $this->execReadOnlyQuery($qry, $params);
}
private function getLVTmp($stg_kz = null)
{
$qry = "SELECT DISTINCT ON(lehrveranstaltung_id) *,
- '' as studienplan_id, '' as studienplan_beeichnung,
- CONCAT(vw_lehreinheit.stg_typ, vw_lehreinheit.stg_kurzbz) as studiengang
- FROM campus.vw_lehreinheit
+ '' as stundenblockung,
+ '' as lehreinheit_id,
+ '' as wochenrythmus,
+ '' as raumtyp,
+ '' as raumtypalternativ,
+ '' as gruppen,
+ '' as studienplan_id,
+ '' 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 = ?";
@@ -460,89 +426,6 @@ EOSQL;
return $this->execReadOnlyQuery($qry, $params);
}
-
-
- public function getLEByLV($lv_id, $studiensemester_kurzbz, $mitarbeiter_uid = null, $fachbereich_kurzbz = null)
- {
- $qry = "
- WITH gruppen AS (
- SELECT
- COALESCE(
- string_agg(
- tbl_lehreinheitgruppe.gruppe_kurzbz, ', '
- ) FILTER (WHERE NOT direktinskription),
- string_agg(
- COALESCE(
- upper(tbl_studiengang.typ::varchar(1) ||tbl_studiengang.kurzbz) ||
- '-'||
- COALESCE(tbl_lehreinheitgruppe.semester::varchar, '') ||
- COALESCE(tbl_lehreinheitgruppe.verband::varchar, '')||
- COALESCE(tbl_lehreinheitgruppe.gruppe, '')), ', '
- )
- ) AS gruppen,
- lehreinheit_id
- FROM
- lehre.tbl_lehreinheitgruppe
- LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
- LEFT JOIN public.tbl_gruppe USING(gruppe_kurzbz)
- GROUP BY lehreinheit_id
- ),
- lektoren AS (
- SELECT string_agg(kurzbz, ' ') as lektoren,
- string_agg(semesterstunden::text, ' ') as semesterstunden,
- string_agg(planstunden::text, ' ') as planstunden,
- lehreinheit_id
- FROM lehre.tbl_lehreinheitmitarbeiter
- JOIN public.tbl_mitarbeiter USING(mitarbeiter_uid)
- GROUP BY lehreinheit_id
- ),
- fachbereich AS (
- SELECT
- string_agg(CONCAT(tbl_organisationseinheit.bezeichnung, ' (', tbl_organisationseinheit.organisationseinheittyp_kurzbz, ')'),' ') as fachbereich,
- lehreinheit_id
- FROM
- public.tbl_organisationseinheit,
- lehre.tbl_lehrveranstaltung as lehrfach,
- lehre.tbl_lehreinheit
- WHERE
- tbl_organisationseinheit.oe_kurzbz = lehrfach.oe_kurzbz
- AND lehrfach.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id
- GROUP BY lehreinheit_id
- )
- SELECT tbl_lehreinheit.*,
- tbl_lehrveranstaltung.*,
- tbl_lehrveranstaltung.kurzbz as lv_kurzbz,
- tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
- lektoren.lektoren,
- lektoren.semesterstunden,
- lektoren.planstunden,
- fachbereich.fachbereich
- FROM lehre.tbl_lehreinheit
- LEFT JOIN lehre.tbl_lehrveranstaltung ON tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id
- LEFT JOIN gruppen ON tbl_lehreinheit.lehreinheit_id = gruppen.lehreinheit_id
- LEFT JOIN lektoren ON tbl_lehreinheit.lehreinheit_id = lektoren.lehreinheit_id
- LEFT JOIN fachbereich ON tbl_lehreinheit.lehreinheit_id = fachbereich.lehreinheit_id
- WHERE tbl_lehreinheit.lehrveranstaltung_id = ?
- AND studiensemester_kurzbz = ?
- ";
-
- $params = array($lv_id, $studiensemester_kurzbz);
- if ($mitarbeiter_uid !== null)
- {
- $qry .= " AND tbl_lehreinheit.lehreinheit_id IN ( SELECT lehreinheit_id FROM lehre.tbl_lehreinheitmitarbeiter WHERE mitarbeiter_uid = ?) ";
- $params[] = $mitarbeiter_uid;
- }
-
- if($fachbereich_kurzbz !== null)
- {
- $qry .= " AND EXISTS ( SELECT 1 FROM lehre.tbl_lehrveranstaltung JOIN public.tbl_fachbereich USING(oe_kurzbz) WHERE fachbereich_kurzbz= ? AND lehrveranstaltung_id=tbl_lehreinheit.lehrfach_id)";
- $params[] = $fachbereich_kurzbz;
- }
- $qry .= " ORDER BY lehreinheit_id;";
-
- return $this->execReadOnlyQuery($qry, $params);
- }
-
public function deleteLehreinheit($lehreinheit_id)
{
$lehreinheit = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
@@ -741,4 +624,85 @@ EOSQL;
$this->db->trans_commit();
return success('Contract successfully updated.');
}
+
+ private function _getGruppenCTE()
+ {
+ return "gruppen AS (
+ SELECT
+ lehreinheit_id,
+ STRING_AGG(
+ CASE
+ WHEN (tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL OR tbl_lehreinheitgruppe.gruppe_kurzbz = '')
+ THEN
+ UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) ||
+ COALESCE(TRIM(tbl_lehreinheitgruppe.semester::text), '') ||
+ COALESCE(TRIM(tbl_lehreinheitgruppe.verband), '') ||
+ COALESCE(TRIM(tbl_lehreinheitgruppe.gruppe), '')
+ ELSE
+ CASE
+ WHEN NOT tbl_gruppe.direktinskription THEN tbl_lehreinheitgruppe.gruppe_kurzbz
+ ELSE NULL
+ END
+ END,
+ ' '
+ ) AS gruppen
+ FROM lehre.tbl_lehreinheitgruppe
+ LEFT JOIN public.tbl_studiengang USING (studiengang_kz)
+ LEFT JOIN public.tbl_gruppe USING (gruppe_kurzbz)
+ JOIN lehreinheiten USING(lehreinheit_id)
+ GROUP BY lehreinheit_id
+ )";
+ }
+ private function _getLektorenCTE()
+ {
+ return "mitarbeiter AS (
+ SELECT
+ tbl_lehreinheitmitarbeiter.lehreinheit_id,
+ STRING_AGG(m.kurzbz, ' ') AS lektoren,
+ STRING_AGG(tbl_lehreinheitmitarbeiter.semesterstunden::text, ' ') AS semesterstunden,
+ STRING_AGG(tbl_lehreinheitmitarbeiter.planstunden::text, ' ') AS le_planstunden
+ FROM lehre.tbl_lehreinheitmitarbeiter
+ JOIN public.tbl_mitarbeiter m USING (mitarbeiter_uid)
+ JOIN lehreinheiten USING(lehreinheit_id)
+ GROUP BY tbl_lehreinheitmitarbeiter.lehreinheit_id
+ )";
+ }
+
+ private function _getFachbereichCTE()
+ {
+ return "fachbereich AS (
+ SELECT
+ CONCAT(tbl_organisationseinheit.bezeichnung, ' (', tbl_organisationseinheit.organisationseinheittyp_kurzbz, ')') as bezeichnung,
+ lehreinheiten.lehreinheit_id
+ FROM public.tbl_organisationseinheit
+ JOIN lehre.tbl_lehrveranstaltung AS lehrfach ON tbl_organisationseinheit.oe_kurzbz = lehrfach.oe_kurzbz
+ JOIN lehre.tbl_lehreinheit ON lehrfach.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id
+ JOIN lehreinheiten ON tbl_lehreinheit.lehreinheit_id = lehreinheiten.lehreinheit_id
+ )";
+ }
+
+ private function _getTagsCTE()
+ {
+ return "tag_data_agg AS (
+ SELECT
+ lehreinheit_id,
+ COALESCE(json_agg(tag ORDER BY id), '[]'::json) AS tags
+ FROM (
+ SELECT DISTINCT ON (public.tbl_notiz.notiz_id)
+ tbl_notiz.notiz_id AS id,
+ typ_kurzbz,
+ array_to_json(tbl_notiz_typ.bezeichnung_mehrsprachig)->>0 AS beschreibung,
+ text AS notiz,
+ style,
+ erledigt AS done,
+ lehreinheit_id
+ FROM public.tbl_notizzuordnung
+ JOIN public.tbl_notiz ON tbl_notizzuordnung.notiz_id = tbl_notiz.notiz_id
+ JOIN public.tbl_notiz_typ ON tbl_notiz.typ = tbl_notiz_typ.typ_kurzbz
+ WHERE lehreinheit_id IN (SELECT lehreinheit_id FROM lehreinheiten)
+ ) AS tag
+ GROUP BY lehreinheit_id
+ )";
+ }
+
}
diff --git a/application/models/education/Lehreinheitgruppe_model.php b/application/models/education/Lehreinheitgruppe_model.php
index 5dd2fa66c..8fc8e09f3 100644
--- a/application/models/education/Lehreinheitgruppe_model.php
+++ b/application/models/education/Lehreinheitgruppe_model.php
@@ -304,7 +304,7 @@ class Lehreinheitgruppe_model extends DB_Model
}
else if ($verband === true)
{
- $gruppen_result = $this->_ci->LehrverbandModel->loadWhere(array('gid' => $gid));
+ $gruppen_result = $this->LehrverbandModel->loadWhere(array('gid' => $gid));
if (!hasData($gruppen_result))
return error('No group found for gid ' . $gid);
@@ -470,6 +470,6 @@ class Lehreinheitgruppe_model extends DB_Model
END AS verplant");
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
- return $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'tbl_gruppe.direktinskription' => false));
+ return $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
}
}
diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php
index 955177273..121de9233 100644
--- a/application/models/education/Lehrveranstaltung_model.php
+++ b/application/models/education/Lehrveranstaltung_model.php
@@ -1122,9 +1122,9 @@ class Lehrveranstaltung_model extends DB_Model
$qry .= "
SELECT DISTINCT on(lehrveranstaltung_id) lehrveranstaltung_id,
- kurzbz as lv_kurzbz,
- bezeichnung as lv_bezeichnung,
- bezeichnung_english as lv_bezeichnung_english,
+ tbl_lehrveranstaltung.kurzbz as lv_kurzbz,
+ tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
+ tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english,
studiengang_kz,
semester,
tbl_lehrveranstaltung.sprache,
@@ -1133,7 +1133,7 @@ class Lehrveranstaltung_model extends DB_Model
tbl_lehrveranstaltung.anmerkung,
tbl_lehrveranstaltung.lehre,
lehreverzeichnis as lv_lehreverzeichnis,
- aktiv,
+ tbl_lehrveranstaltung.aktiv,
planfaktor as lv_planfaktor,
planlektoren as lv_planlektoren,
planpersonalkosten as lv_planpersonalkosten,
@@ -1143,9 +1143,11 @@ class Lehrveranstaltung_model extends DB_Model
''::text as studienplan_id,
'' as studienplan_bezeichnung,
'' as studienplan_lehrveranstaltung_id_parent,
- tbl_lehrveranstaltung.lehrtyp_kurzbz
+ tbl_lehrveranstaltung.lehrtyp_kurzbz,
+ UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang
FROM lehre.tbl_lehrveranstaltung
JOIN lehre.tbl_lehreinheit USING (lehrveranstaltung_id)
+ JOIN public.tbl_studiengang USING(studiengang_kz)
WHERE studiengang_kz = ?
AND studiensemester_kurzbz = ?
";
@@ -1178,17 +1180,18 @@ class Lehrveranstaltung_model extends DB_Model
{
return "
SELECT
- lehrveranstaltung_id, kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, bezeichnung_english as lv_bezeichnung_english, studiengang_kz,
+ lehrveranstaltung_id, tbl_lehrveranstaltung.kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, bezeichnung_english as lv_bezeichnung_english, studiengang_kz,
tbl_studienplan_lehrveranstaltung.semester, tbl_lehrveranstaltung.sprache,
ects as lv_ects, semesterstunden, anmerkung, lehre, lehreverzeichnis as lv_lehreverzeichnis, tbl_lehrveranstaltung.aktiv,
planfaktor as lv_planfaktor, planlektoren as lv_planlektoren, planpersonalkosten as lv_planpersonalkosten,
plankostenprolektor as lv_plankostenprolektor, lehrform_kurzbz as lv_lehrform_kurzbz, tbl_lehrveranstaltung.orgform_kurzbz,
tbl_studienplan_lehrveranstaltung.studienplan_id::text as studienplan_id, tbl_studienplan.bezeichnung as studienplan_bezeichnung, tbl_studienplan_lehrveranstaltung.studienplan_lehrveranstaltung_id_parent::text,
- tbl_lehrveranstaltung.lehrtyp_kurzbz
+ tbl_lehrveranstaltung.lehrtyp_kurzbz, UPPER(CONCAT(tbl_studiengang.typ,tbl_studiengang.kurzbz)) as studiengang
FROM
lehre.tbl_lehrveranstaltung
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
JOIN lehre.tbl_studienplan USING(studienplan_id)
+ JOIN tbl_studiengang USING(studiengang_kz)
WHERE
tbl_lehrveranstaltung.aktiv AND ((studienplan_id, tbl_studienplan_lehrveranstaltung.semester) IN ( " . implode(',', $placeholders) . "))
UNION
diff --git a/public/css/Lvverwaltung.css b/public/css/Lvverwaltung.css
index 1ca3f0be1..38d74def4 100644
--- a/public/css/Lvverwaltung.css
+++ b/public/css/Lvverwaltung.css
@@ -14,14 +14,17 @@ textarea[name="anmerkung"] {
.lv_table_icon.icon-modul::before
{
content: '\f468';
+ color: #4e4ed2;
}
.lv_table_icon.icon-lv::before
{
content: '\f466';
+ color: black;
}
.lv_table_icon.icon-::before
{
content: '\f073';
-}
\ No newline at end of file
+ color: #f3c541;
+}
diff --git a/public/js/components/LVVerwaltung/LVVerwaltung.js b/public/js/components/LVVerwaltung/LVVerwaltung.js
index 772af5a47..c7c34802d 100644
--- a/public/js/components/LVVerwaltung/LVVerwaltung.js
+++ b/public/js/components/LVVerwaltung/LVVerwaltung.js
@@ -186,7 +186,7 @@ export default {
: this.$route.params.stg;
}
- this.$p.loadCategory(['lehre', 'person'])
+ this.$p.loadCategory(['lehre', 'person', 'global'])
this.$api.call(ApiDetails.getStudiensemester())
.then(result => {
diff --git a/public/js/components/LVVerwaltung/Setup/Table.js b/public/js/components/LVVerwaltung/Setup/Table.js
index 9b0ae71f3..b4674ccff 100644
--- a/public/js/components/LVVerwaltung/Setup/Table.js
+++ b/public/js/components/LVVerwaltung/Setup/Table.js
@@ -100,7 +100,6 @@ export default {
expanded: [],
selectedColumnValues: [],
tagEndpoint: ApiTag,
- iconPath: FHC_JS_DATA_STORAGE_OBJECT.app_root + '/skin/images/lehrtyp_',
tabulatorEvents: [
{
event: 'rowSelectionChanged',
@@ -119,7 +118,8 @@ export default {
handler: (data) => {
this.getExpandedRows()
}
- },{
+ },
+ {
event: 'dataTreeRowCollapsed',
handler: (data) => {
this.getExpandedRows()
@@ -157,19 +157,18 @@ export default {
initialSort:[
{column: 'lv_bezeichnung', dir: 'desc'},
],
+ dataTreeChildIndent: 20,
dataTreeElementColumn: "lv_kurzbz",
- dataTreeFilter: true,
dataTreeStartExpanded: false,
dataTreeCollapseElement: '',
dataTreeExpandElement: '',
columnDefaults: {
tooltip: true,
headerFilter: "input",
- headerFilterFunc: extendedHeaderFilter
+ headerFilterFunc: extendedHeaderFilter,
},
layout: 'fitDataStretch',
- layoutColumnsOnNewData: false,
- height: '100%',
+ persistenceID: 'lehrveranstaltungen_2025_07_07_v1',
selectableRowsRangeMode: 'click',
selectableRows: true,
rowContextMenu: (component, e) => {
@@ -217,7 +216,6 @@ export default {
];
},
- persistenceID: 'lehrveranstaltungen_2025_05_27_v1',
columns: [
{
title: this.$p.t('lehre', 'kurzbz'),
@@ -302,45 +300,55 @@ export default {
},
width: 150,
},
+ {
+ title: this.$p.t('lehre', 'kurzbz'),
+ field: "lv_kurzbz_anzeige",
+ headerFilterFuncParams: {field: 'lv_kurzbz_anzeige'},
+ formatter: (cell, formatterParams) => {
+ let rowData = cell.getRow().getData();
+ return rowData?.lv_kurzbz?.toUpperCase();
+ },
+ headerFilter: true
+ },
{
title: this.$p.t('lehre', 'lehrveranstaltung_id'),
field: "lehrveranstaltung_id",
headerFilterFuncParams: {field: 'lehrveranstaltung_id'},
- headerFilter: true
+ headerFilter: true,
+ visible: false
},
{title: this.$p.t('ui', 'bezeichnung'), field: "lv_bezeichnung", headerFilter: true, headerFilterFuncParams: {field: 'lv_bezeichnung'}},
- {title: this.$p.t('lehre', 'bezeichnungeng'), field: "lv_bezeichnung_english", headerFilter: true, headerFilterFuncParams: {field: 'lv_bezeichnung_english'}},
+ {title: this.$p.t('lehre', 'bezeichnungeng'), field: "lv_bezeichnung_english", headerFilter: true, headerFilterFuncParams: {field: 'lv_bezeichnung_english'}, visible: false},
{
title: this.$p.t('lehre', 'studiengangskennzahlLehre'),
field: "lv_studiengang_kz",
headerFilter: true,
- headerFilterFuncParams: {field: 'lv_studiengang_kz'}
+ headerFilterFuncParams: {field: 'lv_studiengang_kz'},
+ visible: false
},
- {title: this.$p.t('lehre', 'studiengang'), field: "studiengang", headerFilter: true, headerFilterFuncParams: {field: 'studiengang'}},
+ {title: this.$p.t('lehre', 'studiengang'), field: "studiengang", headerFilter: true, headerFilterFuncParams: {field: 'studiengang'}, visible: false},
{title: this.$p.t('lehre', 'semester'), field: "semester", headerFilter: true, headerFilterFuncParams: {field: 'semester'}},
- {title: this.$p.t('global', 'sprache'), field: "sprache", headerFilter: true, headerFilterFuncParams: {field: 'sprache'}},
- {title: this.$p.t('lehre', 'ects'), field: "lv_ects", headerFilter: true, headerFilterFuncParams: {field: 'lv_ects'}},
- {title: this.$p.t('lehre', 'semesterstunden'), field: "semesterstunden", headerFilter: true, headerFilterFuncParams: {field: 'semesterstunden'}},
- {title: this.$p.t('global', 'anmerkung'), field: "anmerkung", headerFilter: true, headerFilterFuncParams: {field: 'anmerkung'}},
- {title: this.$p.t('lehre', 'lehre'), field: "lehre", headerFilter: true, headerFilterFuncParams: {field: 'lehre'}},
- {title: "Lehreverzeichnis", field: "lehreverzeichnis", headerFilter: true, headerFilterFuncParams: {field: 'lehreverzeichnis'}},
- {title: this.$p.t('person', 'aktiv'), field: "aktiv", headerFilter: true, headerFilterFuncParams: {field: 'aktiv'}},
- {title: "Planfaktor", field: "planfaktor", headerFilter: true, headerFilterFuncParams: {field: 'planfaktor'}},
- {title: "Planlektoren", field: "planlektoren", headerFilter: true, headerFilterFuncParams: {field: 'planlektoren'}},
- {title: "planpersonalkosten", field: "planpersonalkosten", headerFilter: true, headerFilterFuncParams: {field: 'planpersonalkosten'}},
- {title: "plankostenprolektor", field: "plankostenprolektor", headerFilter: true, headerFilterFuncParams: {field: 'plankostenprolektor'}},
- {title: this.$p.t('ui', 'organisationsform'), field: "orgform_kurzbz", headerFilter: true, headerFilterFuncParams: {field: 'orgform_kurzbz'}},
- {title: this.$p.t('ui', 'studienplan_id'), field: "studienplan_id", headerFilter: true, headerFilterFuncParams: {field: 'studienplan_id'}},
- {title: "studienplan_bezeichnung", field: "studienplan_bezeichnung", headerFilter: true, headerFilterFuncParams: {field: 'studienplan_bezeichnung'}},
- {title: "lehrtyp_kurzbz", field: "lehrtyp_kurzbz", headerFilter: true, headerFilterFuncParams: {field: 'lehrtyp_kurzbz'}},
+ {title: this.$p.t('global', 'sprache'), field: "sprache", headerFilter: true, headerFilterFuncParams: {field: 'sprache'}, visible: false},
+ {title: this.$p.t('lehre', 'ects'), field: "lv_ects", headerFilter: true, headerFilterFuncParams: {field: 'lv_ects'}, visible: false},
+ {title: this.$p.t('lehre', 'semesterstunden'), field: "semesterstunden", headerFilter: true, headerFilterFuncParams: {field: 'semesterstunden'}, visible: false},
+ {title: this.$p.t('global', 'anmerkung'), field: "anmerkung", headerFilter: true, headerFilterFuncParams: {field: 'anmerkung'}, visible: false},
+ {title: this.$p.t('lehre', 'lehre'), field: "lehre", headerFilter: true, headerFilterFuncParams: {field: 'lehre'}, formatter: (cell) => cell.getValue() ? this.toUpperCase(this.$p.t('ui', 'ja')) : this.toUpperCase(this.$p.t('ui', 'nein')), visible: false},
+ {title: this.$p.t('person', 'aktiv'), field: "aktiv", headerFilter: true, headerFilterFuncParams: {field: 'aktiv'}, formatter: (cell) => cell.getValue() ? this.toUpperCase(this.$p.t('ui', 'ja')) : this.toUpperCase(this.$p.t('ui', 'nein')), visible: false},
+ {title: this.$p.t('lehre', 'organisationsform'), field: "orgform_kurzbz", headerFilter: true, headerFilterFuncParams: {field: 'orgform_kurzbz'}},
+ {title: this.$p.t('ui', 'studienplan_id'), field: "studienplan_id", headerFilter: true, headerFilterFuncParams: {field: 'studienplan_id'}, visible: false},
+ {title: this.$p.t('lehre', 'studienplan'), field: "studienplan_bezeichnung", headerFilter: true, headerFilterFuncParams: {field: 'studienplan_bezeichnung'}, visible: false},
+ {title: this.$p.t('lehre', 'lehrtyp'), field: "lehrtyp_kurzbz", headerFilter: true, headerFilterFuncParams: {field: 'lehrtyp_kurzbz'}, visible: false},
{title: this.$p.t('lehre', 'lehrform'), field: "lehrform_kurzbz", headerFilter: true, headerFilterFuncParams: {field: 'lehrform_kurzbz'}},
- {title: this.$p.t('lehre', 'leplanstunden'), field: "le_planstunden", headerFilter: true, headerFilterFuncParams: {field: 'le_planstunden'}},
- {title: this.$p.t('lehre', 'lehreinheit_id'), field: "lehreinheit_id", headerFilter: true, headerFilterFuncParams: {field: 'lehreinheit_id'}},
- {title: this.$p.t('lehre', 'stundenblockung'), field: "stundenblockung", headerFilter: true, headerFilterFuncParams: {field: 'stundenblockung'}},
- {title: this.$p.t('lehre', 'wochenrhytmus'), field: "wochenrythmus", headerFilter: true, headerFilterFuncParams: {field: 'wochenrythmus'}},
- {title: this.$p.t('lehre', 'startkw'), field: "startkw", headerFilter: true, headerFilterFuncParams: {field: 'startkw'}},
- {title: this.$p.t('lehre', 'raumtyp'), field: "raumtyp", headerFilter: true, headerFilterFuncParams: {field: 'raumtyp'}},
- {title: this.$p.t('lehre', 'raumtypalternativ'), field: "raumtypalternativ", headerFilter: true, headerFilterFuncParams: {field: 'raumtypalternativ'}},
+ {title: this.$p.t('lehre', 'leplanstunden'), field: "le_planstunden", headerFilter: true, headerFilterFuncParams: {field: 'le_planstunden'}, visible: false},
+ {title: this.$p.t('lehre', 'lehreinheit_id'), field: "lehreinheit_id", headerFilter: true, headerFilterFuncParams: {field: 'lehreinheit_id'}, visible: false},
+ {title: this.$p.t('lehre', 'studiensemester'), field: "studiensemester_kurzbz", headerFilter: true, headerFilterFuncParams: {field: 'studiensemester_kurzbz'}, visible: false},
+ {title: this.$p.t('lehre', 'unr'), field: "unr", headerFilter: true, headerFilterFuncParams: {field: 'unr'}, visible: false},
+ {title: this.$p.t('lehre', 'fachbereich'), field: "fachbereich", headerFilter: true, headerFilterFuncParams: {field: 'fachbereich'}, visible: false},
+ {title: this.$p.t('lehre', 'stundenblockung'), field: "stundenblockung", headerFilter: true, headerFilterFuncParams: {field: 'stundenblockung'}, visible: false},
+ {title: this.$p.t('lehre', 'wochenrhythmus'), field: "wochenrythmus", headerFilter: true, headerFilterFuncParams: {field: 'wochenrythmus'}, visible: false},
+ {title: this.$p.t('lehre', 'startkw'), field: "start_kw", headerFilter: true, headerFilterFuncParams: {field: 'startkw'}, visible: false},
+ {title: this.$p.t('lehre', 'raumtyp'), field: "raumtyp", headerFilter: true, headerFilterFuncParams: {field: 'raumtyp'}, visible: false},
+ {title: this.$p.t('lehre', 'raumtypalternativ'), field: "raumtypalternativ", headerFilter: true, headerFilterFuncParams: {field: 'raumtypalternativ'}, visible: false},
{title: this.$p.t('lehre', 'gruppen'), field: "gruppen", headerFilter: true, headerFilterFuncParams: {field: 'gruppen'}},
{title: this.$p.t('lehre', 'lehrende'), field: "lektoren", headerFilter: true, headerFilterFuncParams: {field: 'lektoren'}},
],
@@ -359,6 +367,11 @@ export default {
shouldAutoLoad() {
return this.filter && this.filter.activeFilter;
},
+ toUpperCase(str) {
+ if (!str)
+ return '';
+ return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
+ },
async reload()
{
@@ -369,7 +382,7 @@ export default {
},
rowSelectionChanged(data) {
this.selectedRows = this.$refs.table.tabulator.getSelectedRows();
- this.selectedColumnValues = this.selectedRows.filter(row => row.getData().lehreinheit_id !== undefined).map(row => row.getData().lehreinheit_id);
+ this.selectedColumnValues = this.selectedRows.filter(row => row.getData().lehreinheit_id !== undefined && row.getData().lehreinheit_id).map(row => row.getData().lehreinheit_id);
if (data[0]?.lehreinheit_id !== undefined && this.selectedColumnValues.length === 1)
{
@@ -471,9 +484,7 @@ export default {
if (Array.isArray(addedTag.response))
{
addedTag.response.forEach(tag => {
-
- const all = this.getAllRows(table.getRows());
- const targetRow = all.find(row => row.getData().lehreinheit_id === tag.lehreinheit_id);
+ const targetRow = this.allRows.find(row => row.getData().lehreinheit_id === tag.lehreinheit_id);
if (targetRow)
{
const rowData = targetRow.getData();
@@ -496,10 +507,7 @@ export default {
});
},
deletedTag(deletedTag) {
- const table = this.$refs.table.tabulator;
- const all = this.getAllRows(table.getRows());
-
- const targetRow = all.find(row => {
+ const targetRow = this.allRows.find(row => {
const rowData = row.getData();
let tags = [];
@@ -532,10 +540,7 @@ export default {
},
updatedTag(updatedTag) {
- const table = this.$refs.table.tabulator;
- const all = this.getAllRows(table.getRows());
-
- const targetRow = all.find(row => {
+ const targetRow = this.allRows.find(row => {
const rowData = row.getData();
let tags = [];
@@ -587,9 +592,8 @@ export default {
async getExpandedRows() {
this.expanded = [];
- let rows = this.$refs.table.tabulator.getRows();
- let allRows = this.getAllRows(rows);
- allRows.forEach(row => {
+
+ this.allRows.forEach(row => {
if (row.getTreeChildren().length > 0 && row.isTreeExpanded())
{
this.expanded.push(row.getData().uniqueindex);
@@ -597,9 +601,9 @@ export default {
});
},
reexpandRows() {
- const all = this.getAllRows(this.$refs.table.tabulator.getRows());
+ this.allRows = this.getAllRows(this.$refs.table.tabulator.getRows());
- const matchingRows = all.filter(row =>
+ const matchingRows = this.allRows.filter(row =>
this.expanded.includes(row.getData().uniqueindex)
);
@@ -637,6 +641,39 @@ export default {
});
return result;
},
+ resetTree() {
+ this.allRows.forEach(row => {
+ row._row.modules.dataTree.open = false;
+ });
+
+ let rootRows = this.$refs.table.tabulator.getRows(true);
+ var lastRow = rootRows[rootRows.length - 1];
+ lastRow.treeCollapse(true)
+
+ this.currentTreeLevel = 0;
+ },
+ expandTree()
+ {
+ this.currentTreeLevel = (this.currentTreeLevel || 0) + 1;
+
+ let lastMatchingRow = null;
+
+ this.allRows.forEach(row => {
+ const level = row._row.modules.dataTree?.index ?? 0;
+
+ if (level === this.currentTreeLevel - 1 )
+ {
+ row._row.modules.dataTree.open = true;
+ lastMatchingRow = row;
+ }
+ });
+
+ if (lastMatchingRow)
+ {
+ lastMatchingRow.treeExpand();
+ }
+ this.$refs.table.tabulator.redraw();
+ },
},
template: `
+
+
diff --git a/public/js/components/LVVerwaltung/Tabs/Notiz.js b/public/js/components/LVVerwaltung/Tabs/Notiz.js
index 6bccf5c52..7ec1a3dfe 100644
--- a/public/js/components/LVVerwaltung/Tabs/Notiz.js
+++ b/public/js/components/LVVerwaltung/Tabs/Notiz.js
@@ -19,7 +19,7 @@ export default {
class="overflow-hidden"
:endpoint="endpoint"
ref="formc"
- notiz-layout="twoColumnsFormLeft"
+ notiz-layout="popupModal"
type-id="lehreinheit_id"
:id="modelValue.lehreinheit_id"
show-document
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index c158e3971..d54efe32c 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -39744,6 +39744,48 @@ array(
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'lehre',
+ 'phrase' => 'fachbereich',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Institut',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Institute',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'lehre',
+ 'phrase' => 'lehrtyp',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Lehrtyp',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Teaching type',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+
+
// ### STUDIENGANG_INFORMATIONEN PHRASEN START
array(
'app' => 'core',