mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-22 17:32:18 +00:00
Merge branch 'feature-60973/komponente_fuer_lehrfaecherverteilung' into deploy_22_09_25_lvverwaltung
# Conflicts: # system/dbupdate_3.4.php # system/phrasesupdate.php
This commit is contained in:
@@ -384,6 +384,60 @@ class Vertrag_model extends DB_Model
|
||||
}
|
||||
}
|
||||
|
||||
public function getVertrag($mitarbeiter_uid, $lehreinheit_id)
|
||||
{
|
||||
$this->addSelect('tbl_lehreinheitmitarbeiter.*, tbl_vertrag.*, status.bezeichnung as vertragsstatus, status.vertragsstatus_kurzbz');
|
||||
$this->addJoin('lehre.tbl_lehreinheitmitarbeiter', 'vertrag_id');
|
||||
$this->addJoin('lehre.tbl_vertragstyp', 'vertragstyp_kurzbz', 'LEFT');
|
||||
$this->addJoin('
|
||||
(
|
||||
SELECT DISTINCT ON(vertrag_id) vertrag_id,
|
||||
bezeichnung,
|
||||
tbl_vertragsstatus.vertragsstatus_kurzbz
|
||||
FROM lehre.tbl_vertrag_vertragsstatus
|
||||
JOIN lehre.tbl_vertragsstatus USING(vertragsstatus_kurzbz)
|
||||
ORDER BY vertrag_id, datum DESC
|
||||
) as status', 'status.vertrag_id = lehre.tbl_vertrag.vertrag_id', 'LEFT');
|
||||
|
||||
return $this->loadWhere(array('mitarbeiter_uid' => $mitarbeiter_uid, 'lehreinheit_id' => $lehreinheit_id));
|
||||
}
|
||||
|
||||
public function cancelVertrag($vertrag_id, $mitarbeiter_uid)
|
||||
{
|
||||
$vertrag = $this->load($vertrag_id);
|
||||
|
||||
if (!hasData($vertrag))
|
||||
return error("Contract not found");
|
||||
|
||||
$vertrag = getData($vertrag)[0];
|
||||
|
||||
$this->_updateVertragRelevant($vertrag->vertrag_id);
|
||||
|
||||
return $this->VertragvertragsstatusModel->insert(array(
|
||||
'vertrag_id' => $vertrag->vertrag_id,
|
||||
'vertragsstatus_kurzbz' => 'storno',
|
||||
'uid' => $mitarbeiter_uid,
|
||||
'datum' => 'NOW()',
|
||||
'insertamum' => 'NOW()',
|
||||
'insertvon' => getAuthUID()
|
||||
));
|
||||
}
|
||||
|
||||
public function deleteVertrag($vertrag_id)
|
||||
{
|
||||
$vertrag = $this->load($vertrag_id);
|
||||
|
||||
if (!hasData($vertrag))
|
||||
return error("Contract not found");
|
||||
|
||||
$vertrag = getData($vertrag)[0];
|
||||
|
||||
$this->_updateVertragRelevant($vertrag->vertrag_id);
|
||||
|
||||
$this->VertragvertragsstatusModel->delete(array('vertrag_id' => $vertrag->vertrag_id));
|
||||
return $this->delete(array('vertrag_id' => $vertrag->vertrag_id));
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
// Private methods
|
||||
|
||||
@@ -415,4 +469,20 @@ class Vertrag_model extends DB_Model
|
||||
|
||||
return $bezeichnung;
|
||||
}
|
||||
|
||||
private function _updateVertragRelevant($vertrag_id)
|
||||
{
|
||||
$this->LehreinheitmitarbeiterModel->update(
|
||||
array("vertrag_id" => $vertrag_id),
|
||||
array(
|
||||
'vertrag_id' => null
|
||||
)
|
||||
);
|
||||
$this->ProjektbetreuerModel->update(
|
||||
array("vertrag_id" => $vertrag_id),
|
||||
array(
|
||||
'vertrag_id' => null
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
<?php
|
||||
|
||||
use \CI3_Events as Events;
|
||||
class Lehreinheit_model extends DB_Model
|
||||
{
|
||||
|
||||
@@ -15,6 +17,9 @@ class Lehreinheit_model extends DB_Model
|
||||
$this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||
$this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel');
|
||||
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
||||
$this->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||
$this->load->model('ressource/stundenplan_model', 'StundenplanModel');
|
||||
$this->load->model('system/Log_model', 'LogModel');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -308,4 +313,424 @@ EOSQL;
|
||||
|
||||
return $this->execQuery($query, $params);
|
||||
}
|
||||
|
||||
|
||||
public function getOes($lehreinheit_id)
|
||||
{
|
||||
$this->addSelect('tbl_lehrveranstaltung.studiengang_kz,
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id');
|
||||
$this->addJoin('lehre.tbl_lehrveranstaltung', 'tbl_lehrveranstaltung.lehrveranstaltung_id = tbl_lehreinheit.lehrveranstaltung_id');
|
||||
$result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
|
||||
if (isError($result)) return $result;
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$lehrveranstaltung = getData($result)[0];
|
||||
$oe_result = $this->LehrveranstaltungModel->getAllOe($lehrveranstaltung->lehrveranstaltung_id);
|
||||
return success(hasData($oe_result) ? array_column(getData($oe_result), 'oe_kurzbz') : array(''));
|
||||
}
|
||||
}
|
||||
|
||||
public function getLehrfachOe($lehreinheit_id)
|
||||
{
|
||||
$this->addSelect('lehrfach.oe_kurzbz');
|
||||
$this->addJoin('lehre.tbl_lehrveranstaltung lehrfach', 'lehrfach.lehrveranstaltung_id = tbl_lehreinheit.lehrfach_id', 'LEFT');
|
||||
return $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
}
|
||||
|
||||
|
||||
public function getByLvidStudiensemester($lv_id, $studiensemester_kurzbz, $mitarbeiter_uid = null, $fachbereich_kurzbz = null)
|
||||
{
|
||||
$qry = "WITH lehreinheiten AS (
|
||||
SELECT *
|
||||
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
|
||||
";
|
||||
|
||||
$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 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 = ?";
|
||||
|
||||
if (!is_null($stg_kz)) {
|
||||
$qry .= " AND lv_studiengang_kz = ?";
|
||||
}
|
||||
|
||||
return $qry;
|
||||
}
|
||||
|
||||
public function getLvsByEmployee($mitarbeiter_uid, $studiensemester_kurzbz, $stg_kz = null)
|
||||
{
|
||||
$qry = "WITH lvs AS (" . $this->getLVTmp($stg_kz) . ")
|
||||
SELECT lvs.*
|
||||
FROM lvs
|
||||
";
|
||||
|
||||
$params = array($mitarbeiter_uid, $studiensemester_kurzbz);
|
||||
if (!is_null($stg_kz))
|
||||
{
|
||||
$params[] = $stg_kz;
|
||||
}
|
||||
return $this->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function deleteLehreinheit($lehreinheit_id)
|
||||
{
|
||||
$lehreinheit = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
|
||||
if (isError($lehreinheit)) return $lehreinheit;
|
||||
|
||||
if (!hasData($lehreinheit))
|
||||
return error("Lehreinheit not found!");
|
||||
|
||||
$errorReasons = [];
|
||||
$addError = function ($reason = null) use (&$errorReasons)
|
||||
{
|
||||
if ($reason !== null)
|
||||
{
|
||||
$errorReasons[] = $reason;
|
||||
}
|
||||
};
|
||||
|
||||
$stundenplandev_result = $this->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
$stundenplan_result = $this->StundenplanModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
|
||||
if (hasData($stundenplan_result) || hasData($stundenplandev_result))
|
||||
$addError('Dieser LV-Teil ist bereits im LV-Plan verplant und kann daher nicht geloescht werden!');
|
||||
|
||||
Events::trigger(
|
||||
'lehreinheit_delete_check',
|
||||
$addError,
|
||||
$lehreinheit_id
|
||||
);
|
||||
|
||||
if (!empty($errorReasons)) return error($errorReasons);
|
||||
|
||||
$this->db->trans_begin();
|
||||
|
||||
Events::trigger(
|
||||
'lehreinheit_delete',
|
||||
$addError,
|
||||
$lehreinheit_id
|
||||
);
|
||||
|
||||
$undosql = '';
|
||||
|
||||
$lehreinheit_gruppe_result = $this->LehreinheitgruppeModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
if (hasData($lehreinheit_gruppe_result))
|
||||
{
|
||||
foreach (getData($lehreinheit_gruppe_result) as $row)
|
||||
{
|
||||
$values = [
|
||||
$this->db->escape($row->lehreinheitgruppe_id),
|
||||
$this->db->escape($row->lehreinheit_id),
|
||||
$this->db->escape($row->studiengang_kz),
|
||||
$this->db->escape($row->semester),
|
||||
$this->db->escape($row->verband),
|
||||
$this->db->escape($row->gruppe),
|
||||
$this->db->escape($row->gruppe_kurzbz),
|
||||
$this->db->escape($row->updateamum),
|
||||
$this->db->escape($row->updatevon),
|
||||
$this->db->escape($row->insertamum),
|
||||
$this->db->escape($row->insertvon)
|
||||
];
|
||||
|
||||
$undosql .= "INSERT INTO lehre.tbl_lehreinheitgruppe (
|
||||
lehreinheitgruppe_id,
|
||||
lehreinheit_id,
|
||||
studiengang_kz,
|
||||
semester,
|
||||
verband,
|
||||
gruppe,
|
||||
gruppe_kurzbz,
|
||||
updateamum,
|
||||
updatevon,
|
||||
insertamum,
|
||||
insertvon
|
||||
) VALUES (" . implode(', ', $values) . ");\n";
|
||||
}
|
||||
|
||||
$lehreinheit_gruppe_delete_result = $this->LehreinheitgruppeModel->delete(array('lehreinheit_id' => $lehreinheit_id));
|
||||
|
||||
if (isError($lehreinheit_gruppe_delete_result))
|
||||
$addError(getError($lehreinheit_gruppe_delete_result));
|
||||
}
|
||||
|
||||
$lehreinheit_mitarbeiter_result = $this->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
if (hasData($lehreinheit_mitarbeiter_result))
|
||||
{
|
||||
foreach (getData($lehreinheit_mitarbeiter_result) as $row)
|
||||
{
|
||||
$values = [
|
||||
$this->db->escape($row->lehreinheit_id),
|
||||
$this->db->escape($row->mitarbeiter_uid),
|
||||
$this->db->escape($row->lehrfunktion_kurzbz),
|
||||
$this->db->escape($row->planstunden),
|
||||
$this->db->escape($row->stundensatz),
|
||||
$this->db->escape($row->faktor),
|
||||
$this->db->escape($row->anmerkung),
|
||||
$this->db->escape($row->bismelden),
|
||||
$this->db->escape($row->updateamum),
|
||||
$this->db->escape($row->updatevon),
|
||||
$this->db->escape($row->insertamum),
|
||||
$this->db->escape($row->insertvon),
|
||||
$this->db->escape($row->semesterstunden)
|
||||
];
|
||||
|
||||
$undosql .= "INSERT INTO lehre.tbl_lehreinheitmitarbeiter (
|
||||
lehreinheit_id,
|
||||
mitarbeiter_uid,
|
||||
lehrfunktion_kurzbz,
|
||||
planstunden,
|
||||
stundensatz,
|
||||
faktor,
|
||||
anmerkung,
|
||||
bismelden,
|
||||
updateamum,
|
||||
updatevon,
|
||||
insertamum,
|
||||
insertvon,
|
||||
semesterstunden
|
||||
) VALUES (" . implode(', ', $values) . ");\n";
|
||||
}
|
||||
|
||||
$lehreinheit_mitarbeiter_delete_result = $this->LehreinheitmitarbeiterModel->delete(array('lehreinheit_id' => $lehreinheit_id));
|
||||
if (isError($lehreinheit_mitarbeiter_delete_result))
|
||||
$addError(getError($lehreinheit_mitarbeiter_delete_result));
|
||||
}
|
||||
|
||||
foreach (getData($lehreinheit) as $row)
|
||||
{
|
||||
$values = [
|
||||
$this->db->escape($row->lehreinheit_id),
|
||||
$this->db->escape($row->lehrveranstaltung_id),
|
||||
$this->db->escape($row->studiensemester_kurzbz),
|
||||
$this->db->escape($row->lehrfach_id),
|
||||
$this->db->escape($row->lehrform_kurzbz),
|
||||
$this->db->escape($row->stundenblockung),
|
||||
$this->db->escape($row->wochenrythmus),
|
||||
$this->db->escape($row->start_kw),
|
||||
$this->db->escape($row->raumtyp),
|
||||
$this->db->escape($row->raumtypalternativ),
|
||||
$this->db->escape($row->sprache),
|
||||
$this->db->escape($row->lehre),
|
||||
$this->db->escape($row->anmerkung),
|
||||
$this->db->escape($row->unr),
|
||||
$this->db->escape($row->lvnr),
|
||||
$this->db->escape($row->updateamum),
|
||||
$this->db->escape($row->updatevon),
|
||||
$this->db->escape($row->insertamum),
|
||||
$this->db->escape($row->insertvon),
|
||||
];
|
||||
|
||||
$undosql .= "INSERT INTO lehre.tbl_lehreinheit (
|
||||
lehreinheit_id,
|
||||
lehrveranstaltung_id,
|
||||
studiensemester_kurzbz,
|
||||
lehrfach_id,
|
||||
lehrform_kurzbz,
|
||||
stundenblockung,
|
||||
wochenrythmus,
|
||||
start_kw,
|
||||
raumtyp,
|
||||
raumtypalternativ,
|
||||
sprache,
|
||||
lehre,
|
||||
anmerkung,
|
||||
unr,
|
||||
lvnr,
|
||||
updateamum,
|
||||
updatevon,
|
||||
insertamum,
|
||||
insertvon
|
||||
) VALUES (" . implode(', ', $values) . ");\n";
|
||||
}
|
||||
$lehreinheit_result = $this->delete($lehreinheit_id);
|
||||
|
||||
$deleteSql = "DELETE FROM lehre.tbl_lehreinheitmitarbeiter WHERE lehreinheit_id = " . $this->db->escape($lehreinheit_id) ."; \n
|
||||
DELETE FROM lehre.tbl_lehreinheitgruppe WHERE lehreinheit_id = " . $this->db->escape($lehreinheit_id) ."; \n
|
||||
DELETE FROM lehre.tbl_lehreinheit WHERE lehreinheit_id = " . $this->db->escape($lehreinheit_id) .";";
|
||||
if (isError($lehreinheit_result))
|
||||
$addError($lehreinheit_result);
|
||||
|
||||
$log_result = $this->LogModel->insert([
|
||||
'sql' => $deleteSql,
|
||||
'sqlundo' => $undosql,
|
||||
'beschreibung' => 'Lehreinheit loeschen - ' . $lehreinheit_id,
|
||||
'mitarbeiter_uid' => getAuthUID(),
|
||||
]);
|
||||
|
||||
if (isError($log_result))
|
||||
$addError($log_result);
|
||||
|
||||
if (!empty($errorReasons))
|
||||
{
|
||||
$this->db->trans_rollback();
|
||||
return error($errorReasons);
|
||||
}
|
||||
|
||||
$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_person.vorname, ' ') AS vorname,
|
||||
STRING_AGG(tbl_person.nachname, ' ') AS nachname,
|
||||
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)
|
||||
JOIN public.tbl_benutzer ON mitarbeiter_uid = uid
|
||||
JOIN public.tbl_person ON tbl_benutzer.person_id = tbl_person.person_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()
|
||||
{
|
||||
$this->load->config('lvverwaltung');
|
||||
$tags = $this->config->item('tags');
|
||||
|
||||
$whereTags = '';
|
||||
if (is_array($tags) && !isEmptyArray($tags))
|
||||
{
|
||||
$tags = array_keys($tags);
|
||||
|
||||
foreach ($tags as $key => $tag)
|
||||
{
|
||||
$tags[$key] = $this->db->escape($tag);
|
||||
}
|
||||
|
||||
$whereTags = " AND tbl_notiz_typ.typ_kurzbz IN (" . implode(",", $tags) . ")";
|
||||
}
|
||||
|
||||
return "tag_data_agg AS (
|
||||
SELECT
|
||||
lehreinheit_id,
|
||||
COALESCE(json_agg(tag ORDER BY done), '[]'::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)"
|
||||
. $whereTags.
|
||||
") AS tag
|
||||
GROUP BY lehreinheit_id
|
||||
)";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ class Lehreinheitgruppe_model extends DB_Model
|
||||
$this->load->model('organisation/studiengang_model', 'StudiengangModel');
|
||||
$this->load->model('organisation/gruppe_model', 'GruppeModel');
|
||||
$this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel');
|
||||
$this->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,7 +24,15 @@ class Lehreinheitgruppe_model extends DB_Model
|
||||
*/
|
||||
public function getDirectGroup($lehreinheit_id)
|
||||
{
|
||||
$this->addSelect('tbl_lehreinheitgruppe.*');
|
||||
$this->addSelect('tbl_gruppe.*');
|
||||
$this->addSelect('uid');
|
||||
$this->addSelect('vorname');
|
||||
$this->addSelect('nachname');
|
||||
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz');
|
||||
$this->addJoin('public.tbl_benutzergruppe', 'gruppe_kurzbz', 'LEFT');
|
||||
$this->addJoin('public.tbl_benutzer', 'uid', 'LEFT');
|
||||
$this->addJoin('public.tbl_person', 'person_id', 'LEFT');
|
||||
return $this->loadWhere(
|
||||
array(
|
||||
'tbl_gruppe.direktinskription' => true,
|
||||
@@ -264,4 +273,209 @@ class Lehreinheitgruppe_model extends DB_Model
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function addGroup($lehreinheit_id, $gid, $verband)
|
||||
{
|
||||
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||
|
||||
if (!hasData($lehreinheit))
|
||||
return error ('No Lehreinheit found!');
|
||||
|
||||
if ($verband === false)
|
||||
{
|
||||
$gruppen_result = $this->GruppeModel->loadWhere(array('gid' => $gid));
|
||||
|
||||
if (!hasData($gruppen_result))
|
||||
return error('No group found for gid ' . $gid);
|
||||
|
||||
$gruppen_array = getData($gruppen_result)[0];
|
||||
|
||||
if (!isEmptyString($gruppen_array->gruppe_kurzbz))
|
||||
{
|
||||
$this->db->where('trim(gruppe_kurzbz)', $gruppen_array->gruppe_kurzbz);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where("trim(gruppe_kurzbz) = ''");
|
||||
$this->db->or_where("gruppe_kurzbz IS NULL");
|
||||
$this->db->group_end();
|
||||
}
|
||||
}
|
||||
else if ($verband === true)
|
||||
{
|
||||
$gruppen_result = $this->LehrverbandModel->loadWhere(array('gid' => $gid));
|
||||
|
||||
if (!hasData($gruppen_result))
|
||||
return error('No group found for gid ' . $gid);
|
||||
|
||||
$gruppen_array = getData($gruppen_result)[0];
|
||||
|
||||
if (!isEmptyString($gruppen_array->verband))
|
||||
{
|
||||
$this->db->where('verband', $gruppen_array->verband);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where("trim(verband) = ''");
|
||||
$this->db->or_where("verband IS NULL");
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
if (!isEmptyString($gruppen_array->gruppe))
|
||||
{
|
||||
$this->db->where('gruppe', $gruppen_array->gruppe);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where("trim(gruppe) = ''");
|
||||
$this->db->or_where("gruppe IS NULL");
|
||||
$this->db->group_end();
|
||||
}
|
||||
}
|
||||
else
|
||||
return error('Wrong type of verband');
|
||||
|
||||
$this->db->where('lehreinheit_id', $lehreinheit_id);
|
||||
$this->db->where('studiengang_kz', $gruppen_array->studiengang_kz);
|
||||
|
||||
if (!isEmptyString($gruppen_array->semester))
|
||||
{
|
||||
$this->db->where('semester', $gruppen_array->semester);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where("semester = ''");
|
||||
$this->db->or_where("semester IS NULL");
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
$exist_result = $this->load();
|
||||
|
||||
if (!hasData($exist_result))
|
||||
{
|
||||
$new_group_result = $this->insert(array(
|
||||
'lehreinheit_id' => $lehreinheit_id,
|
||||
'studiengang_kz' => $gruppen_array->studiengang_kz,
|
||||
'gruppe_kurzbz' => isset($gruppen_array->gruppe_kurzbz) ? $gruppen_array->gruppe_kurzbz : null,
|
||||
'semester' => $gruppen_array->semester,
|
||||
'verband' => isset($gruppen_array->verband) && !isEmptyString($gruppen_array->verband) ? $gruppen_array->verband : null,
|
||||
'gruppe' => isset($gruppen_array->gruppe) && !isEmptyString($gruppen_array->gruppe) ? $gruppen_array->gruppe : null,
|
||||
'insertamum' => date('Y-m-d H:i:s'),
|
||||
'insertvon' => getAuthUID()
|
||||
));
|
||||
|
||||
if (isError($new_group_result))
|
||||
return error('Error when adding Group');
|
||||
|
||||
return success('Group assigned successfully to Lehreinheit');
|
||||
}
|
||||
else
|
||||
return error('Group already assigned');
|
||||
}
|
||||
|
||||
public function deleteGroup($lehreinheit_id, $lehreinheitgruppe_id)
|
||||
{
|
||||
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||
|
||||
if (!hasData($lehreinheit))
|
||||
return error ('No Lehreinheit found!');
|
||||
|
||||
$lehreinheitgruppe = $this->load($lehreinheitgruppe_id);
|
||||
|
||||
if (!hasData($lehreinheitgruppe))
|
||||
return error ('No Lehreinheitgruppe found!');
|
||||
|
||||
$this->addSelect('stundenplandev_id');
|
||||
$this->addJoin('lehre.tbl_stundenplandev',
|
||||
"tbl_stundenplandev.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||
AND tbl_stundenplandev.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_stundenplandev.semester = tbl_lehreinheitgruppe.semester
|
||||
AND trim(COALESCE(tbl_stundenplandev.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
|
||||
AND trim(COALESCE(tbl_stundenplandev.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
|
||||
AND trim(COALESCE(tbl_stundenplandev.gruppe_kurzbz, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, ''))"
|
||||
);
|
||||
$stundenplan_result = $this->loadWhere(array('tbl_lehreinheitgruppe.lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||
|
||||
if (hasData($stundenplan_result))
|
||||
return error('Gruppe already verplant');
|
||||
|
||||
$delete_result = $this->delete($lehreinheitgruppe_id);
|
||||
|
||||
if (isError($delete_result))
|
||||
return error('Error deleting Group');
|
||||
|
||||
return success('Group deleted');
|
||||
}
|
||||
|
||||
public function getByLehreinheit($lehreinheit_id)
|
||||
{
|
||||
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||
|
||||
if (!hasData($lehreinheit))
|
||||
return error ('No Lehreinheit found!');
|
||||
|
||||
$this->addSelect('tbl_lehreinheitgruppe.*');
|
||||
$this->addSelect('tbl_gruppe.direktinskription');
|
||||
$this->addSelect('tbl_gruppe.gruppe_kurzbz');
|
||||
$this->addSelect("CASE
|
||||
WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
|
||||
COALESCE (
|
||||
UPPER(tbl_studiengang.typ || tbl_studiengang.kurzbz) ||
|
||||
COALESCE(tbl_lehreinheitgruppe.semester::varchar, '') ||
|
||||
COALESCE(tbl_lehreinheitgruppe.verband::varchar, '') ||
|
||||
COALESCE(tbl_lehreinheitgruppe.gruppe, ''),
|
||||
'')
|
||||
ELSE tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||
END AS bezeichnung");
|
||||
$this->addSelect("CASE
|
||||
WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
|
||||
(
|
||||
SELECT bezeichnung
|
||||
FROM public.tbl_lehrverband
|
||||
WHERE studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND semester = tbl_lehreinheitgruppe.semester
|
||||
AND verband = tbl_lehreinheitgruppe.verband
|
||||
AND gruppe = tbl_lehreinheitgruppe.gruppe
|
||||
LIMIT 1
|
||||
)
|
||||
ELSE tbl_gruppe.beschreibung
|
||||
END AS beschreibung");
|
||||
$this->addSelect("CASE
|
||||
WHEN tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL THEN
|
||||
(
|
||||
SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_stundenplandev
|
||||
WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||
AND studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND semester = tbl_lehreinheitgruppe.semester
|
||||
AND TRIM(COALESCE(verband, '')) = TRIM(tbl_lehreinheitgruppe.verband)
|
||||
AND TRIM(COALESCE(gruppe, '')) = TRIM(tbl_lehreinheitgruppe.gruppe)
|
||||
AND (gruppe_kurzbz IS NULL OR gruppe_kurzbz = '')
|
||||
)
|
||||
)
|
||||
ELSE
|
||||
(
|
||||
SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM lehre.tbl_stundenplandev
|
||||
WHERE lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||
AND gruppe_kurzbz = tbl_lehreinheitgruppe.gruppe_kurzbz
|
||||
)
|
||||
)
|
||||
END AS verplant");
|
||||
$this->addJoin('tbl_studiengang', 'studiengang_kz', 'LEFT');
|
||||
$this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz', 'LEFT');
|
||||
|
||||
$this->db->where('lehreinheit_id', $lehreinheit_id);
|
||||
$this->db->group_start()
|
||||
->where('tbl_gruppe.direktinskription !=', true)
|
||||
->or_where('tbl_gruppe.direktinskription IS NULL')
|
||||
->group_end();
|
||||
return $this->load();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,14 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_lehreinheitmitarbeiter';
|
||||
$this->pk = array('mitarbeiter_uid', 'lehreinheit_id');
|
||||
$this->hasSequence = false;
|
||||
|
||||
$this->load->model('accounting/Vertrag_model', 'VertragModel');
|
||||
$this->load->model('ressource/stundenplandev_model', 'StundenplandevModel');
|
||||
$this->load->model('ressource/stundenplan_model', 'StundenplanModel');
|
||||
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
|
||||
$this->load->model('organisation/Organisationseinheit_model', 'OrganisationseinheitModel');
|
||||
$this->load->model('ressource/mitarbeiter_model', 'MitarbeiterModel');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -75,4 +83,67 @@ class Lehreinheitmitarbeiter_model extends DB_Model
|
||||
]);
|
||||
}
|
||||
|
||||
public function getLektorenByLe($lehreinheit_id)
|
||||
{
|
||||
$this->addSelect('vorname, nachname, tbl_lehreinheitmitarbeiter.*, stundenplan.verplant');
|
||||
$this->addJoin('tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||
$this->addJoin('tbl_person', 'person_id');
|
||||
|
||||
$this->addJoin('(
|
||||
SELECT 1 as verplant, lehreinheit_id, mitarbeiter_uid
|
||||
FROM lehre.tbl_stundenplandev
|
||||
GROUP BY lehreinheit_id, mitarbeiter_uid
|
||||
|
||||
) stundenplan', 'stundenplan.mitarbeiter_uid = tbl_lehreinheitmitarbeiter.mitarbeiter_uid AND stundenplan.lehreinheit_id = tbl_lehreinheitmitarbeiter.lehreinheit_id', 'LEFT');
|
||||
|
||||
return $this->loadWhere(array('tbl_lehreinheitmitarbeiter.lehreinheit_id' => $lehreinheit_id));
|
||||
}
|
||||
|
||||
public function getByLeLektor($lehreinheit_id, $mitarbeiter_uid)
|
||||
{
|
||||
$this->addSelect('vorname, nachname, tbl_lehreinheitmitarbeiter.*');
|
||||
$this->addJoin('tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||
$this->addJoin('tbl_person', 'person_id');
|
||||
return $this->loadWhere(array('tbl_lehreinheitmitarbeiter.lehreinheit_id' => $lehreinheit_id, 'tbl_lehreinheitmitarbeiter.mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
}
|
||||
|
||||
public function deleteLektorFromLe($lehreinheit_id, $mitarbeiter_uid)
|
||||
{
|
||||
if (defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') && FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN)
|
||||
{
|
||||
$vertrag_result = $this->VertragModel->getVertrag($mitarbeiter_uid, $lehreinheit_id);
|
||||
|
||||
if (hasData($vertrag_result))
|
||||
return error("Loeschen nur nach Stornierung des Vertrags möglich");
|
||||
}
|
||||
|
||||
$stundenplandev_result = $this->StundenplandevModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
$stundenplan_result = $this->StundenplanModel->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
|
||||
if (hasData($stundenplandev_result) || hasData($stundenplan_result))
|
||||
return error("Diese/r LektorIn kann nicht gelöscht werden da er schon verplant ist");
|
||||
|
||||
$result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
|
||||
if (hasData($result))
|
||||
{
|
||||
$le_mitarbeiter_array = getData($result)[0];
|
||||
|
||||
if ($le_mitarbeiter_array->vertrag_id !== null)
|
||||
{
|
||||
$vertrag_result = $this->VertragModel->deleteVertrag($le_mitarbeiter_array->vertrag_id);
|
||||
if (isError($vertrag_result))
|
||||
return $vertrag_result;
|
||||
}
|
||||
|
||||
$delete_result = $this->delete(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
|
||||
if (isError($delete_result))
|
||||
return $delete_result;
|
||||
|
||||
return success($delete_result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1019,4 +1019,240 @@ class Lehrveranstaltung_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function getLvsByOrganization($oe_kurzbz)
|
||||
{
|
||||
$qry="
|
||||
SELECT
|
||||
distinct on (lehrveranstaltung_id)
|
||||
tbl_lehrveranstaltung.studiengang_kz as lv_studiengang_kz, tbl_lehrveranstaltung.semester as lv_semester,
|
||||
tbl_lehrveranstaltung.kurzbz as lv_kurzbz, tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung, tbl_lehrveranstaltung.ects as lv_ects,
|
||||
tbl_lehrveranstaltung.lehreverzeichnis as lv_lehreverzeichnis, tbl_lehrveranstaltung.planfaktor as lv_planfaktor,
|
||||
tbl_lehrveranstaltung.planlektoren as lv_planlektoren, tbl_lehrveranstaltung.planpersonalkosten as lv_planpersonalkosten,
|
||||
tbl_lehrveranstaltung.plankostenprolektor as lv_plankostenprolektor, tbl_lehrveranstaltung.orgform_kurzbz as lv_orgform_kurzbz,
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english,
|
||||
tbl_lehrveranstaltung.studiengang_kz, tbl_lehrveranstaltung.semester, tbl_lehrveranstaltung.anmerkung, tbl_lehrveranstaltung.sprache, tbl_lehrveranstaltung.semesterstunden,
|
||||
tbl_lehrveranstaltung.lehre, tbl_lehrveranstaltung.aktiv,
|
||||
'' as studienplan_id, '' as studienplan_bezeichnung, tbl_lehrveranstaltung.lehrtyp_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.oe_kurzbz= ?
|
||||
AND tbl_lehrveranstaltung.aktiv
|
||||
";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
||||
}
|
||||
|
||||
public function getLvsByFachbereich($fachbereich, $studiensemester_kurbz, $mitarbeiter_uid = null)
|
||||
{
|
||||
$qry = "";
|
||||
if (!is_null($mitarbeiter_uid))
|
||||
{
|
||||
$qry = $this->getLvsFromStudienplanByEmp();
|
||||
$params = array($fachbereich, $studiensemester_kurbz);
|
||||
}
|
||||
|
||||
$qry .= "SELECT
|
||||
distinct on(lehrveranstaltung_id)
|
||||
lv_studiengang_kz, lv_semester, lv_kurzbz, lv_bezeichnung, lv_ects,
|
||||
lv_lehreverzeichnis, lv_planfaktor, lv_planlektoren, lv_planpersonalkosten,
|
||||
lv_plankostenprolektor, lv_orgform_kurzbz, lehrveranstaltung_id,
|
||||
lehrform_kurzbz, lv_lehrform_kurzbz, lv_bezeichnung_english, studiengang_kz, semester, anmerkung, sprache, semesterstunden,
|
||||
lehre, aktiv,
|
||||
'' as studienplan_id, '' as studienplan_bezeichnung,
|
||||
(SELECT lehrtyp_kurzbz FROM lehre.tbl_lehrveranstaltung WHERE lehrveranstaltung_id=vw_lehreinheit.lehrveranstaltung_id) as lehrtyp_kurzbz
|
||||
FROM
|
||||
campus.vw_lehreinheit
|
||||
WHERE studiensemester_kurzbz = ?
|
||||
AND fachbereich_kurzbz = ?";
|
||||
|
||||
$params[] = array($studiensemester_kurbz, $fachbereich);
|
||||
|
||||
if (!is_null($mitarbeiter_uid))
|
||||
{
|
||||
$qry .= " AND mitarbeiter_uid = ?";
|
||||
$params[] = $mitarbeiter_uid;
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry.=" AND lehrveranstaltung_id NOT IN (SELECT lehrveranstaltung_id
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester USING(studienplan_id)
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.oe_kurzbz=(Select oe_kurzbz from public.tbl_fachbereich where fachbereich_kurzbz= ?)
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz= ?";
|
||||
|
||||
$params[] = array($fachbereich, $studiensemester_kurbz);
|
||||
}
|
||||
|
||||
return $this->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
|
||||
private function getLvsFromStudienplanByEmp()
|
||||
{
|
||||
return "
|
||||
SELECT
|
||||
distinct on (lehrveranstaltung_id)
|
||||
tbl_lehrveranstaltung.studiengang_kz as lv_studiengang_kz,
|
||||
tbl_lehrveranstaltung.semester as lv_semester,
|
||||
tbl_lehrveranstaltung.kurzbz as lv_kurzbz,
|
||||
tbl_lehrveranstaltung.bezeichnung as lv_bezeichnung,
|
||||
tbl_lehrveranstaltung.ects as lv_ects,
|
||||
tbl_lehrveranstaltung.lehreverzeichnis as lv_lehreverzeichnis,
|
||||
tbl_lehrveranstaltung.planfaktor as lv_planfaktor,
|
||||
tbl_lehrveranstaltung.planlektoren as lv_planlektoren,
|
||||
tbl_lehrveranstaltung.planpersonalkosten as lv_planpersonalkosten,
|
||||
tbl_lehrveranstaltung.plankostenprolektor as lv_plankostenprolektor,
|
||||
tbl_lehrveranstaltung.orgform_kurzbz as lv_orgform_kurzbz,
|
||||
tbl_lehrveranstaltung.lehrveranstaltung_id,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.bezeichnung_english as lv_bezeichnung_english,
|
||||
tbl_lehrveranstaltung.studiengang_kz,
|
||||
tbl_studienplan_lehrveranstaltung.semester,
|
||||
tbl_lehrveranstaltung.anmerkung,
|
||||
tbl_lehrveranstaltung.sprache,
|
||||
tbl_lehrveranstaltung.semesterstunden,
|
||||
tbl_lehrveranstaltung.lehre,
|
||||
tbl_lehrveranstaltung.aktiv,
|
||||
tbl_studienplan.studienplan_id::text,
|
||||
tbl_studienplan.bezeichnung as studienplan_bezeichnung,
|
||||
tbl_lehrveranstaltung.lehrtyp_kurzbz
|
||||
FROM
|
||||
lehre.tbl_lehrveranstaltung
|
||||
JOIN lehre.tbl_studienplan_lehrveranstaltung USING(lehrveranstaltung_id)
|
||||
JOIN lehre.tbl_studienplan USING(studienplan_id)
|
||||
JOIN lehre.tbl_studienordnung USING(studienordnung_id)
|
||||
JOIN lehre.tbl_studienplan_semester USING(studienplan_id)
|
||||
WHERE
|
||||
tbl_lehrveranstaltung.oe_kurzbz=(Select oe_kurzbz from public.tbl_fachbereich where fachbereich_kurzbz= ?)
|
||||
AND tbl_studienplan_semester.studiensemester_kurzbz = ?
|
||||
AND tbl_lehrveranstaltung.aktiv
|
||||
UNION
|
||||
";
|
||||
}
|
||||
|
||||
public function getLvsByStudiengang($studienplan_ids, $placeholders, $only_ids, $studiengang_kz, $studiensemester_kurzbz, $semester = null, $verband = null)
|
||||
{
|
||||
$qry = "";
|
||||
$params = array();
|
||||
|
||||
if (!empty($studienplan_ids))
|
||||
{
|
||||
$qry = $this->getLvsFromStudienplanByStudienplanID($placeholders);
|
||||
$params = $studienplan_ids;
|
||||
}
|
||||
|
||||
$qry .= "
|
||||
SELECT DISTINCT on(lehrveranstaltung_id) lehrveranstaltung_id,
|
||||
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,
|
||||
ects as lv_ects,
|
||||
semesterstunden,
|
||||
tbl_lehrveranstaltung.anmerkung,
|
||||
tbl_lehrveranstaltung.lehre,
|
||||
lehreverzeichnis as lv_lehreverzeichnis,
|
||||
tbl_lehrveranstaltung.aktiv,
|
||||
planfaktor as lv_planfaktor,
|
||||
planlektoren as lv_planlektoren,
|
||||
planpersonalkosten as lv_planpersonalkosten,
|
||||
plankostenprolektor as lv_plankostenprolektor,
|
||||
tbl_lehrveranstaltung.lehrform_kurzbz as lv_lehrform_kurzbz,
|
||||
tbl_lehrveranstaltung.orgform_kurzbz,
|
||||
''::text as studienplan_id,
|
||||
'' as studienplan_bezeichnung,
|
||||
'' as studienplan_lehrveranstaltung_id_parent,
|
||||
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 = ?
|
||||
";
|
||||
|
||||
$params[] = $studiengang_kz;
|
||||
$params[] = $studiensemester_kurzbz;
|
||||
if (!is_null($semester))
|
||||
{
|
||||
$qry .= ' AND semester = ?';
|
||||
$params[] = $semester;
|
||||
}
|
||||
if (!is_null($verband))
|
||||
{
|
||||
$qry .= ' AND (tbl_lehrveranstaltung.orgform_kurzbz = ? OR tbl_lehrveranstaltung.orgform_kurzbz IS NULL)';
|
||||
$params[] = $verband;
|
||||
}
|
||||
|
||||
if (!empty($only_ids))
|
||||
{
|
||||
|
||||
$qry .= ' AND NOT EXISTS (SELECT 1 FROM lehre.tbl_studienplan_lehrveranstaltung where studienplan_id IN ?
|
||||
AND lehrveranstaltung_id = tbl_lehrveranstaltung.lehrveranstaltung_id AND tbl_lehrveranstaltung.aktiv)';
|
||||
|
||||
$params[] = $only_ids;
|
||||
}
|
||||
|
||||
return $this->execReadOnlyQuery($qry, $params);
|
||||
}
|
||||
private function getLvsFromStudienplanByStudienplanID($placeholders)
|
||||
{
|
||||
return "
|
||||
SELECT
|
||||
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, 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
|
||||
";
|
||||
}
|
||||
|
||||
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 = ?
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,4 +213,34 @@ class Organisationseinheit_model extends DB_Model
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ermittelt die Stundenobergrenze fuer Lektoren
|
||||
* Dabei wird im OE Baum nach oben nach Stundengrenzen gesucht und die niedrigste Stundengrenze ermittelt
|
||||
* @param $oe_kurzbz Organisationseinheit
|
||||
* @param $fixangestellt boolean legt fest ob die Grenze
|
||||
* fuer Freie oder Fixangestellte Lektoren ermittelt werden soll
|
||||
|
||||
*/
|
||||
public function getStundengrenze($oe_kurzbz, $fixangestellt = true)
|
||||
{
|
||||
$fixfrei = $fixangestellt ? 'fix' : 'frei';
|
||||
|
||||
$qry = "
|
||||
WITH RECURSIVE oes(oe_kurzbz, oe_parent_kurzbz) as
|
||||
(
|
||||
SELECT oe_kurzbz, oe_parent_kurzbz FROM public.tbl_organisationseinheit
|
||||
WHERE oe_kurzbz= ?
|
||||
UNION ALL
|
||||
SELECT o.oe_kurzbz, o.oe_parent_kurzbz FROM public.tbl_organisationseinheit o, oes
|
||||
WHERE o.oe_kurzbz=oes.oe_parent_kurzbz
|
||||
)
|
||||
SELECT oe_kurzbz, warn_semesterstunden_{$fixfrei} AS stunden
|
||||
FROM oes
|
||||
JOIN public.tbl_organisationseinheit USING (oe_kurzbz)
|
||||
ORDER BY warn_semesterstunden_{$fixfrei} ASC
|
||||
LIMIT 1";
|
||||
|
||||
return $this->execReadOnlyQuery($qry, array($oe_kurzbz));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,8 @@ class Studienplan_model extends DB_Model
|
||||
));
|
||||
}
|
||||
|
||||
// Deprecated
|
||||
// im Lehrveranstaltung_model vorhanden
|
||||
public function getAllOesForLv($lehrveranstaltung_id)
|
||||
{
|
||||
$this->addDistinct('oe_kurzbz');
|
||||
@@ -135,6 +137,27 @@ class Studienplan_model extends DB_Model
|
||||
]);
|
||||
}
|
||||
|
||||
public function loadStudienplanLehrveranstaltung($lv_id)
|
||||
{
|
||||
$qry = "SELECT studienplan_lehrveranstaltung_id,
|
||||
semester,
|
||||
pflicht,
|
||||
studienplan_id,
|
||||
koordinator,
|
||||
studienplan_lehrveranstaltung_id_parent,
|
||||
lehrveranstaltung_id,
|
||||
insertamum,
|
||||
insertvon,
|
||||
updateamum,
|
||||
updatevon,
|
||||
sort,
|
||||
curriculum,
|
||||
export
|
||||
FROM lehre.tbl_studienplan_lehrveranstaltung WHERE studienplan_lehrveranstaltung_id = ? ";
|
||||
return $this->execReadOnlyQuery($qry, array($lv_id));
|
||||
}
|
||||
|
||||
|
||||
public function getStudienplaeneForPerson($person_id)
|
||||
{
|
||||
$this->addDistinct();
|
||||
|
||||
@@ -151,7 +151,7 @@ class Notiz_model extends DB_Model
|
||||
* bestellung_id, lehreinheit_id, anrechnung_id, uid)
|
||||
* @param $id the corresponding id, part of public.tbl_notizzuordnung
|
||||
*/
|
||||
public function getNotizWithDocEntries($id, $type)
|
||||
public function getNotizWithDocEntries($id, $type, $withoutTags = true)
|
||||
{
|
||||
$qry = "
|
||||
SELECT
|
||||
@@ -195,8 +195,12 @@ class Notiz_model extends DB_Model
|
||||
LEFT JOIN
|
||||
public.tbl_person person_bearbeiter ON (person_bearbeiter.person_id = p_bearbeiter.person_id)
|
||||
WHERE
|
||||
z.$type = ?
|
||||
GROUP BY
|
||||
z.$type = ?";
|
||||
|
||||
if ($withoutTags)
|
||||
$qry .= " AND n.typ IS NULL ";
|
||||
|
||||
$qry .= "GROUP BY
|
||||
notiz_id, z.notizzuordnung_id,
|
||||
person_verfasser.vorname, person_verfasser.nachname,
|
||||
person_bearbeiter.vorname, person_bearbeiter.nachname
|
||||
|
||||
@@ -430,4 +430,18 @@ class Mitarbeiter_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, $parametersArray);
|
||||
}
|
||||
|
||||
public function isLehrauftragFirma($mitarbeiter_uid)
|
||||
{
|
||||
$this->addSelect('firma_id');
|
||||
$this->addJoin('public.tbl_benutzer', 'uid = mitarbeiter_uid');
|
||||
$this->addJoin('public.tbl_person', 'person_id');
|
||||
$this->addJoin('public.tbl_adresse', 'person_id', 'LEFT');
|
||||
$this->addOrder('zustelladresse', 'DESC');
|
||||
$this->addOrder('firma_id');
|
||||
$this->addLimit(1);
|
||||
$firma_result = $this->loadWhere(array('mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
$firma = getData($firma_result)[0]->firma_id;
|
||||
return !is_null($firma);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ class Stundenplandev_model extends DB_Model
|
||||
parent::__construct();
|
||||
$this->dbTable = 'lehre.tbl_stundenplandev';
|
||||
$this->pk = 'stundenplandev_id';
|
||||
|
||||
$this->load->model('education/lehreinheit_model', 'LehreinheitModel');
|
||||
$this->load->model('education/Lehreinheitgruppe_model', 'LehreinheitgruppeModel');
|
||||
}
|
||||
|
||||
|
||||
@@ -157,4 +160,85 @@ class Stundenplandev_model extends DB_Model
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function deleteGroupPlanning($lehreinheit_id, $lehreinheitgruppe_id)
|
||||
{
|
||||
$lehreinheit = $this->LehreinheitModel->load($lehreinheit_id);
|
||||
|
||||
if (!hasData($lehreinheit))
|
||||
return error ('No Lehreinheit found!');
|
||||
|
||||
$lehreinheitgruppe = $this->LehreinheitgruppeModel->load($lehreinheitgruppe_id);
|
||||
|
||||
if (!hasData($lehreinheitgruppe))
|
||||
return error ('No Lehreinheitgruppe found!');
|
||||
|
||||
$this->addJoin('lehre.tbl_stundenplan_betriebsmittel', 'stundenplandev_id');
|
||||
$this->addJoin('lehre.tbl_lehreinheitgruppe', 'lehreinheit_id');
|
||||
$this->db->where('tbl_lehreinheitgruppe.lehreinheitgruppe_id', $lehreinheitgruppe_id);
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->group_start();
|
||||
$this->db->where('tbl_lehreinheitgruppe.gruppe_kurzbz IS NOT NULL', null, false);
|
||||
$this->db->where('tbl_lehreinheitgruppe.gruppe_kurzbz = tbl_stundenplandev.gruppe_kurzbz', null, false);
|
||||
$this->db->group_end();
|
||||
$this->db->or_group_start();
|
||||
$this->db->where('tbl_lehreinheitgruppe.gruppe_kurzbz IS NULL', null, false);
|
||||
$this->db->where('tbl_lehreinheitgruppe.studiengang_kz = tbl_stundenplandev.studiengang_kz', null, false);
|
||||
$this->db->where('tbl_lehreinheitgruppe.semester = tbl_stundenplandev.semester', null, false);
|
||||
$this->db->where('tbl_lehreinheitgruppe.verband = tbl_stundenplandev.verband', null, false);
|
||||
$this->db->where('tbl_lehreinheitgruppe.gruppe = tbl_stundenplandev.gruppe', null, false);
|
||||
$this->db->group_end();
|
||||
$this->db->group_end();
|
||||
|
||||
$betriebsmittel_result = $this->load();
|
||||
$betriebsmittel_array = hasData($betriebsmittel_result) ? getData($betriebsmittel_result) : array();
|
||||
if (sizeof($betriebsmittel_array) > 0)
|
||||
{
|
||||
return error ('Gruppe kann nicht entfernt werden da bereits Ressourcen zugeordnet wurden');
|
||||
}
|
||||
|
||||
$this->addSelect('stundenplandev_id');
|
||||
$this->addJoin('lehre.tbl_lehreinheitgruppe',
|
||||
"tbl_stundenplandev.lehreinheit_id = tbl_lehreinheitgruppe.lehreinheit_id
|
||||
AND tbl_stundenplandev.studiengang_kz = tbl_lehreinheitgruppe.studiengang_kz
|
||||
AND tbl_stundenplandev.semester = tbl_lehreinheitgruppe.semester
|
||||
AND trim(COALESCE(tbl_stundenplandev.verband, '')) = trim(COALESCE(tbl_lehreinheitgruppe.verband, ''))
|
||||
AND trim(COALESCE(tbl_stundenplandev.gruppe, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe, ''))
|
||||
AND trim(COALESCE(tbl_stundenplandev.gruppe_kurzbz, '')) = trim(COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, ''))"
|
||||
);
|
||||
$stundenplan_result = $this->loadWhere(array('tbl_lehreinheitgruppe.lehreinheitgruppe_id' => $lehreinheitgruppe_id));
|
||||
|
||||
if (hasData($stundenplan_result))
|
||||
{
|
||||
$stundenplan_ids = array_column(getData($stundenplan_result), 'stundenplandev_id');
|
||||
$this->db->where_in('stundenplandev_id', $stundenplan_ids);
|
||||
$delete_result = $this->db->delete('lehre.tbl_stundenplandev');
|
||||
|
||||
if ($delete_result)
|
||||
return success('Group deleted successfully from Stundenplandev');
|
||||
else
|
||||
return error('Error deleting Group from Stundenplandev');
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteLektorPlanning($lehreinheit_id, $mitarbeiter_uid)
|
||||
{
|
||||
//TODO (david) prüfen ob der check notwendig ist
|
||||
/*$this->addDistinct('mitarbeiter_uid');
|
||||
$this->addSelect('mitarbeiter_uid');
|
||||
$stundenplan_result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id));
|
||||
$stundenplan_array = hasData($stundenplan_result) ? (getData($stundenplan_result)) : array();
|
||||
|
||||
if (sizeof($stundenplan_array) <= 1)
|
||||
return error('Diese/r LektorIn kann nicht aus dem LVPlan entfernt werden da dies der/die letzte verplante LektorIn ist');*/
|
||||
|
||||
$this->addJoin('lehre.tbl_stundenplan_betriebsmittel', 'stundenplandev_id');
|
||||
$betriebsmittel_result = $this->loadWhere(array('lehreinheit_id' => $lehreinheit_id, 'tbl_stundenplandev.mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
$betriebsmittel_array = hasData($betriebsmittel_result) ? getData($betriebsmittel_result) : array();
|
||||
|
||||
if (sizeof($betriebsmittel_array) > 0)
|
||||
return error('Gruppe kann nicht entfernt werden da bereits Ressourcen zugeordnet wurden');
|
||||
|
||||
return $this->delete(array('lehreinheit_id' => $lehreinheit_id, 'mitarbeiter_uid' => $mitarbeiter_uid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,4 +42,20 @@ class Stundensatz_model extends DB_Model
|
||||
|
||||
return $this->execQuery($qry, $params);
|
||||
}
|
||||
|
||||
public function getDefaultStundensatz($mitarbeiter_uid, $beginn, $ende = null, $typ = null)
|
||||
{
|
||||
$stundensatz_result = $this->getStundensatzByDatum($mitarbeiter_uid, $beginn, $ende, $typ);
|
||||
$default_stundensatz = hasData($stundensatz_result) ? getData($stundensatz_result)[0]->stundensatz : null;
|
||||
if (defined('FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ') && !FAS_LV_LEKTORINNENZUTEILUNG_FIXANGESTELLT_STUNDENSATZ)
|
||||
{
|
||||
$this->load->model('vertragsbestandteil/Dienstverhaeltnis_model','DienstverhaeltnisModel');
|
||||
$echterdv_result = $this->DienstverhaeltnisModel->existsDienstverhaeltnis($mitarbeiter_uid, $beginn, $ende, 'echterdv');
|
||||
if (hasData($echterdv_result))
|
||||
{
|
||||
$default_stundensatz = null;
|
||||
}
|
||||
}
|
||||
return $default_stundensatz;
|
||||
}
|
||||
}
|
||||
@@ -253,4 +253,25 @@ EOSQL;
|
||||
}
|
||||
return $dvs;
|
||||
}
|
||||
|
||||
public function existsDienstverhaeltnis($mitarbeiter_uid, $start, $ende = null, $vertragsart_kurzbz = null)
|
||||
{
|
||||
$this->addOrder('von', 'DESC');
|
||||
$this->db->where('mitarbeiter_uid', $mitarbeiter_uid);
|
||||
if (!is_null($vertragsart_kurzbz))
|
||||
$this->db->where('vertragsart_kurzbz', $this->escape($vertragsart_kurzbz));
|
||||
|
||||
$this->db->where('von <=', $ende);
|
||||
|
||||
if (!is_null($ende))
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->where('bis >=', $start);
|
||||
$this->db->or_where('bis IS NULL', null, false);
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
$this->addLimit(1);
|
||||
return $this->load();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user