From 68dd0f3cb89a602eef8f091e7eccbcd98785a686 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 6 Mar 2019 19:03:02 +0100 Subject: [PATCH] - added method getLesForLv to education/Lehreinheit_model - added methods direktUserAdd, direktuserDelete (for direkt User Zuordnung to le) to education/Lehreinheitgruppe_model - added method getLvsByStudent to education/Lehrveranstaltung_model - Added hasSequence = false to Benutzergruppe_model - fixed typo in lehrveranstaltungDBML --- .../models/education/Lehreinheit_model.php | 67 +++++ .../education/Lehreinheitgruppe_model.php | 231 ++++++++++++++++++ .../education/Lehrveranstaltung_model.php | 36 ++- .../models/person/Benutzergruppe_model.php | 1 + content/lvplanung/lehrveranstaltungDBDML.php | 2 +- 5 files changed, 334 insertions(+), 3 deletions(-) diff --git a/application/models/education/Lehreinheit_model.php b/application/models/education/Lehreinheit_model.php index e07a5c350..8358806f2 100644 --- a/application/models/education/Lehreinheit_model.php +++ b/application/models/education/Lehreinheit_model.php @@ -10,5 +10,72 @@ class Lehreinheit_model extends DB_Model parent::__construct(); $this->dbTable = 'lehre.tbl_lehreinheit'; $this->pk = 'lehreinheit_id'; + + $this->load->model('education/lehrveranstaltung_model', 'LehrveranstaltungModel'); + $this->load->model('education/lehreinheitgruppe_model', 'LehreinheitgruppeModel'); + $this->load->model('education/lehreinheitmitarbeiter_model', 'LehreinheitmitarbeiterModel'); + } + + /** + * Gets Lehreinheiten for a Lehrveranstaltung in a Studiensemester. + * Includes Lehrfach, Lehreinheitgruppen and Lektoren. + * @param $lehrveranstaltung_id + * @param $studiensemester + * @return array with Lehreinheiten and their Lehreinheitgruppen + */ + public function getLesForLv($lehrveranstaltung_id, $studiensemester) + { + $lehreinheiten = array(); + + $les = $this->loadWhere( + array('lehrveranstaltung_id' => $lehrveranstaltung_id, + 'studiensemester_kurzbz' => $studiensemester) + ); + + if (hasData($les)) + { + $this->LehrveranstaltungModel->addSelect('kurzbz, bezeichnung'); + foreach ($les->retval as $le) + { + $lehrfach = $this->LehrveranstaltungModel->load($le->lehrfach_id); + if (hasData($lehrfach)) + { + $letoadd = $le; + $letoadd->lehrfach_bezeichnung = $lehrfach->retval[0]->bezeichnung; + $letoadd->lehrfach_kurzbz = $lehrfach->retval[0]->kurzbz; + + // add lehreinheitgruppen, each lehreinheitid + // having (maybe multiple) lehreinheitgruppen + $letoadd->lehreinheitgruppen = array(); + $lehreinheitgruppen = $this->LehreinheitgruppeModel->loadWhere(array('lehreinheit_id' => $le->lehreinheit_id)); + if (hasData($lehreinheitgruppen)) + { + foreach ($lehreinheitgruppen->retval as $lehreinheitgruppe) + { + $letoadd->lehreinheitgruppen[] = array( + 'semester' => $lehreinheitgruppe->semester, + 'verband' => $lehreinheitgruppe->verband, + 'gruppe' => $lehreinheitgruppe->gruppe + ); + } + } + + // add lektoren + $letoadd->lektoren = array(); + $lehreinheitmitarbeiter = $this->LehreinheitmitarbeiterModel->loadWhere(array('lehreinheit_id' => $le->lehreinheit_id)); + if (hasData($lehreinheitmitarbeiter)) + { + foreach ($lehreinheitmitarbeiter->retval as $lehreinheitma) + { + $letoadd->lektoren[] = $lehreinheitma->mitarbeiter_uid; + } + } + + $lehreinheiten[] = $letoadd; + } + } + } + + return $lehreinheiten; } } diff --git a/application/models/education/Lehreinheitgruppe_model.php b/application/models/education/Lehreinheitgruppe_model.php index 8390d41c5..178227048 100644 --- a/application/models/education/Lehreinheitgruppe_model.php +++ b/application/models/education/Lehreinheitgruppe_model.php @@ -10,8 +10,17 @@ class Lehreinheitgruppe_model extends DB_Model parent::__construct(); $this->dbTable = 'lehre.tbl_lehreinheitgruppe'; $this->pk = 'lehreinheitgruppe_id'; + $this->load->model('education/lehreinheit_model', 'LehreinheitModel'); + $this->load->model('organisation/studiengang_model', 'StudiengangModel'); + $this->load->model('organisation/gruppe_model', 'GruppeModel'); + $this->load->model('person/benutzergruppe_model', 'BenutzergruppeModel'); } + /** + * Gets group directly assigned to a Lehreinheit + * @param $lehreinheit_id + * @return array + */ public function getDirectGroup($lehreinheit_id) { $this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz'); @@ -21,4 +30,226 @@ class Lehreinheitgruppe_model extends DB_Model ) ); } + + /** + * Gets direct group assignment, consisting of lehreinheitgruppe, gruppe and benutzergruppe + * @param $uid + * @param $lehreinheit_id + * @return array + */ + public function getDirectGroupAssignment($uid, $lehreinheit_id) + { + $this->addJoin('public.tbl_gruppe', 'gruppe_kurzbz'); + $this->addJoin('public.tbl_benutzergruppe', 'gruppe_kurzbz'); + return $this->loadWhere(array( + 'tbl_gruppe.direktinskription' => true, + 'lehreinheit_id' => $lehreinheit_id, + 'tbl_benutzergruppe.uid' => $uid + ) + ); + } + + /** + * Directly assigns a user to a Lehreinheit (Lehreinheitgruppe, Benutzergruppe). + * Creates own "hidden" group if necessary. + * @param $uid of the student to assign + * @param $lehreinheit_id + * @return array error or success + */ + public function direktUserAdd($uid, $lehreinheit_id) + { + $result = success('User added successfully'); + $directgroup = $this->getDirectGroup($lehreinheit_id); + $lehreinheit = $this->LehreinheitModel->load($lehreinheit_id); + $loggedInUser = getAuthUID(); + + if (hasData($directgroup)) + { + $gruppe_kurzbz = $directgroup->retval[0]->gruppe_kurzbz; + } + else + { + // Es gibt keine direkte Gruppe zu dieser LE + // es wird eine erstellt und zugewiesen + if (hasData($lehreinheit)) + { + $lva = $this->LehrveranstaltungModel->load($lehreinheit->retval[0]->lehrveranstaltung_id); + + if (hasData($lva)) + { + $lvadata = $lva->retval[0]; + $studiengang = $this->StudiengangModel->load($lvadata->studiengang_kz); + + if (hasData($studiengang)) + { + $gruppe_kurzbz = 'GRP_'.$lehreinheit_id; + $studiengangdata = $studiengang->retval[0]; + $kuerzel = mb_strtoupper($studiengangdata->typ . $studiengangdata->kurzbz); + $bezeichnung = $kuerzel.' '.$lvadata->semester.' '.$lvadata->kurzbz; + + $gruppe = $this->GruppeModel->load($gruppe_kurzbz); + + if (!hasData($gruppe)) + { + $groupdata = array( + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiengang_kz' => $lvadata->studiengang_kz, + 'semester' => $lvadata->semester, + 'bezeichnung' => $bezeichnung, + 'aktiv' => true, + 'mailgrp' => false, + 'sichtbar' => true, + 'generiert' => false, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $loggedInUser, + 'orgform_kurzbz' => $lvadata->orgform_kurzbz, + 'direktinskription' => true + + ); + + $groupadd = $this->GruppeModel->insert($groupdata); + + if (isError($groupadd)) + return error('Error when inserting Gruppe'); + } + + $lehreinheitgruppedata = array( + 'lehreinheit_id' => $lehreinheit->retval[0]->lehreinheit_id, + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiengang_kz' => $lvadata->studiengang_kz, + 'semester' => $lvadata->semester, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $loggedInUser + ); + + $lehreinheitgruppeadd = $this->insert($lehreinheitgruppedata); + + if (isError($lehreinheitgruppeadd)) + $result = error('Error when inserting Lehreinheit'); + } + } + } + else + { + return error('No Lehreinheit found'); + } + } + + if (hasData($lehreinheit)) + { + $benutzergruppe = $this->BenutzergruppeModel->load(array('uid' => $uid, + 'gruppe_kurzbz' => $gruppe_kurzbz)); + + if (!hasData($benutzergruppe)) + { + if (isset($gruppe_kurzbz) && !isEmptyString($gruppe_kurzbz)) + { + $benutzergruppedata = array( + 'uid' => $uid, + 'gruppe_kurzbz' => $gruppe_kurzbz, + 'studiensemester_kurzbz' => $lehreinheit->retval[0]->studiensemester_kurzbz, + 'insertamum' => date('Y-m-d H:i:s'), + 'insertvon' => $loggedInUser + ); + + $benutzergruppeadd = $this->BenutzergruppeModel->insert($benutzergruppedata); + + if (isError($benutzergruppeadd)) + $result = error('Error when inserting Benutzergruppe'); + } + } + } + return $result; + } + + /** + * Deletes direct assignment of a student to a Lehreinheit + * @param $uid of the assigned student + * @param $lehreinheit_id + * @return array error or success + */ + public function direktUserDelete($uid, $lehreinheit_id) + { + $result = success('User deleted successfully'); + $directgroup = $this->getDirectGroup($lehreinheit_id); + $lehreinheit = $this->LehreinheitModel->load($lehreinheit_id); + + if (hasData($lehreinheit)) + { + if (hasData($directgroup)) + { + $gruppe_kurzbz = $directgroup->retval[0]->gruppe_kurzbz; + $deleteresp = $this->BenutzergruppeModel->delete(array('uid' => $uid, 'gruppe_kurzbz' => $gruppe_kurzbz)); + + if (hasData($deleteresp)) + { + $uids = $this->BenutzergruppeModel->load(array($gruppe_kurzbz, $lehreinheit->retval[0]->studiensemester_kurzbz)); + + if (isSuccess($uids) && !hasData($uids)) + { + // group is empty and can be deleted + + // delete from Lehreinheit + $this->delete($directgroup->retval[0]->lehreinheitgruppe_id); + + $studplandevqry = " + SELECT + * + FROM + lehre.tbl_stundenplandev + WHERE + gruppe_kurzbz=? + LIMIT 1"; + + $studplandevres = $this->execQuery($studplandevqry, array('gruppe_kurzbz' => $gruppe_kurzbz)); + if (isSuccess($studplandevres)) + { + if (hasData($studplandevres)) + { + $studplandevdelqry = " + DELETE FROM lehre.tbl_stundenplandev + WHERE gruppe_kurzbz=?"; + + $studplandevdelres = $this->execQuery($studplandevdelqry, array('gruppe_kurzbz' => $gruppe_kurzbz)); + + if (!hasData($studplandevdelres)) + $result = error('Studienplan entry could not be deleted'); + } + else + { + // delete group if not in Studienplandev. If in Studienplan, deleted next day after cronjob. + $gruppedelres = $this->GruppeModel->delete($gruppe_kurzbz); + + if (!hasData($gruppedelres)) + { + $result = error('Gruppe could not be deleted'); + } + } + } + else + { + $result = error('Error when querying Studienplan'); + } + } + else + { + $result = error('There are still users in the Benutzergruppe. Could not be deleted.'); + } + } + else + { + $result = error('Benutzergruppe could not be deleted'); + } + } + else + { + $result = error('No direct group found for Lehreinheit'); + } + } + else + { + $result = error('No Lehreinheit found'); + } + return $result; + } } diff --git a/application/models/education/Lehrveranstaltung_model.php b/application/models/education/Lehrveranstaltung_model.php index 0a76df4b9..3c4bae1e3 100644 --- a/application/models/education/Lehrveranstaltung_model.php +++ b/application/models/education/Lehrveranstaltung_model.php @@ -132,8 +132,10 @@ class Lehrveranstaltung_model extends DB_Model UPPER(tbl_studiengang.typ::varchar(1) || tbl_studiengang.kurzbz) as kuerzel, tbl_studiengang.orgform_kurzbz, vw_student_lehrveranstaltung.semester, vw_student_lehrveranstaltung.studiensemester_kurzbz, vw_student_lehrveranstaltung.bezeichnung FROM - campus.vw_student_lehrveranstaltung JOIN public.tbl_benutzer USING(uid) - JOIN public.tbl_person USING(person_id) LEFT JOIN public.tbl_student ON(uid=student_uid) + campus.vw_student_lehrveranstaltung + JOIN public.tbl_benutzer USING(uid) + JOIN public.tbl_person USING(person_id) + LEFT JOIN public.tbl_student ON(uid=student_uid) LEFT JOIN public.tbl_mitarbeiter ON(uid=mitarbeiter_uid) LEFT JOIN public.tbl_studentlehrverband USING(student_uid,studiensemester_kurzbz) LEFT JOIN lehre.tbl_zeugnisnote on(vw_student_lehrveranstaltung.lehrveranstaltung_id=tbl_zeugnisnote.lehrveranstaltung_id AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) @@ -171,4 +173,34 @@ class Lehrveranstaltung_model extends DB_Model return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz)); } + + /** + * Gets Lehrveranstaltungen of a student + * @param $student_uid + * @param null $studiensemester_kurzbz + * @return array|null + */ + public function getLvsByStudent($student_uid, $studiensemester_kurzbz = null) + { + $params = array($student_uid); + + $qry = "SELECT * FROM lehre.tbl_lehrveranstaltung + WHERE lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM campus.vw_student_lehrveranstaltung + WHERE uid=?"; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND studiensemester_kurzbz=?"; + $params[] = $studiensemester_kurzbz; + } + $qry .= ") OR lehrveranstaltung_id IN(SELECT lehrveranstaltung_id FROM lehre.tbl_zeugnisnote WHERE student_uid=?"; + $params[] = $student_uid; + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND studiensemester_kurzbz=?"; + $params[] = $studiensemester_kurzbz; + } + $qry .= ") ORDER BY semester, bezeichnung"; + + return $this->execQuery($qry, $params); + } } diff --git a/application/models/person/Benutzergruppe_model.php b/application/models/person/Benutzergruppe_model.php index ab50de9b0..e569094c4 100644 --- a/application/models/person/Benutzergruppe_model.php +++ b/application/models/person/Benutzergruppe_model.php @@ -10,5 +10,6 @@ class Benutzergruppe_model extends DB_Model parent::__construct(); $this->dbTable = 'public.tbl_benutzergruppe'; $this->pk = array('gruppe_kurzbz', 'uid'); + $this->hasSequence = false; } } diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php index 73b6137e9..899dc0e23 100644 --- a/content/lvplanung/lehrveranstaltungDBDML.php +++ b/content/lvplanung/lehrveranstaltungDBDML.php @@ -1698,7 +1698,7 @@ if(!$error) } else { - $errormsg = $benutergruppe->errormsg; + $errormsg = $benutzergruppe->errormsg; $return = false; } }