Merge branch 'master' into feature-63468/Studierendenverwaltung_Neuanlage_von_Interessenten_ueberarbeiten

This commit is contained in:
Harald Bamberger
2025-12-09 11:37:57 +01:00
178 changed files with 10355 additions and 2477 deletions
+116
View File
@@ -1,5 +1,7 @@
<?php
use CI3_Events as Events;
class Prestudent_model extends DB_Model
{
/**
@@ -782,4 +784,118 @@ class Prestudent_model extends DB_Model
return $this->execQuery($query, array($person_id));
}
/**
* Adds a filter to the query builder
*
* @param array $filter
* @return boolean
*/
public function addFilter($filter)
{
if (!isset($filter['type']))
return false;
switch ($filter['type']) {
case 'konto':
$bt = '';
$stdsem = '';
$comp = '!=';
if (isset($filter['buchungstyp_kurzbz']) && $filter['buchungstyp_kurzbz'] != 'all')
$bt = ' AND buchungstyp_kurzbz=' . $this->escape($filter['buchungstyp_kurzbz']);
if (isset($filter['studiensemester_kurzbz']))
$stdsem = ' AND studiensemester_kurzbz=' . $this->escape($filter['studiensemester_kurzbz']);
if (isset($filter['missing']) && $filter['missing']) {
$comp = '=';
$this->db->where('get_rolle_prestudent(tbl_prestudent.prestudent_id, NULL) !=', 'Incoming');
}
$this->db->where('(
SELECT count(*)
FROM public.tbl_konto
WHERE person_id=tbl_prestudent.person_id
' . $bt . '
' . $stdsem . '
) ' . $comp, 0);
break;
case 'konto_counter':
$bt = '';
$samestg = '';
$past = '';
if (isset($filter['buchungstyp_kurzbz']) && $filter['buchungstyp_kurzbz'] != 'all')
$bt = ' AND buchungstyp_kurzbz = ' . $this->escape($filter['buchungstyp_kurzbz']);
if (isset($filter['samestg']) && $filter['samestg'])
$samestg = ' AND studiengang_kz = tbl_prestudent.studiengang_kz';
if (isset($filter['past']) && $filter['past'])
$past = ' AND buchungsdatum < NOW()';
$this->db->where('(
SELECT sum(betrag)
FROM public.tbl_konto
WHERE person_id = tbl_prestudent.person_id
' . $bt . '
' . $samestg . '
' . $past . '
) !=', 0);
break;
case 'zgv':
$this->db
->group_start()
->group_start()
->where('zgv_code IS NOT NULL')
->where('zgvdatum IS NULL')
->group_end()
->or_group_start()
->where('zgvmas_code IS NOT NULL')
->where('zgvmadatum IS NULL')
->group_end()
->or_group_start()
->where('zgvdoktor_code IS NOT NULL')
->where('zgvdoktordatum IS NULL')
->group_end()
->group_end();
break;
case 'documents':
$this->db->where('(
SELECT count(*)
FROM public.tbl_dokumentstudiengang
WHERE dokument_kurzbz NOT IN (
SELECT dokument_kurzbz
FROM tbl_dokumentprestudent
WHERE prestudent_id=tbl_prestudent.prestudent_id
)
AND studiengang_kz=tbl_prestudent.studiengang_kz
) !=', 0);
break;
case 'statusgrund':
if (!isset($filter['statusgrund_id']))
return false;
if (isset($filter['studiensemester_kurzbz']))
$stdsem = ' AND studiensemester_kurzbz=' . $this->escape($filter['studiensemester_kurzbz']);
$this->db->where('(
SELECT count(*)
FROM public.tbl_prestudentstatus
WHERE prestudent_id = tbl_prestudent.prestudent_id
AND statusgrund_id = ' . $this->escape($filter['statusgrund_id']) . '
' . $stdsem . '
) !=', 0);
break;
}
Events::trigger('prestudent_add_filter', $filter);
return true;
}
}
@@ -651,7 +651,13 @@ EOSQL;
ELSE NULL
END
END,
' '
' '
ORDER BY
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), ''),
COALESCE(tbl_lehreinheitgruppe.gruppe_kurzbz, '')
) AS gruppen
FROM lehre.tbl_lehreinheitgruppe
LEFT JOIN public.tbl_studiengang USING (studiengang_kz)
@@ -374,7 +374,7 @@ class Lehreinheitgruppe_model extends DB_Model
return success('Group assigned successfully to Lehreinheit');
}
else
return error('Group already assigned');
return error($this->p->t('lehre', 'grpbereitszugeteilt'));
}
public function deleteGroup($lehreinheit_id, $lehreinheitgruppe_id)
@@ -401,7 +401,7 @@ class Lehreinheitgruppe_model extends DB_Model
$stundenplan_result = $this->loadWhere(array('tbl_lehreinheitgruppe.lehreinheitgruppe_id' => $lehreinheitgruppe_id));
if (hasData($stundenplan_result))
return error('Gruppe already verplant');
return error($this->p->t('lehre', 'grpbereitsverplant'));
$delete_result = $this->delete($lehreinheitgruppe_id);
@@ -63,6 +63,7 @@ class Profil_update_model extends DB_Model
$this->addSelect(["public.tbl_profil_update.*", "public.tbl_person.vorname"]);
$this->addJoin("public.tbl_benutzer", "public.tbl_benutzer.uid = public.tbl_profil_update.uid");
$this->addJoin("public.tbl_person", "public.tbl_person.person_id = public.tbl_benutzer.person_id");
$this->db->order_by('COALESCE(public.tbl_profil_update.updateamum, public.tbl_profil_update.insertamum)', 'DESC', false);
$res = $this->loadWhere($whereClause);
if (isError($res)) {
return $res;
@@ -118,13 +119,47 @@ class Profil_update_model extends DB_Model
$parameters = [];
$query = "
SELECT
profil_update_id, tbl_profil_update.uid, (tbl_person.vorname || ' ' || tbl_person.nachname) AS name , topic, requested_change, tbl_profil_update.updateamum, tbl_profil_update.updatevon, tbl_profil_update.insertamum, tbl_profil_update.insertvon, status, public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated, status_timestamp, status_message, attachment_id
profil_update_id,
tbl_profil_update.uid,
(tbl_person.vorname || ' ' || tbl_person.nachname) AS name ,
topic,
requested_change,
tbl_profil_update.updateamum,
tbl_profil_update.updatevon,
tbl_profil_update.insertamum,
tbl_profil_update.insertvon,
status,
public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] as status_translated,
status_timestamp,
status_message,
attachment_id,
UPPER(public.tbl_studiengang.typ || public.tbl_studiengang.kurzbz) AS studiengang,
COALESCE(of.orgform_kurzbz, public.tbl_studiengang.orgform_kurzbz) AS orgform,
NULL as oezuordnung
FROM public.tbl_profil_update
JOIN public.tbl_profil_update_status ON public.tbl_profil_update_status.status_kurzbz = public.tbl_profil_update.status
JOIN public.tbl_student ON public.tbl_student.student_uid=public.tbl_profil_update.uid
JOIN public.tbl_benutzer ON public.tbl_benutzer.uid = public.tbl_student.student_uid
JOIN public.tbl_person ON public.tbl_benutzer.person_id=public.tbl_person.person_id
JOIN public.tbl_studiengang ON public.tbl_studiengang.studiengang_kz=public.tbl_student.studiengang_kz
LEFT JOIN (
select
pss.prestudent_id, COALESCE(sp.orgform_kurzbz, pss.orgform_kurzbz) as orgform_kurzbz
from (
select
prestudent_id, max(insertamum) as insertamum
from
public.tbl_prestudentstatus
where
datum <= NOW()
group by
prestudent_id
) mpss
join
public.tbl_prestudentstatus pss on pss.prestudent_id = mpss.prestudent_id and pss.insertamum = mpss.insertamum
left join
lehre.tbl_studienplan sp on pss.studienplan_id = sp.studienplan_id
) of ON of.prestudent_id = public.tbl_student.prestudent_id
Where public.tbl_studiengang.oe_kurzbz IN ? ";
$parameters[] = $oe_berechtigung;
if ($whereClause) {
@@ -144,12 +179,33 @@ class Profil_update_model extends DB_Model
}
}
if ($mitarbeiterBerechtigung) {
$this->addSelect(["profil_update_id", "tbl_profil_update.uid", "(tbl_person.vorname || ' ' || tbl_person.nachname) AS name", "topic", "requested_change", "tbl_profil_update.updateamum", "tbl_profil_update.updatevon", "tbl_profil_update.insertamum", "tbl_profil_update.insertvon", "status", "public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] AS status_translated", "status_timestamp", "status_message", "attachment_id"]);
$this->addSelect([
"profil_update_id",
"tbl_profil_update.uid",
"(tbl_person.vorname || ' ' || tbl_person.nachname) AS name",
"topic",
"requested_change",
"tbl_profil_update.updateamum",
"tbl_profil_update.updatevon",
"tbl_profil_update.insertamum",
"tbl_profil_update.insertvon",
"status",
"public.tbl_profil_update_status.bezeichnung_mehrsprachig[(" . $lang . ")] AS status_translated",
"status_timestamp",
"status_message",
"attachment_id",
"COALESCE(NULL) as studiengang",
"COALESCE(NULL) as orgform",
"oe.bezeichnung as oezuordnung"
]);
$this->addJoin('tbl_profil_update_status', 'tbl_profil_update_status.status_kurzbz=tbl_profil_update.status');
$this->addJoin('tbl_mitarbeiter', 'tbl_mitarbeiter.mitarbeiter_uid=tbl_profil_update.uid');
$this->addJoin('tbl_benutzer', 'tbl_benutzer.uid=tbl_profil_update.uid');
$this->addJoin('tbl_person', 'tbl_benutzer.person_id=tbl_person.person_id');
$this->addJoin('tbl_benutzerfunktion bf', 'bf.uid = tbl_benutzer.uid AND bf.funktion_kurzbz = \'oezuordnung\' AND NOW() >= COALESCE(bf.datum_von, \'1970-01-01\'::date) AND NOW() <= COALESCE(bf.datum_bis, \'2170-12-31\'::date)', 'LEFT');
$this->addJoin('tbl_organisationseinheit oe', 'oe.oe_kurzbz = bf.oe_kurzbz', 'LEFT');
$mitarbeiterRequests = $this->loadWhere($whereClause);
if (isError($mitarbeiterRequests))
return error("db error: " . getData($mitarbeiterRequests));
$mitarbeiterRequests = getData($mitarbeiterRequests) ?: [];
@@ -179,8 +235,11 @@ class Profil_update_model extends DB_Model
private function formatProfilRequest($request)
{
$request->requested_change = json_decode($request->requested_change);
$request->insertamum_iso = !is_null($request->insertamum) ? date_create($request->insertamum)->format('Y-m-d') : null;
$request->insertamum = !is_null($request->insertamum) ? date_create($request->insertamum)->format('d.m.Y') : null;
$request->updateamum_iso = !is_null($request->updateamum) ? date_create($request->updateamum)->format('Y-m-d') : null;
$request->updateamum = !is_null($request->updateamum) ? date_create($request->updateamum)->format('d.m.Y') : null;
$request->status_timestamp_iso = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('Y-m-d') : null;
$request->status_timestamp = !is_null($request->status_timestamp) ? date_create($request->status_timestamp)->format('d.m.Y') : null;
}
@@ -353,12 +353,14 @@ class Mitarbeiter_model extends DB_Model
{
$filter = strtoLower($filter);
$returnwert = "p.person_id, p.nachname, p.vorname, p.titelpost, p.titelpre";
if ($mode == "mitAkadGrad")
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
elseif ($mode == "ohneMaUid")
$returnwert = "p.person_id, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
$returnwert .= ", CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
else
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
$returnwert .= ", ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
$qry = "
SELECT " . $returnwert . "
@@ -373,7 +375,11 @@ class Mitarbeiter_model extends DB_Model
OR
lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%'
OR
(ma.mitarbeiter_uid) LIKE '%". $this->db->escape_like_str($filter)."%'";
(ma.mitarbeiter_uid) LIKE '%". $this->db->escape_like_str($filter)."%'
OR
lower(vorname || ' ' || nachname || ' ' || vorname) like ".$this->db->escape('%'.mb_strtolower($filter).'%')."
ORDER BY
p.nachname, p.vorname, b.uid, p.person_id";
return $this->execQuery($qry);
}
@@ -254,22 +254,16 @@ EOSQL;
return $dvs;
}
public function existsDienstverhaeltnis($mitarbeiter_uid, $start, $ende = null, $vertragsart_kurzbz = null)
public function existsDienstverhaeltnis($mitarbeiter_uid, $start, $ende, $vertragsart_kurzbz)
{
$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('vertragsart_kurzbz', $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->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();