userstory 61241: bugs behoben

This commit is contained in:
ma0048
2025-07-07 08:59:36 +02:00
parent f96bfbe000
commit 5b2b715a16
11 changed files with 300 additions and 235 deletions
@@ -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))
@@ -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'));
@@ -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);
}
+127 -163
View File
@@ -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
)";
}
}
@@ -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));
}
}
@@ -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
+4 -1
View File
@@ -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';
}
color: #f3c541;
}
@@ -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 => {
@@ -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: '<i class="fa-solid fa-caret-down"></i>',
dataTreeExpandElement: '<i class="fa-solid fa-caret-right"></i>',
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: `
<core-filter-cmpt
@@ -660,6 +697,8 @@ export default {
@updated="updatedTag"
zuordnung_typ="lehreinheit_id"
></core-tag>
<button @click="expandTree" class="btn btn-outline-secondary" type="button"><i class="fa-solid fa-maximize"></i></button>
<button @click="resetTree" class="btn btn-outline-secondary" type="button"><i id="togglegroup" class="fa-solid fa-minimize"></i></button>
</template>
<template #search>
<slot name="filterzuruecksetzen"></slot>
@@ -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
+42
View File
@@ -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',