From 9d341cc04570cf2308d5f63e59cb1bc29d7318c1 Mon Sep 17 00:00:00 2001 From: ma0068 Date: Mon, 14 Jul 2025 10:23:05 +0200 Subject: [PATCH] getFunction for Student: restrict select attributes for person, update mitarbeiter model --- .../api/frontend/v1/stv/Student.php | 14 +- .../models/ressource/Mitarbeiter_model.php | 191 ++++++++++++++---- 2 files changed, 170 insertions(+), 35 deletions(-) diff --git a/application/controllers/api/frontend/v1/stv/Student.php b/application/controllers/api/frontend/v1/stv/Student.php index ce2e2df8d..10b972a45 100644 --- a/application/controllers/api/frontend/v1/stv/Student.php +++ b/application/controllers/api/frontend/v1/stv/Student.php @@ -74,7 +74,19 @@ class Student extends FHCAPI_Controller $this->load->model('crm/Prestudent_model', 'PrestudentModel'); - $this->PrestudentModel->addSelect('p.*'); + $this->PrestudentModel->addSelect('p.person_id'); + $this->PrestudentModel->addSelect('p.titelpre'); + $this->PrestudentModel->addSelect('p.nachname'); + $this->PrestudentModel->addSelect('p.vorname'); + $this->PrestudentModel->addSelect('p.wahlname'); + $this->PrestudentModel->addSelect('p.vornamen'); + $this->PrestudentModel->addSelect('p.titelpost'); + $this->PrestudentModel->addSelect('p.svnr'); + $this->PrestudentModel->addSelect('p.ersatzkennzeichen'); + $this->PrestudentModel->addSelect('p.gebdatum'); + $this->PrestudentModel->addSelect('p.geschlecht'); + $this->PrestudentModel->addSelect('p.foto'); + $this->PrestudentModel->addSelect('p.foto_sperre'); $this->PrestudentModel->addSelect('s.student_uid'); $this->PrestudentModel->addSelect('matrikelnr'); $this->PrestudentModel->addSelect('b.aktiv'); diff --git a/application/models/ressource/Mitarbeiter_model.php b/application/models/ressource/Mitarbeiter_model.php index 2b652c65b..bf4672070 100644 --- a/application/models/ressource/Mitarbeiter_model.php +++ b/application/models/ressource/Mitarbeiter_model.php @@ -12,34 +12,34 @@ class Mitarbeiter_model extends DB_Model $this->pk = 'mitarbeiter_uid'; } - /** - * Checks if the user is a Mitarbeiter. - * @param string $uid - * @param boolean null $fixangestellt - * @return array - */ - public function isMitarbeiter($uid, $fixangestellt = null) - { - $this->addSelect('1'); + /** + * Checks if the user is a Mitarbeiter. + * @param string $uid + * @param boolean null $fixangestellt + * @return array + */ + public function isMitarbeiter($uid, $fixangestellt = null) + { + $this->addSelect('1'); - if (is_bool($fixangestellt)) - { - $result = $this->loadWhere(array('mitarbeiter_uid' => $uid, 'fixangestellt' => $fixangestellt)); - } - else // default - { - $result = $this->loadWhere(array('mitarbeiter_uid' => $uid)); - } + if (is_bool($fixangestellt)) + { + $result = $this->loadWhere(array('mitarbeiter_uid' => $uid, 'fixangestellt' => $fixangestellt)); + } + else // default + { + $result = $this->loadWhere(array('mitarbeiter_uid' => $uid)); + } - if(hasData($result)) - { - return success(true); - } - else - { - return success(false); - } - } + if(hasData($result)) + { + return success(true); + } + else + { + return success(false); + } + } /** * Laedt das Personal @@ -98,6 +98,129 @@ class Mitarbeiter_model extends DB_Model return $this->execQuery($qry, $params); } + /** + * gibt Personen mit Übersicht von Vertragsdaten aus + * + * @return array + */ + public function getPersonenWithContractDetails($person_id = null) + { + $qry = " + SELECT + b.uid , p.person_id, + p.vorname, p.nachname, + gebdatum, + COALESCE(b.alias, b.uid) AS email, + STRING_AGG(DISTINCT va.bezeichnung, ', ') AS Vertragsarten, + STRING_AGG(DISTINCT u.bezeichnung, ', ') AS Unternehmen, + STRING_AGG(d.dienstverhaeltnis_id::TEXT, ', ') AS ids, + b.aktiv + FROM + hr.tbl_dienstverhaeltnis d + JOIN + public.tbl_benutzer b ON d.mitarbeiter_uid = b.uid + JOIN + public.tbl_person p ON p.person_id = b.person_id + JOIN + public.tbl_organisationseinheit u ON d.oe_kurzbz = u.oe_kurzbz + JOIN + hr.tbl_vertragsart va ON d.vertragsart_kurzbz = va.vertragsart_kurzbz + "; + + if($person_id) + { + $qry .= " WHERE p.person_id = ?"; + } + + $qry.= " + GROUP BY + b.uid, p.person_id, p.vorname, p.nachname, b.alias + ORDER BY + p.nachname, p.vorname; + "; + + $params = array($person_id); + + return $this->execQuery($qry, $params); + } + + /** + * get current disciplinary Abteilung of person + * + * @param $person_id + * + * @return Array benutzerfunktionsdata + */ + public function getPersonAbteilung($uid) + { + $qry = " + SELECT + bf.benutzerfunktion_id, bf.fachbereich_kurzbz, bf.uid, bf.funktion_kurzbz, bf.updateamum, + bf.updatevon, bf.insertamum, bf.insertvon, bf.ext_id, bf.semester, bf.oe_kurzbz, + bf.datum_von, bf.datum_bis, bf.bezeichnung, bf.wochenstunden, + oe.oe_kurzbz, oe.oe_parent_kurzbz, oe.bezeichnung, + oe.organisationseinheittyp_kurzbz, oe.aktiv, oe.mailverteiler, + oe.freigabegrenze, oe.kurzzeichen, oe.lehre, oe.standort, + oe.warn_semesterstunden_frei, oe.warn_semesterstunden_fix, oe.standort_id + FROM tbl_benutzerfunktion bf + JOIN public.tbl_organisationseinheit oe USING(oe_kurzbz) + WHERE uid = ? + AND funktion_kurzbz = 'oezuordnung' + AND datum_von <= NOW() + AND (datum_bis IS NULL OR datum_bis >= NOW()) + "; + $result = $this->execQuery($qry, [$uid]); + + return $result; + } + + /** + * get Leitung / Vorgesetzten of current OE + * + * @param $oe_kurzbz + * + * @return Array persondata / benutzerfunktionsdata + */ + public function getLeitungOrg($oe_kurzbz) + { + $qry = " + SELECT bf.benutzerfunktion_id,bf.fachbereich_kurzbz,bf.uid,bf.funktion_kurzbz, + bf.updateamum,bf.updatevon,bf.insertamum,bf.insertvon,bf.ext_id,bf.semester, + bf.oe_kurzbz,bf.datum_von,bf.datum_bis,bf.bezeichnung,bf.wochenstunden, + p.person_id, p.vorname,p.nachname,p.titelpre,p.titelpost + FROM public.tbl_benutzerfunktion bf JOIN public.tbl_organisationseinheit oe USING(oe_kurzbz) + JOIN public.tbl_benutzer b USING (uid) JOIN public.tbl_mitarbeiter ma ON(b.uid=ma.mitarbeiter_uid) + JOIN public.tbl_person p USING(person_id) + WHERE funktion_kurzbz='Leitung' AND oe.oe_kurzbz = ? + AND datum_von<=now() AND (datum_bis is null OR datum_bis>=now()); + "; + + return $this->execQuery($qry, array($oe_kurzbz)); + } + + /** + * get persondata for person_id + * + * @param $oe_kurzbz + * + * @return Array persondata + */ + public function getHeader($person_id) + { + $qry = " + SELECT + titelpre, vorname, nachname, titelpost, foto, foto_sperre, person_id, alias, telefonklappe + FROM + public.tbl_person + JOIN public.tbl_benutzer b USING(person_id) + JOIN public.tbl_mitarbeiter ma ON (ma.mitarbeiter_uid = b.uid) + WHERE + person_id = ? + "; + + return $this->execQuery($qry, array($person_id)); + } + /** * Gibt ein Array mit den UIDs der Vorgesetzten zurück * @return object @@ -213,7 +336,7 @@ class Mitarbeiter_model extends DB_Model if (hasData($kurzbzexists) && getData($kurzbzexists)[0]) return error('No Kurzbezeichnung could be generated'); - + return success($kurzbz); } @@ -240,13 +363,13 @@ class Mitarbeiter_model extends DB_Model $qry = " SELECT " . $returnwert . " FROM - public.tbl_mitarbeiter ma + public.tbl_mitarbeiter ma JOIN - public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid) + public.tbl_benutzer b on (ma.mitarbeiter_uid = b.uid) JOIN - public.tbl_person p on (p.person_id = b.person_id) + public.tbl_person p on (p.person_id = b.person_id) WHERE - lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%' + lower (p.nachname) LIKE '%". $this->db->escape_like_str($filter)."%' OR lower (p.vorname) LIKE '%". $this->db->escape_like_str($filter)."%' OR @@ -264,11 +387,11 @@ class Mitarbeiter_model extends DB_Model public function getMitarbeiterFromLV($lehrveranstaltung_id) { $qry = "SELECT DISTINCT - lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid + lehrveranstaltung_id, uid, vorname, wahlname, vornamen, nachname, titelpre, titelpost, kurzbz, mitarbeiter_uid FROM - lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit + lehre.tbl_lehreinheitmitarbeiter, campus.vw_mitarbeiter, lehre.tbl_lehreinheit WHERE - lehrveranstaltung_id= ? + lehrveranstaltung_id= ? AND mitarbeiter_uid=uid AND