diff --git a/application/controllers/components/SearchBar.php b/application/controllers/components/SearchBar.php index 09a49e163..dd3c22690 100644 --- a/application/controllers/components/SearchBar.php +++ b/application/controllers/components/SearchBar.php @@ -17,6 +17,9 @@ class SearchBar extends FHC_Controller { parent::__construct(); + // Loads the AuthLib and starts the authentication + $this->load->library('AuthLib'); + // Load the library SearchBarLib $this->load->library('SearchBarLib'); } diff --git a/application/controllers/system/issues/IssuesKonfiguration.php b/application/controllers/system/issues/IssuesKonfiguration.php index f6b3ff556..a19a2a93b 100644 --- a/application/controllers/system/issues/IssuesKonfiguration.php +++ b/application/controllers/system/issues/IssuesKonfiguration.php @@ -18,7 +18,8 @@ class IssuesKonfiguration extends Auth_Controller 'getApps' => 'admin:r', 'getFehlerKonfigurationByApp' => 'admin:r', 'saveFehlerKonfiguration' => 'admin:rw', - 'deleteKonfiguration' => 'admin:rw' + 'deleteKonfiguration' => 'admin:rw', + 'deleteKonfigurationsWerte' => 'admin:rw' ) ); @@ -204,6 +205,73 @@ class IssuesKonfiguration extends Auth_Controller $this->outputJson($result); } + /** + * Deletes values of a Konfiguration. + */ + public function deleteKonfigurationsWerte() + { + $konfigurationstyp_kurzbz = $this->input->post('konfigurationstyp_kurzbz'); + $fehlercode = $this->input->post('fehlercode'); + $konfigurationsWert = $this->input->post('konfigurationsWert'); + + // check if Konfigurationstyp correctly passed + if (isEmptyString($konfigurationstyp_kurzbz)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'ungueltigerKonfigurationstyp')); + + // check if fehlercode correctly passed + if (isEmptyString($fehlercode)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlercodeFehlt')); + + // separate by semicolon if multiple values passed + $konfigurationsWert = explode(';', $konfigurationsWert); + + // check if konfiguration already set for the fehlercode + $this->FehlerkonfigurationModel->addSelect('konfiguration'); + $fehlerkonfigurationRes = $this->FehlerkonfigurationModel->loadWhere( + array( + 'konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, + 'fehlercode' => $fehlercode + ) + ); + + if (!hasData($fehlerkonfigurationRes)) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerFehlerKonfigurationLaden')); + + // if konfiguration exists, update values + if (hasData($fehlerkonfigurationRes)) + { + $fehlerkonfiguration = getData($fehlerkonfigurationRes); + + $existingKonf = json_decode($fehlerkonfiguration[0]->konfiguration); + + if (!$existingKonf) $this->terminateWithJsonError($this->p->t('fehlermonitoring', 'fehlerJsonDekodierung')); + + if (!is_array($existingKonf)) $existingKonf = array($existingKonf); + + $newKonfArr = array_values(array_diff($existingKonf, $konfigurationsWert)); + + // if no konfiguration values left, delete whole entry + if (isEmptyArray($newKonfArr)) + { + $this->outputJson( + $this->FehlerkonfigurationModel->delete( + array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode) + ) + ); + } + else + { + $newKonf = json_encode($newKonfArr); + if (!$newKonf) $this->terminateWithJsonError("error when encoding JSON"); + + // if there are still values, delete only part of the konfiguration + $this->outputJson( + $this->FehlerkonfigurationModel->update( + array('konfigurationstyp_kurzbz' => $konfigurationstyp_kurzbz, 'fehlercode' => $fehlercode), + array('konfiguration' => $newKonf, 'updateamum' => 'NOW()', 'updatevon' => $this->_uid) + ) + ); + } + } + } + /** * Deletes a Konfiguration. */ diff --git a/application/libraries/AuthLib.php b/application/libraries/AuthLib.php index ae30d41fa..de9c15350 100644 --- a/application/libraries/AuthLib.php +++ b/application/libraries/AuthLib.php @@ -551,10 +551,7 @@ class AuthLib // Needed information $this->_ci->PersonModel->addSelect('person_id, vorname, nachname, uid'); // Retrieves the uid if it is possible for active users - $this->_ci->PersonModel->addJoin( - '(SELECT uid, person_id FROM public.tbl_benutzer WHERE aktiv = TRUE) tb', 'person_id', - 'LEFT' - ); + $this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id', 'LEFT'); // Execute query with where clause $personResult = $this->_ci->PersonModel->loadWhere($queryParamsArray); diff --git a/application/libraries/issues/PlausicheckLib.php b/application/libraries/issues/PlausicheckLib.php deleted file mode 100644 index 9c768da02..000000000 --- a/application/libraries/issues/PlausicheckLib.php +++ /dev/null @@ -1,1627 +0,0 @@ -_ci =& get_instance(); // get ci instance - - // load models - $this->_ci->load->model('crm/Prestudent_model', 'PrestudentModel'); - $this->_ci->load->model('crm/Prestudentstatus_model', 'PrestudentstatusModel'); - $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); - - // get database for queries - $this->_db = new DB_Model(); - } - - //------------------------------------------------------------------------------------------------------------------ - // Studiengang checks - - /** - * Studiengang should be the same for prestudent and student. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - $qry = " - SELECT - pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_student stud USING(prestudent_id) - JOIN public.tbl_person pers USING(person_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz - WHERE - stud.studiengang_kz != pre.studiengang_kz"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Orgform of a Studiengang in Studienplan should be the same as orgform of student. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getOrgformStgUngleichOrgformPrestudent( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz, - studiengang.orgform_kurzbz AS stg_orgform, status.orgform_kurzbz AS student_orgform, - prestudent.studiengang_kz AS student_studiengang, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_studiengang studiengang - JOIN public.tbl_student student USING(studiengang_kz) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id) - WHERE - benutzer.aktiv = true - AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent') - AND studiengang.studiengang_kz < 10000 - AND status.studiensemester_kurzbz = ? - AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE) - AND NOT EXISTS( - SELECT 1 - FROM - lehre.tbl_studienplan - JOIN - lehre.tbl_studienordnung USING(studienordnung_id) - WHERE - tbl_studienplan.studienplan_id = stpl.studienplan_id - AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz - AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)"; - - if (isset($studiengang_kz)) - { - $qry .= " AND studiengang.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - $qry .= " - ORDER BY student_uid"; - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students in "mixed" Studiengang should have Orgform. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getPrestudentMischformOhneOrgform( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE - status.status_kurzbz IN ('Bewerber', 'Student') - AND stg.mischform - AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL) - AND status.studiensemester_kurzbz=?"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Studiengang should be the same for prestudent and studienplan. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param studienordnung_id int if check is to be executed only for a certain studienordnung_id - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getStgPrestudentUngleichStgStudienplan( - $studiengang_kz = null, - $prestudent_id = null, - $studienordnung_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id, - stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_prestudent ps - JOIN public.tbl_prestudentstatus USING(prestudent_id) - JOIN lehre.tbl_studienplan stplan USING(studienplan_id) - JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id) - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz - WHERE - ps.studiengang_kz<>stordnung.studiengang_kz - AND stg.melderelevant"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND ps.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($studienordnung_id)) - { - $qry .= " AND stordnung.studienordnung_id = ?"; - $params[] = $studienordnung_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - //------------------------------------------------------------------------------------------------------------------ - // Studentstatus checks - - /** - * Abbrecher cannot be active. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - $qry = " - SELECT - pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_prestudentstatus pre_status - JOIN public.tbl_prestudent pre USING(prestudent_id) - JOIN public.tbl_student student USING(prestudent_id) - JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - WHERE - pre_status.status_kurzbz ='Abbrecher' - AND benutzer.aktiv=true"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * There shouldn't be any status after Abbrecher status. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - $qry = " - SELECT - prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_student student - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - prestatus.status_kurzbz = 'Abbrecher' - AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getAusbildungssemPrestudentUngleichAusbildungssemStatus( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz); - - $qry = " - SELECT - DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id, - status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz, - stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_student student - JOIN public.tbl_studentlehrverband lv USING(student_uid) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - status.studiensemester_kurzbz = ? - AND lv.studiensemester_kurzbz = ? - AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher') - AND get_rolle_prestudent (prestudent_id, ?)='Student' - AND status.ausbildungssemester != lv.semester"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students with active status should have an active Benutzer. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getInaktiverStudentAktiverStatus( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt(); - - if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes; - - $studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : ''; - - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_benutzer benutzer - JOIN public.tbl_student student on(benutzer.uid = student.student_uid) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - benutzer.aktiv=false - AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?) - AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant') - AND stg.melderelevant - AND prestudent.bismelden"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students of a semester shouldn't start studies before the date of Bismeldung. - * e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020 - * e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022 - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getInskriptionVorLetzerBismeldung( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - // get Bismeldedatum - $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); - - $params = array($datumBis, $studiensemester_kurzbz, $datumBis); - - // get active students - $qry = " - SELECT - DISTINCT ON (student.student_uid) ? AS datum_bismeldung, - prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz - FROM - public.tbl_benutzer benutzer - JOIN public.tbl_student student on(benutzer.uid = student.student_uid) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - benutzer.aktiv=true - AND status.studiensemester_kurzbz = ? - /* inscription date before date of first student status */ - AND ( - SELECT datum - FROM public.tbl_prestudentstatus - WHERE prestudent_id = prestudent.prestudent_id - AND studiensemester_kurzbz = status.studiensemester_kurzbz - AND status_kurzbz = 'Student' - ORDER BY datum, insertamum, ext_id - LIMIT 1 - ) < ? - AND stg.melderelevant - AND prestudent.bismelden"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Status Dates and status studysemester dates should be in correct order. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if check is to be executed only for certain Studiengaenge - * @return success with prestudents or error - */ - public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - // all active students with Status student in current semester - $qry = " - SELECT DISTINCT ON (prestudent_id) * - FROM ( - SELECT - prestudent.person_id, prestudent.prestudent_id, - stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, - ROW_NUMBER () OVER ( - PARTITION BY prestudent.prestudent_id - ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC - ) AS reihenfolge_semester, - ROW_NUMBER () OVER ( - PARTITION BY prestudent.prestudent_id - ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC - ) AS reihenfolge_datum - FROM - public.tbl_student student - JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - benutzer.aktiv=true - AND status.status_kurzbz='Student' - ) reihenfolge - WHERE reihenfolge_semester <> reihenfolge_datum"; - - if (isset($studiengang_kz)) - { - $qry .= " AND studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students with active Benutzer should have a status in the current semester. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - $qry = " - SELECT - DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_student student - JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) - JOIN public.tbl_prestudent prestudent USING(prestudent_id) - JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz - WHERE - benutzer.aktiv=TRUE - AND stg.melderelevant - AND prestudent.bismelden - AND NOT EXISTS ( - SELECT 1 - FROM public.tbl_prestudentstatus - JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz) - WHERE prestudent_id = prestudent.prestudent_id - /* buffer of four months, as status are often entered later */ - AND sem.ende::date > NOW() - interval '4 months' - )"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Studienplan should be valid in current Ausbildungssemester of prestudent. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getStudienplanUngueltig( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - DISTINCT pre.person_id, pre.prestudent_id, - tbl_studienplan.bezeichnung AS studienplan, - status.status_kurzbz, - status.studiensemester_kurzbz, - status.ausbildungssemester, - stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_person USING(person_id) - JOIN lehre.tbl_studienplan USING(studienplan_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - WHERE - status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener') - AND NOT EXISTS ( - SELECT - 1 - FROM - lehre.tbl_studienplan_semester - WHERE - studienplan_id=status.studienplan_id - AND tbl_studienplan_semester.semester = status.ausbildungssemester - AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz - ) - AND status.studiensemester_kurzbz=? - AND pre.bismelden - AND stg.melderelevant"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND tbl_prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students with finished studies should have exactly one final exam. - * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getFalscheAnzahlAbschlusspruefungen( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT * FROM ( - SELECT - DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, - ( - SELECT COUNT(*) - FROM lehre.tbl_abschlusspruefung - WHERE student_uid = stud.student_uid - AND abschlussbeurteilung_kurzbz != 'nicht' - AND abschlussbeurteilung_kurzbz IS NOT NULL - ) AS anzahl_abschlusspruefungen - FROM - public.tbl_prestudent pre - JOIN public.tbl_student stud USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - WHERE - status_kurzbz = 'Absolvent' - AND pre.bismelden - AND stg.melderelevant - AND NOT EXISTS ( /* exclude gs */ - SELECT 1 - FROM bis.tbl_mobilitaet - WHERE prestudent_id = pre.prestudent_id - AND studiensemester_kurzbz = status.studiensemester_kurzbz - )"; - - if (isset($studiensemester_kurzbz)) - { - $qry .= " AND status.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - $qry .= ") studenten - WHERE anzahl_abschlusspruefungen != 1"; - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Date of final exam shouldn't be missing for Absolvent. - * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getDatumAbschlusspruefungFehlt( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $abschlusspruefung_id = null, - $exkludierte_studiengang_kz = null - ) { - $results = array(); - - $pruefungenRes = $this->_getInvalidAbschlusspruefungen( - $studiensemester_kurzbz, - $studiengang_kz, - $abschlusspruefung_id, - $exkludierte_studiengang_kz - ); - - if (isError($pruefungenRes)) return $pruefungenRes; - - if (hasData($pruefungenRes)) - { - $pruefungen = getData($pruefungenRes); - - foreach ($pruefungen as $pruefung) - { - if (isEmptyString($pruefung->datum)) $results[] = $pruefung; - } - } - - return success($results); - } - - /** - * Date of sponsion shouldn't be missing for Absolvent. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getDatumSponsionFehlt( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $abschlusspruefung_id = null, - $exkludierte_studiengang_kz = null - ) { - $results = array(); - - $pruefungenRes = $this->_getInvalidAbschlusspruefungen( - $studiensemester_kurzbz, - $studiengang_kz, - $abschlusspruefung_id, - $exkludierte_studiengang_kz - ); - - if (isError($pruefungenRes)) return $pruefungenRes; - - if (hasData($pruefungenRes)) - { - $pruefungen = getData($pruefungenRes); - - foreach ($pruefungen as $pruefung) - { - if (isEmptyString($pruefung->sponsion)) $results[] = $pruefung; - } - } - - return success($results); - } - - /** - * Bewerber should have participated in Reihungstest. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getBewerberNichtZumRtAngetreten( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); - - if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes; - - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz - FROM - public.tbl_prestudent prestudent - JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id) - JOIN public.tbl_person USING(person_id) - LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE - status_kurzbz='Bewerber' - AND reihungstestangetreten=false - AND stg.melderelevant - AND prestudent.bismelden"; - - if (hasData($previousStudiensemesterRes)) - { - $previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz; - $qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)"; - $params[] = $previousStudiensemester; - } - else - { - $qry .= " AND studiensemester_kurzbz=?"; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Current Ausbildungssemester shouldn't be 0. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_prestudentstatus prestat USING(prestudent_id) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE - prestat.status_kurzbz != 'Incoming' - AND prestat.studiensemester_kurzbz = ? - AND ausbildungssemester = 0 - AND stg.melderelevant - AND pre.bismelden"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Prestudent should have a final status. - * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getAbschlussstatusFehlt( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - DISTINCT ON (pre.prestudent_id) - pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE - NOT EXISTS( /*student does not study anymore*/ - SELECT - 1 - FROM - public.tbl_prestudentstatus ps - JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) - WHERE - prestudent_id=pre.prestudent_id - /* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */ - AND tbl_studiensemester.ende>now() - interval '4 months' - ) - /* check only valid begininng with 2018 */ - AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id) - AND NOT EXISTS( /* no end status */ - SELECT 1 - FROM public.tbl_prestudentstatus ps - WHERE - prestudent_id=pre.prestudent_id - AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming') - ) - AND stg.melderelevant - AND pre.bismelden"; - - if (isset($studiensemester_kurzbz)) - { - $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); - - if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; - - if (hasData($prevStudiensemesterRes)) - { - // if Studiensemester given, check only if has status in current or previous semester - $prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz; - $qry .= " AND EXISTS ( - SELECT 1 - FROM public.tbl_prestudentstatus ps - WHERE studiensemester_kurzbz IN (?, ?) - AND ps.prestudent_id = pre.prestudent_id - )"; - $params[] = $prevStudiensemester; - $params[] = $studiensemester_kurzbz; - } - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value. - * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getAktiverStudentstatusOhneKontobuchung( - $studiensemester_kurzbz, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - DISTINCT ON (pre.prestudent_id) - pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_person pers USING(person_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE - status.studiensemester_kurzbz = ? - AND status.status_kurzbz IN ('Student', 'Incoming') - AND NOT EXISTS ( - SELECT 1 - FROM - public.tbl_konto - WHERE - person_id = pers.person_id - AND studiensemester_kurzbz = status.studiensemester_kurzbz - AND buchungsnr_verweis IS NULL - AND betrag <= 0 - ) - AND stg.melderelevant - AND pre.bismelden"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND pre.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - //------------------------------------------------------------------------------------------------------------------ - // Person checks - - /** - * Birthdate is too long ago. - * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param person_id int if check is to be executed only for one person - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getGbDatumWeitZurueck( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $person_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - pers.person_id - FROM - public.tbl_person pers - WHERE - pers.gebdatum < '1920-01-01' - AND EXISTS ( - SELECT 1 - FROM public.tbl_prestudent - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE person_id = pers.person_id"; - - if (isset($studiensemester_kurzbz)) - { - $qry .= " AND status.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - $qry .= ")"; - - if (isset($person_id)) - { - $qry .= " AND pers.person_id = ?"; - $params[] = $person_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Nation is not Austria, but address has austrian Gemeinde. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param person_id int if check is to be executed only for one person - * @return success with prestudents or error - */ - public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - $qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id - FROM - public.tbl_adresse adr - JOIN public.tbl_prestudent USING(person_id) - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_benutzer ON(uid=student_uid) - JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz - WHERE - adr.nation!='A' - AND tbl_benutzer.aktiv - AND gemeinde NOT IN ('Münster') - AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($person_id)) - { - $qry .= " AND tbl_person.person_id = ?"; - $params[] = $person_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students should have exactly one home address. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param person_id int if check is to be executed only for one person - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getFalscheAnzahlHeimatadressen( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $person_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - DISTINCT person_id - FROM - ( - SELECT person_id, COUNT(adresse_id) AS anzahl_adressen - FROM public.tbl_adresse addr - WHERE heimatadresse IS TRUE - GROUP BY person_id - ) adressen - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudent pre USING(person_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - WHERE - anzahl_adressen != 1 - AND stg.melderelevant - AND pre.bismelden"; - - if (isset($studiensemester_kurzbz)) - { - $qry .= " AND status.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($person_id)) - { - $qry .= " AND person_id = ?"; - $params[] = $person_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Students should have exactly one delivery address. - * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param person_id int if check is to be executed only for one person - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getFalscheAnzahlZustelladressen( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $person_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - DISTINCT person_id - FROM - ( - SELECT person_id, COUNT(adresse_id) AS anzahl_adressen - FROM public.tbl_adresse addr - WHERE zustelladresse IS TRUE - GROUP BY person_id - ) adressen - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudent pre USING(person_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_student USING(prestudent_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - WHERE - anzahl_adressen != 1 - AND stg.melderelevant - AND pre.bismelden"; - - if (isset($studiensemester_kurzbz)) - { - $qry .= " AND status.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($person_id)) - { - $qry .= " AND person_id = ?"; - $params[] = $person_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - //------------------------------------------------------------------------------------------------------------------ - // I/O checks - - /** - * Incoming shouldn't have austrian home address. - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param person_id int if check is to be executed only for one person - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getIncomingHeimatNationOesterreich( - $studiensemester_kurzbz, - $studiengang_kz = null, - $person_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array($studiensemester_kurzbz); - - $qry = " - SELECT - DISTINCT pers.person_id, status.studiensemester_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_person pers USING(person_id) - JOIN public.tbl_adresse addr USING(person_id) - JOIN public.tbl_studiengang stg USING(studiengang_kz) - WHERE - status.status_kurzbz = 'Incoming' - AND addr.nation = 'A' - AND addr.heimatadresse - AND status.studiensemester_kurzbz = ? - AND stg.melderelevant - AND pre.bismelden"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($person_id)) - { - $qry .= " AND pers.person_id = ?"; - $params[] = $person_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Incoming should have IN/OUT data. - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return success with prestudents or error - */ - public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) - { - $params = array(); - - $qry = " - SELECT - DISTINCT ON(student_uid, nachname, vorname) - tbl_person.person_id, - tbl_prestudent.prestudent_id, - stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_student - JOIN public.tbl_benutzer ON(student_uid=uid) - JOIN public.tbl_person USING(person_id) - JOIN public.tbl_prestudent USING(prestudent_id) - JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) - JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz) - WHERE - bismelden=TRUE - AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid) - AND stg.melderelevant"; - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND tbl_prestudent.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant). - * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param prestudent_id int if check is to be executed only for one prestudent - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - * @return object success or error - */ - public function getIncomingOrGsFoerderrelevant( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $prestudent_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - DISTINCT ON(prestudent_id) - pers.person_id, - ps.prestudent_id, - stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_student stud - JOIN public.tbl_benutzer ON(student_uid=uid) - JOIN public.tbl_person pers USING(person_id) - JOIN public.tbl_prestudent ps USING(prestudent_id) - JOIN public.tbl_prestudentstatus status USING(prestudent_id) - JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz) - WHERE - ( - status.status_kurzbz = 'Incoming' - OR EXISTS ( - SELECT 1 - FROM - bis.tbl_mobilitaet - JOIN public.tbl_prestudent USING(prestudent_id) - WHERE - prestudent_id = ps.prestudent_id - AND gsstudientyp_kurzbz = 'Extern' - ) - ) - AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL) - AND bismelden=TRUE - AND stg.melderelevant"; - - if (isset($studiensemester_kurzbz)) - { - $qry .= " AND status.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($prestudent_id)) - { - $qry .= " AND ps.prestudent_id = ?"; - $params[] = $prestudent_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - //------------------------------------------------------------------------------------------------------------------ - // Private methods - - /** - * Get final exams in a semester which are invalid (e.g. missing data) - * @param studiensemester_kurzbz string if check is to be executed for certain Studiengang - * @param studiengang_kz int if check is to be executed for certain Studiengang - * @param abschlusspruefung_id int if check is to be executed for certain Abschlussprüfung - * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check - */ - private function _getInvalidAbschlusspruefungen( - $studiensemester_kurzbz = null, - $studiengang_kz = null, - $abschlusspruefung_id = null, - $exkludierte_studiengang_kz = null - ) { - $params = array(); - - $qry = " - SELECT - pre.person_id, pre.prestudent_id, - pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id, - stg.oe_kurzbz AS prestudent_stg_oe_kurzbz - FROM - public.tbl_prestudent pre - JOIN public.tbl_student stud USING(prestudent_id) - JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) - JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz - JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid - WHERE - status_kurzbz = 'Absolvent' - AND NOT EXISTS ( /* exclude gs */ - SELECT 1 - FROM bis.tbl_mobilitaet - WHERE prestudent_id = pre.prestudent_id - AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz - ) - AND abschlussbeurteilung_kurzbz!='nicht' - AND abschlussbeurteilung_kurzbz IS NOT NULL - AND (pruefung.datum IS NULL OR pruefung.sponsion IS NULL) - AND pre.bismelden - AND stg.melderelevant"; - - if (isset($studiensemester_kurzbz)) - { - $qry .= " AND prestatus.studiensemester_kurzbz = ?"; - $params[] = $studiensemester_kurzbz; - } - - if (isset($studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz = ?"; - $params[] = $studiengang_kz; - } - - if (isset($abschlusspruefung_id)) - { - $qry .= " AND pruefung.abschlusspruefung_id = ?"; - $params[] = $abschlusspruefung_id; - } - - if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) - { - $qry .= " AND stg.studiengang_kz NOT IN ?"; - $params[] = $exkludierte_studiengang_kz; - } - - return $this->_db->execReadOnlyQuery($qry, $params); - } - - /** - * Gets Bismeldedate from Studiensemester. - * @param studiensemester_kurzbz string - */ - private function _getBisdateFromSemester($studiensemester_kurzbz) - { - $semesterYear = substr($studiensemester_kurzbz, 2, 6); - $semesterType = substr($studiensemester_kurzbz, 0, 2); - - if ($semesterType == 'SS') - { - return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d'); - } - - if ($semesterType == 'WS') - { - return date_format(date_create($semesterYear."-04-15"), 'Y-m-d'); - } - } -} diff --git a/application/libraries/issues/plausichecks/AbbrecherAktiv.php b/application/libraries/issues/plausichecks/AbbrecherAktiv.php index caa8dd91c..9eae389b5 100644 --- a/application/libraries/issues/plausichecks/AbbrecherAktiv.php +++ b/application/libraries/issues/plausichecks/AbbrecherAktiv.php @@ -20,7 +20,7 @@ class AbbrecherAktiv extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAbbrecherAktiv($studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getAbbrecherAktiv($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -43,4 +43,49 @@ class AbbrecherAktiv extends PlausiChecker // return the results return success($results); } + + /** + * Abbrecher cannot be active. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getAbbrecherAktiv($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = " + SELECT + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudentstatus pre_status + JOIN public.tbl_prestudent pre USING(prestudent_id) + JOIN public.tbl_student student USING(prestudent_id) + JOIN public.tbl_benutzer benutzer on(benutzer.uid=student.student_uid) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + WHERE + pre_status.status_kurzbz ='Abbrecher' + AND benutzer.aktiv=true"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php index e7894c7a8..3690e1331 100644 --- a/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php +++ b/application/libraries/issues/plausichecks/AbschlussstatusFehlt.php @@ -21,7 +21,7 @@ class AbschlussstatusFehlt extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt( + $prestudentRes = $this->getAbschlussstatusFehlt( $studiensemester_kurzbz, $studiengang_kz, null, @@ -49,4 +49,95 @@ class AbschlussstatusFehlt extends PlausiChecker // return the results return success($results); } + + /** + * Prestudent should have a final status. + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getAbschlussstatusFehlt( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + DISTINCT ON (pre.prestudent_id) + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE + NOT EXISTS( /*student does not study anymore*/ + SELECT + 1 + FROM + public.tbl_prestudentstatus ps + JOIN public.tbl_studiensemester USING(studiensemester_kurzbz) + WHERE + prestudent_id=pre.prestudent_id + /* 4 months: There might be Diplomanden, in summer months end status is often not entered yet */ + AND tbl_studiensemester.ende>now() - interval '4 months' + ) + /* check only valid begininng with 2018 */ + AND '2018-01-01'<(SELECT max(datum) FROM public.tbl_prestudentstatus WHERE prestudent_id=pre.prestudent_id) + AND NOT EXISTS( /* no end status */ + SELECT 1 + FROM public.tbl_prestudentstatus ps + WHERE + prestudent_id=pre.prestudent_id + AND status_kurzbz IN('Abbrecher','Abgewiesener','Absolvent','Incoming') + ) + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiensemester_kurzbz)) + { + $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; + + if (hasData($prevStudiensemesterRes)) + { + // if Studiensemester given, check only if has status in current or previous semester + $prevStudiensemester = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz; + $qry .= " AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus ps + WHERE studiensemester_kurzbz IN (?, ?) + AND ps.prestudent_id = pre.prestudent_id + )"; + $params[] = $prevStudiensemester; + $params[] = $studiensemester_kurzbz; + } + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/AktSemesterNull.php b/application/libraries/issues/plausichecks/AktSemesterNull.php index fa251a95e..1223a2720 100644 --- a/application/libraries/issues/plausichecks/AktSemesterNull.php +++ b/application/libraries/issues/plausichecks/AktSemesterNull.php @@ -21,7 +21,7 @@ class AktSemesterNull extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -50,4 +50,51 @@ class AktSemesterNull extends PlausiChecker // return the results return success($results); } + + /** + * Current Ausbildungssemester shouldn't be 0. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getAktSemesterNull($studiensemester_kurzbz, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, prestat.studiensemester_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_prestudentstatus prestat USING(prestudent_id) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE + prestat.status_kurzbz != 'Incoming' + AND prestat.studiensemester_kurzbz = ? + AND ausbildungssemester = 0 + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php index 225c6242f..94fe5cc8d 100644 --- a/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php +++ b/application/libraries/issues/plausichecks/AktiverStudentOhneStatus.php @@ -20,7 +20,7 @@ class AktiverStudentOhneStatus extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getAktiverStudentOhneStatus($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -43,4 +43,57 @@ class AktiverStudentOhneStatus extends PlausiChecker // return the results return success($results); } + + /** + * Students with active Benutzer should have a status in the current semester. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getAktiverStudentOhneStatus($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT (student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_student student + JOIN public.tbl_benutzer benutzer on (benutzer.uid = student.student_uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + benutzer.aktiv=TRUE + AND stg.melderelevant + AND prestudent.bismelden + AND NOT EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus + JOIN public.tbl_studiensemester sem USING (studiensemester_kurzbz) + WHERE prestudent_id = prestudent.prestudent_id + /* buffer of four months, as status are often entered later */ + AND sem.ende::date > NOW() - interval '4 months' + )"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php index a9b30a1d2..28684388f 100644 --- a/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php +++ b/application/libraries/issues/plausichecks/AktiverStudentstatusOhneKontobuchung.php @@ -21,7 +21,7 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung( + $prestudentRes = $this->getAktiverStudentstatusOhneKontobuchung( $studiensemester_kurzbz, $studiengang_kz, null, @@ -55,4 +55,66 @@ class AktiverStudentstatusOhneKontobuchung extends PlausiChecker // return the results return success($results); } + + /** + * Student with active status should have been charged, i.e. have a Kontobuchung with a negative or zero value. + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getAktiverStudentstatusOhneKontobuchung( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT ON (pre.prestudent_id) + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE + status.studiensemester_kurzbz = ? + AND status.status_kurzbz IN ('Student', 'Incoming') + AND NOT EXISTS ( + SELECT 1 + FROM + public.tbl_konto + WHERE + person_id = pers.person_id + AND studiensemester_kurzbz = status.studiensemester_kurzbz + AND buchungsnr_verweis IS NULL + AND betrag <= 0 + ) + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php index 3462685ab..00ff16ae0 100644 --- a/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php +++ b/application/libraries/issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus.php @@ -21,7 +21,7 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus( + $prestudentRes = $this->getAusbildungssemPrestudentUngleichAusbildungssemStatus( $studiensemester_kurzbz, $studiengang_kz, null, @@ -58,4 +58,59 @@ class AusbildungssemPrestudentUngleichAusbildungssemStatus extends PlausiChecker // return the results return success($results); } + + /** + * Ausbildungssemester of prestudent (lehrverband) must be the same as Ausbildungssemester of prestudentstatus. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getAusbildungssemPrestudentUngleichAusbildungssemStatus( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array($studiensemester_kurzbz, $studiensemester_kurzbz, $studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT(student.student_uid), student.student_uid, prestudent.person_id, prestudent.prestudent_id, + status.ausbildungssemester AS status_ausbildungssemester, lv.semester AS student_ausbildungssemester, status.studiensemester_kurzbz, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_student student + JOIN public.tbl_studentlehrverband lv USING(student_uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + status.studiensemester_kurzbz = ? + AND lv.studiensemester_kurzbz = ? + AND status.status_kurzbz NOT IN ('Interessent','Bewerber','Aufgenommener','Wartender','Abgewiesener','Unterbrecher') + AND get_rolle_prestudent (prestudent_id, ?)='Student' + AND status.ausbildungssemester != lv.semester"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php index a1b1941dd..4a9655d13 100644 --- a/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php +++ b/application/libraries/issues/plausichecks/BewerberNichtZumRtAngetreten.php @@ -21,7 +21,7 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten( + $prestudentRes = $this->getBewerberNichtZumRtAngetreten( $studiensemester_kurzbz, $studiengang_kz, null, @@ -52,4 +52,72 @@ class BewerberNichtZumRtAngetreten extends PlausiChecker // return the results return success($results); } + + /** + * Bewerber should have participated in Reihungstest. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getBewerberNichtZumRtAngetreten( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $previousStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($previousStudiensemesterRes)) return $previousStudiensemesterRes; + + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz + FROM + public.tbl_prestudent prestudent + JOIN public.tbl_prestudentstatus status ON(prestudent.prestudent_id=status.prestudent_id) + JOIN public.tbl_person USING(person_id) + LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE + status_kurzbz='Bewerber' + AND reihungstestangetreten=false + AND stg.melderelevant + AND prestudent.bismelden"; + + if (hasData($previousStudiensemesterRes)) + { + $previousStudiensemester = getData($previousStudiensemesterRes)[0]->studiensemester_kurzbz; + $qry .= " AND (studiensemester_kurzbz=? OR studiensemester_kurzbz=?)"; + $params[] = $previousStudiensemester; + } + else + { + $qry .= " AND studiensemester_kurzbz=?"; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php index 0d66324fb..f606e2c8c 100644 --- a/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php +++ b/application/libraries/issues/plausichecks/DatumAbschlusspruefungFehlt.php @@ -21,7 +21,7 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt( + $prestudentRes = $this->getDatumAbschlusspruefungFehlt( $studiensemester_kurzbz, $studiengang_kz, null, @@ -52,4 +52,72 @@ class DatumAbschlusspruefungFehlt extends PlausiChecker // return the results return success($results); } + + /** + * Date of final exam shouldn't be missing for Absolvent. + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param abschlusspruefung_id int if check is to be executed for a certain Abschlussprüfung + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getDatumAbschlusspruefungFehlt( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $abschlusspruefung_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + pre.person_id, pre.prestudent_id, + pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid + WHERE + status_kurzbz = 'Absolvent' + AND NOT EXISTS ( /* exclude gs */ + SELECT 1 + FROM bis.tbl_mobilitaet + WHERE prestudent_id = pre.prestudent_id + AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz + ) + AND abschlussbeurteilung_kurzbz!='nicht' + AND abschlussbeurteilung_kurzbz IS NOT NULL + AND pruefung.datum IS NULL + AND pre.bismelden + AND stg.melderelevant"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND prestatus.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($abschlusspruefung_id)) + { + $qry .= " AND pruefung.abschlusspruefung_id = ?"; + $params[] = $abschlusspruefung_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php index 719afc2e2..210ae6f01 100644 --- a/application/libraries/issues/plausichecks/DatumSponsionFehlt.php +++ b/application/libraries/issues/plausichecks/DatumSponsionFehlt.php @@ -21,7 +21,7 @@ class DatumSponsionFehlt extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getDatumSponsionFehlt( + $prestudentRes = $this->getDatumSponsionFehlt( $studiensemester_kurzbz, $studiengang_kz, null, @@ -52,4 +52,72 @@ class DatumSponsionFehlt extends PlausiChecker // return the results return success($results); } + + /** + * Date of sponsion shouldn't be missing for Absolvent. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param abschlusspruefung_id int if check is to be executed only for a certain Abschlussprüfung + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getDatumSponsionFehlt( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $abschlusspruefung_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + pre.person_id, pre.prestudent_id, + pruefung.sponsion, pruefung.datum, pruefung.abschlusspruefung_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN lehre.tbl_abschlusspruefung pruefung ON stud.student_uid = pruefung.student_uid + WHERE + status_kurzbz = 'Absolvent' + AND NOT EXISTS ( /* exclude gs */ + SELECT 1 + FROM bis.tbl_mobilitaet + WHERE prestudent_id = pre.prestudent_id + AND studiensemester_kurzbz = prestatus.studiensemester_kurzbz + ) + AND abschlussbeurteilung_kurzbz!='nicht' + AND abschlussbeurteilung_kurzbz IS NOT NULL + AND pruefung.sponsion IS NULL + AND pre.bismelden + AND stg.melderelevant"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND prestatus.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($abschlusspruefung_id)) + { + $qry .= " AND pruefung.abschlusspruefung_id = ?"; + $params[] = $abschlusspruefung_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php index e1f01f735..381bea7df 100644 --- a/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php +++ b/application/libraries/issues/plausichecks/DatumStudiensemesterFalscheReihenfolge.php @@ -20,7 +20,7 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getDatumStudiensemesterFalscheReihenfolge($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -45,4 +45,64 @@ class DatumStudiensemesterFalscheReihenfolge extends PlausiChecker // return the results return success($results); } + + /** + * Status Dates and status studysemester dates should be in correct order. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if check is to be executed only for certain Studiengaenge + * @return success with prestudents or error + */ + public function getDatumStudiensemesterFalscheReihenfolge($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + // all active students with Status student in current semester + $qry = " + SELECT DISTINCT ON (prestudent_id) * + FROM ( + SELECT + prestudent.person_id, prestudent.prestudent_id, + stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, + ROW_NUMBER () OVER ( + PARTITION BY prestudent.prestudent_id + ORDER BY sem.start DESC, status.datum DESC, status.insertamum DESC, status.ext_id DESC + ) AS reihenfolge_semester, + ROW_NUMBER () OVER ( + PARTITION BY prestudent.prestudent_id + ORDER BY status.datum DESC, status.insertamum DESC, status.ext_id DESC + ) AS reihenfolge_datum + FROM + public.tbl_student student + JOIN public.tbl_benutzer benutzer on(student.student_uid = benutzer.uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiensemester sem USING(studiensemester_kurzbz) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + benutzer.aktiv=true + AND status.status_kurzbz='Student' + ) reihenfolge + WHERE reihenfolge_semester <> reihenfolge_datum"; + + if (isset($studiengang_kz)) + { + $qry .= " AND studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php index 68b67ec29..1021fe85a 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlAbschlusspruefungen.php @@ -21,7 +21,7 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen( + $prestudentRes = $this->getFalscheAnzahlAbschlusspruefungen( $studiensemester_kurzbz, $studiengang_kz, null, @@ -49,4 +49,77 @@ class FalscheAnzahlAbschlusspruefungen extends PlausiChecker // return the results return success($results); } + + /** + * Students with finished studies should have exactly one final exam. + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getFalscheAnzahlAbschlusspruefungen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT * FROM ( + SELECT + DISTINCT ON(pre.prestudent_id) pre.person_id, pre.prestudent_id, student_uid, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, + ( + SELECT COUNT(*) + FROM lehre.tbl_abschlusspruefung + WHERE student_uid = stud.student_uid + AND abschlussbeurteilung_kurzbz != 'nicht' + AND abschlussbeurteilung_kurzbz IS NOT NULL + ) AS anzahl_abschlusspruefungen + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + WHERE + status_kurzbz = 'Absolvent' + AND pre.bismelden + AND stg.melderelevant + AND NOT EXISTS ( /* exclude gs */ + SELECT 1 + FROM bis.tbl_mobilitaet + WHERE prestudent_id = pre.prestudent_id + AND studiensemester_kurzbz = status.studiensemester_kurzbz + )"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + $qry .= ") studenten + WHERE anzahl_abschlusspruefungen != 1"; + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php index f3189eaa5..b3551904e 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlHeimatadressen.php @@ -21,7 +21,7 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $personRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen( + $personRes = $this->getFalscheAnzahlHeimatadressen( $studiensemester_kurzbz, $studiengang_kz, null, @@ -47,4 +47,67 @@ class FalscheAnzahlHeimatadressen extends PlausiChecker // return the results return success($results); } + + /** + * Students should have exactly one home address. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getFalscheAnzahlHeimatadressen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + DISTINCT person_id + FROM + ( + SELECT person_id, COUNT(adresse_id) AS anzahl_adressen + FROM public.tbl_adresse addr + WHERE heimatadresse IS TRUE + GROUP BY person_id + ) adressen + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudent pre USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + WHERE + anzahl_adressen != 1 + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($person_id)) + { + $qry .= " AND person_id = ?"; + $params[] = $person_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php index 1fb974aa1..9d72b0236 100644 --- a/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php +++ b/application/libraries/issues/plausichecks/FalscheAnzahlZustelladressen.php @@ -21,7 +21,7 @@ class FalscheAnzahlZustelladressen extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $personRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen( + $personRes = $this->getFalscheAnzahlZustelladressen( $studiensemester_kurzbz, $studiengang_kz, null, @@ -47,4 +47,67 @@ class FalscheAnzahlZustelladressen extends PlausiChecker // return the results return success($results); } + + /** + * Students should have exactly one delivery address. + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getFalscheAnzahlZustelladressen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + DISTINCT person_id + FROM + ( + SELECT person_id, COUNT(adresse_id) AS anzahl_adressen + FROM public.tbl_adresse addr + WHERE zustelladresse IS TRUE + GROUP BY person_id + ) adressen + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudent pre USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + WHERE + anzahl_adressen != 1 + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($person_id)) + { + $qry .= " AND person_id = ?"; + $params[] = $person_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php index 5b7326986..a9e9f817a 100644 --- a/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php +++ b/application/libraries/issues/plausichecks/GbDatumWeitZurueck.php @@ -21,7 +21,7 @@ class GbDatumWeitZurueck extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $personRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); + $personRes = $this->getGbDatumWeitZurueck($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($personRes)) return $personRes; @@ -42,4 +42,63 @@ class GbDatumWeitZurueck extends PlausiChecker // return the results return success($results); } + + /** + * Birthdate is too long ago. + * @param studiensemester_kurzbz string if check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getGbDatumWeitZurueck( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + pers.person_id + FROM + public.tbl_person pers + WHERE + pers.gebdatum < '1920-01-01' + AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudent + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE person_id = pers.person_id"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + $qry .= ")"; + + if (isset($person_id)) + { + $qry .= " AND pers.person_id = ?"; + $params[] = $person_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php index 559d31263..dead2b1e7 100644 --- a/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php +++ b/application/libraries/issues/plausichecks/InaktiverStudentAktiverStatus.php @@ -21,7 +21,7 @@ class InaktiverStudentAktiverStatus extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus( + $prestudentRes = $this->getInaktiverStudentAktiverStatus( $studiensemester_kurzbz, $studiengang_kz, null, @@ -52,4 +52,62 @@ class InaktiverStudentAktiverStatus extends PlausiChecker // return the results return success($results); } + + /** + * Students with active status should have an active Benutzer. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getInaktiverStudentAktiverStatus( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $aktStudiensemesterRes = $this->_ci->StudiensemesterModel->getAkt(); + + if (isError($aktStudiensemesterRes)) return $aktStudiensemesterRes; + + $studiensemester_kurzbz = hasData($aktStudiensemesterRes) ? getData($aktStudiensemesterRes)[0]->studiensemester_kurzbz : ''; + + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT(student.student_uid), prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_benutzer benutzer + JOIN public.tbl_student student on(benutzer.uid = student.student_uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + benutzer.aktiv=false + AND EXISTS (SELECT 1 FROM public.tbl_prestudentstatus WHERE prestudent_id = prestudent.prestudent_id AND studiensemester_kurzbz = ?) + AND get_rolle_prestudent(prestudent_id, NULL) IN ('Student', 'Diplomand', 'Unterbrecher', 'Praktikant') + AND stg.melderelevant + AND prestudent.bismelden"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php index 113416486..5276164dc 100644 --- a/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php +++ b/application/libraries/issues/plausichecks/IncomingHeimatNationOesterreich.php @@ -21,7 +21,7 @@ class IncomingHeimatNationOesterreich extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $personRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich( + $personRes = $this->getIncomingHeimatNationOesterreich( $studiensemester_kurzbz, $studiengang_kz, null, @@ -47,4 +47,58 @@ class IncomingHeimatNationOesterreich extends PlausiChecker // return the results return success($results); } + + /** + * Incoming shouldn't have austrian home address. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getIncomingHeimatNationOesterreich( + $studiensemester_kurzbz, + $studiengang_kz = null, + $person_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT pers.person_id, status.studiensemester_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_adresse addr USING(person_id) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE + status.status_kurzbz = 'Incoming' + AND addr.nation = 'A' + AND addr.heimatadresse + AND status.studiensemester_kurzbz = ? + AND stg.melderelevant + AND pre.bismelden"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($person_id)) + { + $qry .= " AND pers.person_id = ?"; + $params[] = $person_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php index 6eaa9db3f..e08280f83 100644 --- a/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php +++ b/application/libraries/issues/plausichecks/IncomingOhneIoDatensatz.php @@ -20,7 +20,7 @@ class IncomingOhneIoDatensatz extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getIncomingOhneIoDatensatz($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -43,4 +43,54 @@ class IncomingOhneIoDatensatz extends PlausiChecker // return the results return success($results); } + + /** + * Incoming should have IN/OUT data. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getIncomingOhneIoDatensatz($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT ON(student_uid, nachname, vorname) + tbl_person.person_id, + tbl_prestudent.prestudent_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_student + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus ON(tbl_prestudent.prestudent_id=tbl_prestudentstatus.prestudent_id) + JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=tbl_student.studiengang_kz) + WHERE + bismelden=TRUE + AND status_kurzbz='Incoming' AND NOT EXISTS (SELECT 1 FROM bis.tbl_bisio WHERE student_uid=tbl_student.student_uid) + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php index 23002b71b..4d789f71a 100644 --- a/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php +++ b/application/libraries/issues/plausichecks/IncomingOrGsFoerderrelevant.php @@ -21,7 +21,7 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant( + $prestudentRes = $this->getIncomingOrGsFoerderrelevant( $studiensemester_kurzbz, $studiengang_kz, null, @@ -49,4 +49,77 @@ class IncomingOrGsFoerderrelevant extends PlausiChecker // return the results return success($results); } + + /** + * Incoming or gemeinsame Studien students should not receive funding (not be förderrelevant). + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return object success or error + */ + public function getIncomingOrGsFoerderrelevant( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + DISTINCT ON(prestudent_id) + pers.person_id, + ps.prestudent_id, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_student stud + JOIN public.tbl_benutzer ON(student_uid=uid) + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_prestudent ps USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON(stg.studiengang_kz=stud.studiengang_kz) + WHERE + ( + status.status_kurzbz = 'Incoming' + OR EXISTS ( + SELECT 1 + FROM + bis.tbl_mobilitaet + JOIN public.tbl_prestudent USING(prestudent_id) + WHERE + prestudent_id = ps.prestudent_id + AND gsstudientyp_kurzbz = 'Extern' + ) + ) + AND (ps.foerderrelevant <> FALSE OR ps.foerderrelevant IS NULL) + AND bismelden=TRUE + AND stg.melderelevant"; + + if (isset($studiensemester_kurzbz)) + { + $qry .= " AND status.studiensemester_kurzbz = ?"; + $params[] = $studiensemester_kurzbz; + } + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND ps.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php index d977b4124..871b3b3d4 100644 --- a/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php +++ b/application/libraries/issues/plausichecks/InskriptionVorLetzerBismeldung.php @@ -21,7 +21,7 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung( + $prestudentRes = $this->getInskriptionVorLetzerBismeldung( $studiensemester_kurzbz, $studiengang_kz, null, @@ -56,4 +56,93 @@ class InskriptionVorLetzerBismeldung extends PlausiChecker // return the results return success($results); } + + /** + * Students of a semester shouldn't start studies before the date of Bismeldung. + * e.g. If student studies in WS2022 datum of status shouldn't be before 15.4.2020 + * e.g. If student studies in SS2022 datum of status shouldn't be before 15.11.2022 + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getInskriptionVorLetzerBismeldung( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + // get Bismeldedatum + $datumBis = $this->_getBisdateFromSemester($studiensemester_kurzbz); + + $params = array($datumBis, $studiensemester_kurzbz, $datumBis); + + // get active students + $qry = " + SELECT + DISTINCT ON (student.student_uid) ? AS datum_bismeldung, + prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz + FROM + public.tbl_benutzer benutzer + JOIN public.tbl_student student on(benutzer.uid = student.student_uid) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + benutzer.aktiv=true + AND status.studiensemester_kurzbz = ? + /* inscription date before date of first student status */ + AND ( + SELECT datum + FROM public.tbl_prestudentstatus + WHERE prestudent_id = prestudent.prestudent_id + AND studiensemester_kurzbz = status.studiensemester_kurzbz + AND status_kurzbz = 'Student' + ORDER BY datum, insertamum, ext_id + LIMIT 1 + ) < ? + AND stg.melderelevant + AND prestudent.bismelden"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } + + /** + * Gets Bismeldedate from Studiensemester. + * @param studiensemester_kurzbz string + */ + private function _getBisdateFromSemester($studiensemester_kurzbz) + { + $semesterYear = substr($studiensemester_kurzbz, 2, 6); + $semesterType = substr($studiensemester_kurzbz, 0, 2); + + if ($semesterType == 'SS') + { + return date_format(date_create(($semesterYear - 1)."-11-15"), 'Y-m-d'); + } + + if ($semesterType == 'WS') + { + return date_format(date_create($semesterYear."-04-15"), 'Y-m-d'); + } + } } diff --git a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php index 53bd59826..c04cd664c 100644 --- a/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php +++ b/application/libraries/issues/plausichecks/NationNichtOesterreichAberGemeinde.php @@ -20,7 +20,7 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $personRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde( + $personRes = $this->getNationNichtOesterreichAberGemeinde( $studiengang_kz, null, $exkludierte_studiengang_kz @@ -46,4 +46,49 @@ class NationNichtOesterreichAberGemeinde extends PlausiChecker // return the results return success($results); } + + /** + * Nation is not Austria, but address has austrian Gemeinde. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param person_id int if check is to be executed only for one person + * @return success with prestudents or error + */ + public function getNationNichtOesterreichAberGemeinde($studiengang_kz = null, $person_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = "SELECT DISTINCT tbl_person.person_id, adr.gemeinde, adr.adresse_id + FROM + public.tbl_adresse adr + JOIN public.tbl_prestudent USING(person_id) + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_student USING(prestudent_id) + JOIN public.tbl_benutzer ON(uid=student_uid) + JOIN public.tbl_studiengang stg ON tbl_prestudent.studiengang_kz = stg.studiengang_kz + WHERE + adr.nation!='A' + AND tbl_benutzer.aktiv + AND gemeinde NOT IN ('Münster') + AND EXISTS(SELECT 1 FROM bis.tbl_gemeinde WHERE name = adr.gemeinde)"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($person_id)) + { + $qry .= " AND tbl_person.person_id = ?"; + $params[] = $person_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php index d9515a777..316e81072 100644 --- a/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php +++ b/application/libraries/issues/plausichecks/OrgformStgUngleichOrgformPrestudent.php @@ -21,7 +21,7 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent( + $prestudentRes = $this->getOrgformStgUngleichOrgformPrestudent( $studiensemester_kurzbz, $studiengang_kz, null, @@ -57,4 +57,74 @@ class OrgformStgUngleichOrgformPrestudent extends PlausiChecker // return the results return success($results); } + + /** + * Orgform of a Studiengang in Studienplan should be the same as orgform of student. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getOrgformStgUngleichOrgformPrestudent( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + prestudent.person_id, prestudent.prestudent_id, status.studiensemester_kurzbz, + studiengang.orgform_kurzbz AS stg_orgform, status.orgform_kurzbz AS student_orgform, + prestudent.studiengang_kz AS student_studiengang, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_studiengang studiengang + JOIN public.tbl_student student USING(studiengang_kz) + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_benutzer benutzer on(benutzer.uid = student.student_uid) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + LEFT JOIN lehre.tbl_studienplan stpl USING (studienplan_id) + WHERE + benutzer.aktiv = true + AND status.status_kurzbz IN ('Student', 'Unterbrecher', 'Abbrecher', 'Diplomand', 'Absolvent') + AND studiengang.studiengang_kz < 10000 + AND status.studiensemester_kurzbz = ? + AND NOT (status.orgform_kurzbz IS NULL AND studiengang.mischform = FALSE) + AND NOT EXISTS( + SELECT 1 + FROM + lehre.tbl_studienplan + JOIN + lehre.tbl_studienordnung USING(studienordnung_id) + WHERE + tbl_studienplan.studienplan_id = stpl.studienplan_id + AND tbl_studienordnung.studiengang_kz = prestudent.studiengang_kz + AND tbl_studienplan.orgform_kurzbz = status.orgform_kurzbz)"; + + if (isset($studiengang_kz)) + { + $qry .= " AND studiengang.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + $qry .= " + ORDER BY student_uid"; + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/PlausiChecker.php b/application/libraries/issues/plausichecks/PlausiChecker.php index 0d8da4007..086a44cc4 100644 --- a/application/libraries/issues/plausichecks/PlausiChecker.php +++ b/application/libraries/issues/plausichecks/PlausiChecker.php @@ -7,6 +7,7 @@ abstract class PlausiChecker { protected $_ci; // code igniter instance protected $_config; // configuration parameters for this plausicheck + protected $_db; // database for queries public function __construct($configurationParams = null) { @@ -15,8 +16,8 @@ abstract class PlausiChecker // set configuration $this->_config = $configurationParams; - // load libraries - $this->_ci->load->library('issues/PlausicheckLib'); // load plausicheck library + // get database for queries + $this->_db = new DB_Model(); } /** diff --git a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php index e68d840d9..a4c3e2a4b 100644 --- a/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php +++ b/application/libraries/issues/plausichecks/PrestudentMischformOhneOrgform.php @@ -21,7 +21,7 @@ class PrestudentMischformOhneOrgform extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform( + $prestudentRes = $this->getPrestudentMischformOhneOrgform( $studiensemester_kurzbz, $studiengang_kz, null, @@ -55,4 +55,55 @@ class PrestudentMischformOhneOrgform extends PlausiChecker // return the results return success($results); } + + /** + * Students in "mixed" Studiengang should have Orgform. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getPrestudentMischformOhneOrgform( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + pre.person_id, pre.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, status.studiensemester_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_studiengang stg USING(studiengang_kz) + WHERE + status.status_kurzbz IN ('Bewerber', 'Student') + AND stg.mischform + AND (status.orgform_kurzbz='' OR status.orgform_kurzbz IS NULL) + AND status.studiensemester_kurzbz=?"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php index 61737cc4d..94bea2f35 100644 --- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php +++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudent.php @@ -20,7 +20,7 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getStgPrestudentUngleichStgStudent($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -43,4 +43,48 @@ class StgPrestudentUngleichStgStudent extends PlausiChecker // return the results return success($results); } + + /** + * Studiengang should be the same for prestudent and student. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getStgPrestudentUngleichStgStudent($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = " + SELECT + pre.person_id, pre.prestudent_id, stg.oe_kurzbz prestudent_stg_oe_kurzbz, student_stg.oe_kurzbz student_stg_oe_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_student stud USING(prestudent_id) + JOIN public.tbl_person pers USING(person_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + JOIN public.tbl_studiengang student_stg ON stud.studiengang_kz = student_stg.studiengang_kz + WHERE + stud.studiengang_kz != pre.studiengang_kz"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND pre.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php index 0c9ce9300..fc0f52f23 100644 --- a/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php +++ b/application/libraries/issues/plausichecks/StgPrestudentUngleichStgStudienplan.php @@ -20,7 +20,7 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getStgPrestudentUngleichStgStudienplan($studiengang_kz, null, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -43,4 +43,62 @@ class StgPrestudentUngleichStgStudienplan extends PlausiChecker // return the results return success($results); } + + /** + * Studiengang should be the same for prestudent and studienplan. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param studienordnung_id int if check is to be executed only for a certain studienordnung_id + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getStgPrestudentUngleichStgStudienplan( + $studiengang_kz = null, + $prestudent_id = null, + $studienordnung_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + DISTINCT ON (ps.prestudent_id) ps.person_id, ps.prestudent_id, stordnung.studienordnung_id, + stplan.bezeichnung AS studienplan, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudent ps + JOIN public.tbl_prestudentstatus USING(prestudent_id) + JOIN lehre.tbl_studienplan stplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung stordnung USING(studienordnung_id) + JOIN public.tbl_person USING(person_id) + JOIN public.tbl_studiengang stg ON ps.studiengang_kz = stg.studiengang_kz + WHERE + ps.studiengang_kz<>stordnung.studiengang_kz + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND ps.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($studienordnung_id)) + { + $qry .= " AND stordnung.studienordnung_id = ?"; + $params[] = $studienordnung_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php index 47ca1fa2a..87bb51d7e 100644 --- a/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php +++ b/application/libraries/issues/plausichecks/StudentstatusNachAbbrecher.php @@ -20,7 +20,7 @@ class StudentstatusNachAbbrecher extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz); + $prestudentRes = $this->getStudentstatusNachAbbrecher($studiengang_kz, null, $exkludierte_studiengang_kz); if (isError($prestudentRes)) return $prestudentRes; @@ -43,4 +43,48 @@ class StudentstatusNachAbbrecher extends PlausiChecker // return the results return success($results); } + + /** + * There shouldn't be any status after Abbrecher status. + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getStudentstatusNachAbbrecher($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = " + SELECT + prestudent.person_id, prestudent.prestudent_id, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_student student + JOIN public.tbl_prestudent prestudent USING(prestudent_id) + JOIN public.tbl_prestudentstatus prestatus USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + prestatus.status_kurzbz = 'Abbrecher' + AND get_rolle_prestudent(prestudent.prestudent_id, prestatus.studiensemester_kurzbz) <> 'Abbrecher'"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/plausichecks/StudienplanUngueltig.php b/application/libraries/issues/plausichecks/StudienplanUngueltig.php index 22924abd8..9a306278e 100644 --- a/application/libraries/issues/plausichecks/StudienplanUngueltig.php +++ b/application/libraries/issues/plausichecks/StudienplanUngueltig.php @@ -21,7 +21,7 @@ class StudienplanUngueltig extends PlausiChecker $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; // get all students failing the plausicheck - $prestudentRes = $this->_ci->plausichecklib->getStudienplanUngueltig( + $prestudentRes = $this->getStudienplanUngueltig( $studiensemester_kurzbz, $studiengang_kz, null, @@ -56,4 +56,71 @@ class StudienplanUngueltig extends PlausiChecker // return the results return success($results); } + + /** + * Studienplan should be valid in current Ausbildungssemester of prestudent. + * @param studiensemester_kurzbz string check is to be executed for certain Studiensemester + * @param studiengang_kz int if check is to be executed for certain Studiengang + * @param prestudent_id int if check is to be executed only for one prestudent + * @param exkludierte_studiengang_kz array if certain Studiengänge have to be excluded from check + * @return success with prestudents or error + */ + public function getStudienplanUngueltig( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array($studiensemester_kurzbz); + + $qry = " + SELECT + DISTINCT pre.person_id, pre.prestudent_id, + tbl_studienplan.bezeichnung AS studienplan, + status.status_kurzbz, + status.studiensemester_kurzbz, + status.ausbildungssemester, + stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudent pre + JOIN public.tbl_prestudentstatus status USING(prestudent_id) + JOIN public.tbl_person USING(person_id) + JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN public.tbl_studiengang stg ON pre.studiengang_kz = stg.studiengang_kz + WHERE + status_kurzbz in('Student', 'Interessent','Bewerber','Aufgenommener') + AND NOT EXISTS ( + SELECT + 1 + FROM + lehre.tbl_studienplan_semester + WHERE + studienplan_id=status.studienplan_id + AND tbl_studienplan_semester.semester = status.ausbildungssemester + AND tbl_studienplan_semester.studiensemester_kurzbz = status.studiensemester_kurzbz + ) + AND status.studiensemester_kurzbz=? + AND pre.bismelden + AND stg.melderelevant"; + + if (isset($studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz = ?"; + $params[] = $studiengang_kz; + } + + if (isset($prestudent_id)) + { + $qry .= " AND tbl_prestudent.prestudent_id = ?"; + $params[] = $prestudent_id; + } + + if (isset($exkludierte_studiengang_kz) && !isEmptyArray($exkludierte_studiengang_kz)) + { + $qry .= " AND stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } } diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0007.php b/application/libraries/issues/resolvers/CORE_INOUT_0007.php index 2d9c7a3f4..31ca79ffb 100644 --- a/application/libraries/issues/resolvers/CORE_INOUT_0007.php +++ b/application/libraries/issues/resolvers/CORE_INOUT_0007.php @@ -17,10 +17,10 @@ class CORE_INOUT_0007 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/IncomingHeimatNationOesterreich'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']); + $checkRes = $this->_ci->incomingheimatnationoesterreich->getIncomingHeimatNationOesterreich($params['studiensemester_kurzbz'], null, $params['issue_person_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0008.php b/application/libraries/issues/resolvers/CORE_INOUT_0008.php index 30bbefdf1..4fa090c6a 100644 --- a/application/libraries/issues/resolvers/CORE_INOUT_0008.php +++ b/application/libraries/issues/resolvers/CORE_INOUT_0008.php @@ -14,10 +14,10 @@ class CORE_INOUT_0008 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/IncomingOhneIoDatensatz'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getIncomingOhneIoDatensatz(null, $params['prestudent_id']); + $checkRes = $this->_ci->incomingohneiodatensatz->getIncomingOhneIoDatensatz(null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_INOUT_0009.php b/application/libraries/issues/resolvers/CORE_INOUT_0009.php index b56344042..c739d71c3 100644 --- a/application/libraries/issues/resolvers/CORE_INOUT_0009.php +++ b/application/libraries/issues/resolvers/CORE_INOUT_0009.php @@ -14,10 +14,10 @@ class CORE_INOUT_0009 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/IncomingOrGsFoerderrelevant'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']); + $checkRes = $this->_ci->incomingorgsfoerderrelevant->getIncomingOrGsFoerderrelevant(null, null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0001.php b/application/libraries/issues/resolvers/CORE_PERSON_0001.php index cf1560171..d0ac0d3ed 100644 --- a/application/libraries/issues/resolvers/CORE_PERSON_0001.php +++ b/application/libraries/issues/resolvers/CORE_PERSON_0001.php @@ -14,10 +14,10 @@ class CORE_PERSON_0001 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/GbDatumWeitZurueck'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getGbDatumWeitZurueck(null, null, $params['issue_person_id']); + $checkRes = $this->_ci->gbdatumweitzurueck->getGbDatumWeitZurueck(null, null, $params['issue_person_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0002.php b/application/libraries/issues/resolvers/CORE_PERSON_0002.php index 969b2a5b0..608dcf0ce 100644 --- a/application/libraries/issues/resolvers/CORE_PERSON_0002.php +++ b/application/libraries/issues/resolvers/CORE_PERSON_0002.php @@ -14,10 +14,10 @@ class CORE_PERSON_0002 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/NationNichtOesterreichAberGemeinde'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']); + $checkRes = $this->_ci->nationnichtoesterreichabergemeinde->getNationNichtOesterreichAberGemeinde(null, $params['issue_person_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0003.php b/application/libraries/issues/resolvers/CORE_PERSON_0003.php index 8f53d159c..23a81b660 100644 --- a/application/libraries/issues/resolvers/CORE_PERSON_0003.php +++ b/application/libraries/issues/resolvers/CORE_PERSON_0003.php @@ -14,10 +14,10 @@ class CORE_PERSON_0003 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/FalscheAnzahlHeimatadressen'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']); + $checkRes = $this->_ci->falscheanzahlheimatadressen->getFalscheAnzahlHeimatadressen(null, null, $params['issue_person_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_PERSON_0004.php b/application/libraries/issues/resolvers/CORE_PERSON_0004.php index 9ce9b7b8a..ae3a855ec 100644 --- a/application/libraries/issues/resolvers/CORE_PERSON_0004.php +++ b/application/libraries/issues/resolvers/CORE_PERSON_0004.php @@ -14,10 +14,10 @@ class CORE_PERSON_0004 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/FalscheAnzahlZustelladressen'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']); + $checkRes = $this->_ci->falscheanzahlzustelladressen->getFalscheAnzahlZustelladressen(null, null, $params['issue_person_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STG_0001.php b/application/libraries/issues/resolvers/CORE_STG_0001.php index aee3fe0d2..09c34be74 100644 --- a/application/libraries/issues/resolvers/CORE_STG_0001.php +++ b/application/libraries/issues/resolvers/CORE_STG_0001.php @@ -14,10 +14,10 @@ class CORE_STG_0001 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudent'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']); + $checkRes = $this->_ci->stgprestudentungleichstgstudent->getStgPrestudentUngleichStgStudent(null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STG_0002.php b/application/libraries/issues/resolvers/CORE_STG_0002.php index dd0e293d4..999958042 100644 --- a/application/libraries/issues/resolvers/CORE_STG_0002.php +++ b/application/libraries/issues/resolvers/CORE_STG_0002.php @@ -17,10 +17,10 @@ class CORE_STG_0002 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/OrgformStgUngleichOrgformPrestudent'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->orgformstgungleichorgformprestudent->getOrgformStgUngleichOrgformPrestudent($params['studiensemester_kurzbz'], null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STG_0003.php b/application/libraries/issues/resolvers/CORE_STG_0003.php index 9559cdfb5..22d6399be 100644 --- a/application/libraries/issues/resolvers/CORE_STG_0003.php +++ b/application/libraries/issues/resolvers/CORE_STG_0003.php @@ -17,10 +17,10 @@ class CORE_STG_0003 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/PrestudentMischformOhneOrgform'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->prestudentmischformohneorgform->getPrestudentMischformOhneOrgform($params['studiensemester_kurzbz'], null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STG_0004.php b/application/libraries/issues/resolvers/CORE_STG_0004.php index 6ecc80863..2eedfc7fe 100644 --- a/application/libraries/issues/resolvers/CORE_STG_0004.php +++ b/application/libraries/issues/resolvers/CORE_STG_0004.php @@ -17,10 +17,10 @@ class CORE_STG_0004 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/StgPrestudentUngleichStgStudienplan'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']); + $checkRes = $this->_ci->stgprestudentungleichstgstudienplan->getStgPrestudentUngleichStgStudienplan(null, $params['prestudent_id'], $params['studienordnung_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php index 1f9dea34d..c74cd38fb 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0001.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0001 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/AbbrecherAktiv'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getAbbrecherAktiv(null, $params['prestudent_id']); + $checkRes = $this->_ci->abbrecheraktiv->getAbbrecherAktiv(null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php index 95da215c1..36827684c 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0002.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0002 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/StudentstatusNachAbbrecher'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getStudentstatusNachAbbrecher(null, $params['prestudent_id']); + $checkRes = $this->_ci->studentstatusnachabbrecher->getStudentstatusNachAbbrecher(null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php index 12e7a8da6..f3b150d8d 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0003.php @@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0003 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/AusbildungssemPrestudentUngleichAusbildungssemStatus'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getAusbildungssemPrestudentUngleichAusbildungssemStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->ausbildungssemprestudentungleichausbildungssemstatus->getAusbildungssemPrestudentUngleichAusbildungssemStatus( + $params['studiensemester_kurzbz'], + null, + $params['prestudent_id'] + ); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php index 5cd8b7027..cbce2b01e 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0004.php @@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0004 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/InaktiverStudentAktiverStatus'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getInaktiverStudentAktiverStatus($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->inaktiverstudentaktiverstatus->getInaktiverStudentAktiverStatus( + $params['studiensemester_kurzbz'], + null, + $params['prestudent_id'] + ); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php index 420021289..f5e265194 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0005.php @@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0005 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/InskriptionVorLetzerBismeldung'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->inskriptionvorletzerbismeldung->getInskriptionVorLetzerBismeldung($params['studiensemester_kurzbz'], null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php index 64e28ddc8..94658ec9c 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0006.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0006 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/DatumStudiensemesterFalscheReihenfolge'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']); + $checkRes = $this->_ci->datumstudiensemesterfalschereihenfolge->getDatumStudiensemesterFalscheReihenfolge(null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php index 68523b53b..3a2575e53 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0007.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0007 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/AktiverStudentOhneStatus'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getAktiverStudentOhneStatus(null, $params['prestudent_id']); + $checkRes = $this->_ci->aktiverstudentohnestatus->getAktiverStudentOhneStatus(null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php index 940cb9b4c..53bfd72a6 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0008.php @@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0008 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/StudienplanUngueltig'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->studienplanungueltig->getStudienplanUngueltig($params['studiensemester_kurzbz'], null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php index c55e4a9cc..816b7e933 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0009.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0009 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/FalscheAnzahlAbschlusspruefungen'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']); + $checkRes = $this->_ci->falscheanzahlabschlusspruefungen->getFalscheAnzahlAbschlusspruefungen(null, null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php index 8da8e9c1d..b31fb872a 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0010.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0010 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/DatumAbschlusspruefungFehlt'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']); + $checkRes = $this->_ci->datumabschlusspruefungfehlt->getDatumAbschlusspruefungFehlt(null, null, $params['abschlusspruefung_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php index 6568d0b3e..9dff0181e 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0011.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0011 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/DatumSponsionFehlt'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']); + $checkRes = $this->_ci->datumsponsionfehlt->getDatumSponsionFehlt(null, null, $params['abschlusspruefung_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php index d331ef6a2..7fe5dbde4 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0012.php @@ -17,10 +17,14 @@ class CORE_STUDENTSTATUS_0012 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/BewerberNichtZumRtAngetreten'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getBewerberNichtZumRtAngetreten($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->bewerbernichtzumrtangetreten->getBewerberNichtZumRtAngetreten( + $params['studiensemester_kurzbz'], + null, + $params['prestudent_id'] + ); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php index e57b0aea0..86e8b75b1 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0013.php @@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0013 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/AktSemesterNull'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']); + $checkRes = $this->_ci->aktsemesternull->getAktSemesterNull($params['studiensemester_kurzbz'], null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php index b58736f66..4b542cf0a 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0014.php @@ -14,10 +14,10 @@ class CORE_STUDENTSTATUS_0014 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/AbschlussstatusFehlt'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getAbschlussstatusFehlt(null, null, $params['prestudent_id']); + $checkRes = $this->_ci->abschlussstatusfehlt->getAbschlussstatusFehlt(null, null, $params['prestudent_id']); if (isError($checkRes)) return $checkRes; diff --git a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php index aafee1124..37e42ec0a 100644 --- a/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php +++ b/application/libraries/issues/resolvers/CORE_STUDENTSTATUS_0015.php @@ -17,10 +17,10 @@ class CORE_STUDENTSTATUS_0015 implements IIssueResolvedChecker $this->_ci =& get_instance(); // get code igniter instance - $this->_ci->load->library('issues/PlausicheckLib'); + $this->_ci->load->library('issues/plausichecks/AktiverStudentstatusOhneKontobuchung'); // check if issue persists - $checkRes = $this->_ci->plausichecklib->getAktiverStudentstatusOhneKontobuchung( + $checkRes = $this->_ci->aktiverstudentstatusohnekontobuchung->getAktiverStudentstatusOhneKontobuchung( $params['studiensemester_kurzbz'], null, $params['prestudent_id'] diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php index 635fd9da9..0414ddbf6 100644 --- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php @@ -25,6 +25,7 @@ SELECT lv_oe_kurzbz, lektor, stunden, + stundensatz, betrag, vertrag_id, vertrag_stunden, @@ -149,6 +150,7 @@ FROM END AS "lv_oe_kurzbz", (person.nachname || \' \' || person.vorname) AS "lektor", TRUNC(lema.semesterstunden, 1) AS "stunden", + lema.stundensatz, TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag", vertrag_id, vertragsstunden AS "vertrag_stunden", @@ -270,6 +272,7 @@ FROM END AS "lv_oe_kurzbz", (nachname || \' \' || vorname) AS "lektor", TRUNC(pb.stunden, 1) AS "stunden", + pb.stundensatz, TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag", vertrag_id, vertragsstunden AS "vertrag_stunden", @@ -325,6 +328,7 @@ $filterWidgetArray = array( ucfirst($this->p->t('lehre', 'organisationseinheit')), ucfirst($this->p->t('lehre', 'lektor')), ucfirst($this->p->t('ui', 'stunden')), + ucfirst($this->p->t('ui', 'stundensatz')), ucfirst($this->p->t('ui', 'betrag')), ucfirst($this->p->t('ui', 'vertrag')). '-ID', ucfirst($this->p->t('ui', 'vertrag')). '-'. ucfirst($this->p->t('ui', 'stunden')), @@ -399,6 +403,8 @@ $filterWidgetArray = array( stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1}, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator, bottomCalc:"sum", bottomCalcParams:{precision:1}}, + stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber, + headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator}, betrag: {align:"right", formatter: form_formatNulltoStringNumber, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator, bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}}, diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php index c272c392c..5a2ad98bd 100644 --- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php +++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php @@ -435,7 +435,7 @@ $filterWidgetArray = array( stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1}, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator, bottomCalc:"sum", bottomCalcParams:{precision:1}}, - stundensatz: {visible: false, align:"right", formatter: form_formatNulltoStringNumber, + stundensatz: {visible: true, align:"right", formatter: form_formatNulltoStringNumber, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator}, betrag: {align:"right", formatter: form_formatNulltoStringNumber, headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator, diff --git a/application/views/system/issues/issuesKonfiguration.php b/application/views/system/issues/issuesKonfiguration.php index 8b07157d2..dbd62a26a 100644 --- a/application/views/system/issues/issuesKonfiguration.php +++ b/application/views/system/issues/issuesKonfiguration.php @@ -82,6 +82,9 @@ $this->load->view( + diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteeintragen.php b/cis/private/lehre/benotungstool/lvgesamtnoteeintragen.php index 73d0e6fca..8337b7c36 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteeintragen.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteeintragen.php @@ -98,9 +98,9 @@ if($stsem=='') //$note = $_REQUEST["note"]; -if(!$rechte->isBerechtigt('admin',0) && - !$rechte->isBerechtigt('admin',$lv_obj->studiengang_kz) && - !$rechte->isBerechtigt('lehre',$lv_obj->studiengang_kz)) +if(!$rechte->isBerechtigt('admin', 0) && + !$rechte->isBerechtigt('admin', $lv_obj->studiengang_kz) && + !$rechte->isBerechtigt('lehre', $lv_obj->studiengang_kz)) { $qry = "SELECT lehreinheit_id FROM lehre.tbl_lehrveranstaltung JOIN lehre.tbl_lehreinheit USING(lehrveranstaltung_id) JOIN lehre.tbl_lehreinheitmitarbeiter USING(lehreinheit_id) @@ -117,11 +117,11 @@ if(!$rechte->isBerechtigt('admin',0) && } } -function savenote($db,$lvid, $student_uid, $note, $punkte=null) +function savenote($db, $lvid, $student_uid, $note, $punkte = null) { global $stsem, $user, $p, $noten_anmerkung; $jetzt = date("Y-m-d H:i:s"); - $punkte = str_replace(',','.',$punkte); + $punkte = str_replace(',', '.', $punkte); //Ermitteln ob der Student diesem Kurs zugeteilt ist $qry = "SELECT 1 FROM campus.vw_student_lehrveranstaltung WHERE uid=".$db->db_add_param($student_uid)." AND lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER); if($result = $db->db_query($qry)) @@ -207,13 +207,12 @@ if (isset($_REQUEST["submit"])) $note = $_REQUEST["note"]; $punkte = (isset($_REQUEST["punkte"])?$_REQUEST["punkte"]:''); - $response = savenote($db,$lvid, $student_uid, $note, $punkte); + $response = savenote($db, $lvid, $student_uid, $note, $punkte); echo $response; } else { - - foreach ($_POST as $row=>$val) + foreach ($_POST as $row => $val) { if(mb_strstr(mb_strtolower($row), 'matrikelnr_')) { @@ -232,7 +231,7 @@ if (isset($_REQUEST["submit"])) $response.="\nNote oder Punkte fehlen"; continue; } - $punkte=str_replace(',','.', $punkte); + $punkte=str_replace(',', '.', $punkte); //check ob statt Matrikelnummer nicht bereits student_uid (Moodle Grade Import) vorliegt.. $student = new student(); @@ -241,7 +240,7 @@ if (isset($_REQUEST["submit"])) //UID ermitteln if(!$student_uid = $student->getUidFromMatrikelnummer($matrikelnummer)) { - $response.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht',array($matrikelnummer)); + $response.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht', array($matrikelnummer)); continue; } } @@ -268,7 +267,7 @@ if (isset($_REQUEST["submit"])) } } - $val=savenote($db,$lvid, $student_uid, $note, $punkte); + $val=savenote($db, $lvid, $student_uid, $note, $punkte); if($val!='neu' && $val!='update' && $val!='update_f') $response.=$val; } diff --git a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php index ddf3c54e4..6dce2b6ae 100644 --- a/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php +++ b/cis/private/lehre/benotungstool/lvgesamtnoteverwalten.php @@ -20,33 +20,33 @@ * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > * Manuela Thamer */ -require_once ('../../../../config/cis.config.inc.php'); -require_once ('../../../../config/global.config.inc.php'); -require_once ('../../../../include/functions.inc.php'); -require_once ('../../../../include/lehrveranstaltung.class.php'); -require_once ('../../../../include/studiengang.class.php'); -require_once ('../../../../include/studiensemester.class.php'); -require_once ('../../../../include/lehreinheit.class.php'); -require_once ('../../../../include/benutzerberechtigung.class.php'); -require_once ('../../../../include/uebung.class.php'); -require_once ('../../../../include/beispiel.class.php'); -require_once ('../../../../include/studentnote.class.php'); -require_once ('../../../../include/datum.class.php'); -require_once ('../../../../include/legesamtnote.class.php'); -require_once ('../../../../include/lvgesamtnote.class.php'); -require_once ('../../../../include/zeugnisnote.class.php'); -require_once ('../../../../include/pruefung.class.php'); -require_once ('../../../../include/person.class.php'); -require_once ('../../../../include/benutzer.class.php'); -require_once ('../../../../include/mitarbeiter.class.php'); -require_once ('../../../../include/mail.class.php'); -require_once ('../../../../include/phrasen.class.php'); -require_once ('../../../../include/note.class.php'); -require_once ('../../../../include/notenschluessel.class.php'); -require_once ('../../../../include/studienplan.class.php'); -require_once ('../../../../include/addon.class.php'); -require_once ('../../../../include/mobilitaet.class.php'); -require_once ('../../../../include/student.class.php'); +require_once('../../../../config/cis.config.inc.php'); +require_once('../../../../config/global.config.inc.php'); +require_once('../../../../include/functions.inc.php'); +require_once('../../../../include/lehrveranstaltung.class.php'); +require_once('../../../../include/studiengang.class.php'); +require_once('../../../../include/studiensemester.class.php'); +require_once('../../../../include/lehreinheit.class.php'); +require_once('../../../../include/benutzerberechtigung.class.php'); +require_once('../../../../include/uebung.class.php'); +require_once('../../../../include/beispiel.class.php'); +require_once('../../../../include/studentnote.class.php'); +require_once('../../../../include/datum.class.php'); +require_once('../../../../include/legesamtnote.class.php'); +require_once('../../../../include/lvgesamtnote.class.php'); +require_once('../../../../include/zeugnisnote.class.php'); +require_once('../../../../include/pruefung.class.php'); +require_once('../../../../include/person.class.php'); +require_once('../../../../include/benutzer.class.php'); +require_once('../../../../include/mitarbeiter.class.php'); +require_once('../../../../include/mail.class.php'); +require_once('../../../../include/phrasen.class.php'); +require_once('../../../../include/note.class.php'); +require_once('../../../../include/notenschluessel.class.php'); +require_once('../../../../include/studienplan.class.php'); +require_once('../../../../include/addon.class.php'); +require_once('../../../../include/mobilitaet.class.php'); +require_once('../../../../include/student.class.php'); $summe_stud = 0; $summe_t2 = 0; @@ -104,6 +104,152 @@ $sprachen->getAll(true); $errormsg = ''; +// eingetragene lv-gesamtnoten freigeben +if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) +{ + // Passwort pruefen + if (checkldapuser($user, $_REQUEST['passwort'])) + { + $jetzt = date("Y-m-d H:i:s"); + $neuenoten = 0; + + $studlist = " + "; + + // entweder personenbezogene Daten einbinden + if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE) + { + $studlist .= " + + + + + "; + + if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) + { + $studlist .= "\n"; + } + $studlist .= "\n"; + + $studlist .= "\n"; + } + // oder anonymisiert nur die UIDs einbinden + else + { + $studlist .= " + \n + "; + } + + // studentenquery + $qry_stud = "SELECT + DISTINCT uid, vorname, nachname, matrikelnr, kurzbzlang + FROM + campus.vw_student_lehrveranstaltung + JOIN campus.vw_student USING(uid) + JOIN public.tbl_studiengang ON campus.vw_student.studiengang_kz = public.tbl_studiengang.studiengang_kz + WHERE + studiensemester_kurzbz = " . $db->db_add_param($stsem) . " + AND lehrveranstaltung_id = " . $db->db_add_param($lvid, FHC_INTEGER) . " + ORDER BY nachname, vorname "; + if ($result_stud = $db->db_query($qry_stud)) + { + $i = 1; + while ($row_stud = $db->db_fetch_object($result_stud)) + { + $lvgesamtnote = new lvgesamtnote(); + if ($lvgesamtnote->load($lvid, $row_stud->uid, $stsem)) + { + if ($lvgesamtnote->benotungsdatum > $lvgesamtnote->freigabedatum) + { + $lvgesamtnote->freigabedatum = $jetzt; + $lvgesamtnote->freigabevon_uid = $user; + $lvgesamtnote->save(); + + if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE) + { + $studlist .= ""; + $studlist .= ""; + $studlist .= ""; + $studlist .= ""; + + if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) + { + $studlist .= "\n"; + } + $studlist .= ""; + + $studlist .= "\n"; + } + else + { + $studlist .= "\n"; + } + + $neuenoten ++; + } + } + } + } + + $studlist .= "
" . $p->t('global/personenkz') . "" . $p->t('global/studiengang') . "" . $p->t('global/nachname') . "" . $p->t('global/vorname') . "" . $p->t('benotungstool/punkte') . "" . $p->t('benotungstool/note') . "" . $p->t('benotungstool/bearbeitetvon') . "
" . $p->t('global/uid') . "
" . trim($row_stud->matrikelnr) . "" . trim($row_stud->kurzbzlang) . "" . trim($row_stud->nachname) . "" . trim($row_stud->vorname) . ""; + if ($lvgesamtnote->punkte != '') + $studlist .= trim(number_format($lvgesamtnote->punkte, 2)); + $studlist .= "" . $noten_array[trim($lvgesamtnote->note)]['bezeichnung_mehrsprachig'][$sprache] . "" . $lvgesamtnote->mitarbeiter_uid; + if ($lvgesamtnote->updatevon != '') + $studlist .= " (" . $lvgesamtnote->updatevon . ")"; + $studlist .= "
" . trim($row_stud->uid) . "
"; + + // mail an assistentin und den user selber verschicken + if ($neuenoten > 0) + { + $lv = new lehrveranstaltung($lvid); + $sg = new studiengang($lv->studiengang_kz); + $lektor_adresse = $user . "@" . DOMAIN; + $adressen = $sg->email . ", " . $user . "@" . DOMAIN; + + $studienplan = new studienplan(); + $studienplan->getStudienplanLehrveranstaltung($lvid, $stsem); + $studienplan_bezeichnung = ''; + foreach ($studienplan->result as $row) + $studienplan_bezeichnung .= $row->bezeichnung . ' '; + + $mit = new mitarbeiter(); + $mit->load($user); + $name = $mit->anrede.' '.$mit->vorname.' '.$mit->nachname.' ('.$mit->kurzbz.')'; + + $betreff = 'Notenfreigabe ' . $lv->bezeichnung . ' ' . $lv->orgform_kurzbz . ' - ' . $studienplan_bezeichnung; + $mail = new mail($adressen, 'vilesci@' . DOMAIN, $betreff, ''); + $htmlcontent = " + + $name hat neue Noten für die Lehrveranstaltung\n\n
+ " . $sg->kuerzel . ' ' . $lv->semester . '.Semester + ' . $lv->bezeichnung . " " . $lv->orgform_kurzbz . " - " . $stsem . " +
eingetragen.\n

+ Die Noten können jetzt ins Zeugnis übernommen werden.\n"; + + $htmlcontent .= $studlist; + + $htmlcontent.= " +
Anzahl der Noten:" . $neuenoten . " +

" . $p->t('abgabetool/mailVerschicktAn') . ": " . $adressen . " + "; + $mail->setHTMLContent($htmlcontent); + $mail->setReplyTo($lektor_adresse); + $mail->send(); + } + + http_response_code(303); + header('Location: ' . $_SERVER['REQUEST_URI']); + exit; + } + else + { + $errormsg = $p->t('gesamtnote/passwortFalsch'); + } +} + echo ' @@ -145,8 +291,8 @@ echo ' position:absolute; top:100px; left:300px; - width:400px; - height:200px; + min-width:450px; + min-height:200px; background-color:#cccccc; visibility:hidden; border-style:solid; @@ -190,11 +336,14 @@ foreach ($noten_obj->result as $row) $noten_array[$row->note]['lehre'] = $row->lehre; $noten_array[$row->note]['lkt_ueberschreibbar'] = $row->lkt_ueberschreibbar; $noten_array[$row->note]['anmerkung'] = $row->anmerkung; - foreach ($sprachen->result AS $s) + foreach ($sprachen->result as $s) $noten_array[$row->note]['bezeichnung_mehrsprachig'][$s->sprache] = $row->bezeichnung_mehrsprachig[$s->sprache]; } ?> + + const CIS_GESAMTNOTE_PUNKTE = ; + function getOffset(pos) { var x,y; @@ -376,7 +525,7 @@ foreach ($noten_obj->result as $row) var datum_test = datum.split("."); if (datum_test[0].length != 2 || datum_test[1].length != 2 || datum_test[2].length!=4 || isNaN(datum_test[2]) || datum_test[1]>12 || datum_test[1]<1 || datum_test[0]>31 || datum_test[0]<1) - alert("Invalid Date Format: DD.MM.YYYY"); + alert("Das Datum entspricht nicht dem Format TT.MM.JJJJ!"); else { var anlegendiv = document.getElementById("nachpruefung_div"); @@ -402,6 +551,7 @@ foreach ($noten_obj->result as $row) url += '&typ='+typ; url += '&'+ts; + $.ajax({ type:"GET", url: url, @@ -593,8 +743,8 @@ foreach ($noten_obj->result as $row) str += "X"; var anlegendiv = document.getElementById("nachpruefung_div"); var y = getOffset('y'); y = y+50; anlegendiv.style.top = y+"px"; - str += 't('benotungstool/importAnweisung');?>:'; - str += ''; + str += '
t('benotungstool/importAnweisung');?>:
'; + str += ''; str += "' onclick='saveGradeBulk();'>"; str += ""; anlegendiv.innerHTML = str; @@ -602,6 +752,25 @@ foreach ($noten_obj->result as $row) $('#noteimporttextarea').focus(); } + // **** + // * Oeffnet ein Fenster fuer den Import von Noten für die Nachprüfung aus dem Excel + // **** + function GradeImportNachp(termin) + { + var str = "
"; + str += ""; + var anlegendiv = document.getElementById("nachpruefung_div"); + var y = getOffset('y'); y = y+50; anlegendiv.style.top = y+"px"; + str += ''; + str += ''; + + str += "
X
t('benotungstool/importAnweisungNachp');?>:
' onclick='saveGradeBulkNachp(\""+ termin +"\");'>"; + str += "
"; + anlegendiv.innerHTML = str; + anlegendiv.style.visibility = "visible"; + $('#noteimporttextareaNachp').focus(); + } + // Speichert die Noten ueber den Import function saveGradeBulk() { @@ -633,33 +802,48 @@ foreach ($noten_obj->result as $row) } ?> + var linenumber = 0; for(row in rows) { - zeile = rows[row].split(" "); - - - - if (zeile[0]!='' && zeile[1]!='') + linenumber++; + if( rows[row] == '' ) { - gradedata['matrikelnr_'+i]=zeile[0]; - - - i++; + //skip empty lines + continue; } + zeile = rows[row].split(" "); + + if( zeile.length < 2 ) + { + alertMsg = alertMsg + "Zeile " + linenumber + ': ' + + 'Zu wenig Paramter - 2 erforderlich. ' + + 'Die Zeile wurde uebersprungen.' + "\n\n"; + continue; + } + + if (CIS_GESAMTNOTE_PUNKTE == false) + { + // check for valid grades + if (validGrades.indexOf(zeile[1]) === -1) + { + alertMsg = alertMsg + "Zeile " + linenumber + ': ' + + "Die Note "+zeile[1]+" ist nicht zulaessig. " + + "Die Zeile wurde uebersprungen. \n\n"; + continue; + } + } + + gradedata['matrikelnr_'+i]=zeile[0]; + if (CIS_GESAMTNOTE_PUNKTE) + { + gradedata['punkte_'+i]= zeile[1]; + } + else + { + gradedata['note_'+i]= zeile[1]; + } + + i++; } if (alertMsg != "") @@ -698,6 +882,142 @@ foreach ($noten_obj->result as $row) } } + // Speichert die Noten der Nachprüfung ueber den Import + function saveGradeBulkNachp(typ) + { + data = $('#noteimporttextareaNachp').val(); + closeDiv(); + + //Reihen ermitteln + var rows = data.split("\n"); + var i=0; + var params=''; + alertMsg = ''; + + var gradedata = {}; + var validGrades = ''; + + result as $row_note) + { + if ($row_note->lehre && $row_note->aktiv) + $gradesArray[] = '"' . $row_note->anmerkung . '"'; + } + // Output JS variable with valid grades + echo 'var validGrades = [' . implode(',', $gradesArray) . '];'; + } + ?> + + var linenumber = 0; + for(row in rows) + { + linenumber++; + if( rows[row] == '' ) + { + //skip empty lines + continue; + } + zeile = rows[row].split(" "); + + if( zeile.length < 3 ) + { + alertMsg = alertMsg + "Zeile " + linenumber + ': ' + + 'Zu wenig Paramter - 3 erforderlich. ' + + 'Die Zeile wurde uebersprungen.' + "\n\n"; + continue; + } + + if( zeile[1] == '' && zeile[2] == '' ) + { + // ignore lines just copied from excel + continue; + } + + if( zeile[2] == '' ) + { + alertMsg = alertMsg + "Zeile " + linenumber + ': ' + + "Die Note oder Punkte fehlen. " + + "Die Zeile wurde uebersprungen. \n\n"; + continue; + } + + if (CIS_GESAMTNOTE_PUNKTE == false) + { + // check for valid grades + if (validGrades.indexOf(zeile[2]) === -1) + { + alertMsg = alertMsg + "Zeile " + linenumber + ': ' + + "Die Note "+zeile[2]+" ist nicht zulaessig. " + + "Die Zeile wurde uebersprungen. \n\n"; + continue; + } + } + + if( !zeile[1].match(/[0-9]{2}\.[0-9]{2}\.[0-9]{4}/) ) + { + alertMsg = alertMsg + "Zeile " + linenumber + ': ' + + "Das Datum "+zeile[1]+" fehlt oder ist nicht zulaessig. " + + "Die Zeile wurde uebersprungen. \n\n"; + continue; + } + + gradedata['student_uid_'+i]=zeile[0]; + gradedata['datumNachp_'+i]=zeile[1]; + if (CIS_GESAMTNOTE_PUNKTE) + { + gradedata['punkte_'+i]= zeile[2]; + } + else + { + gradedata['note_'+i]= zeile[2]; + } + i++; + } + + + if (alertMsg != "") + alert(alertMsg); + + if (i>0) + { + + var jetzt = new Date(); + var ts = jetzt.getTime(); + var url= ''; + url += '&sammel=1'; + url += '&typ=' + typ; + url += '&submit=1&'+ts; + $.ajax({ + type:"POST", + url: url, + data: gradedata, + success:function(result) + { + var resp = result; + if (resp!='') + { + alert(resp); + } + window.location.reload(); + }, + error:function(result) + { + alert('Request Nachprüfung fehlgeschlagen'); + } + }); + + } + else + { + alert('t('benotungstool/hilfeImport');?>'); + } + } + //--> @@ -803,149 +1123,6 @@ if (defined('CIS_ANWESENHEITSLISTE_NOTENLISTE_ANZEIGEN') && CIS_ANWESENHEITSLIST { $hrefpath = "../notenliste.xls.php?stg=$stg_obj->studiengang_kz&lvid=$lvid&stsem=$stsem"; echo "
" . $p->t('benotungstool/notenlisteImport') . ""; - -} - -// eingetragene lv-gesamtnoten freigeben -if (isset($_REQUEST["freigabe"]) && ($_REQUEST["freigabe"] == 1)) -{ - // Passwort pruefen - if (checkldapuser($user, $_REQUEST['passwort'])) - { - $jetzt = date("Y-m-d H:i:s"); - $neuenoten = 0; - - $studlist = " - "; - - // entweder personenbezogene Daten einbinden - if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE) - { - $studlist .= " - - - - - "; - - if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) - { - $studlist .= "\n"; - } - $studlist .= "\n"; - - $studlist .= "\n"; - } - // oder anonymisiert nur die UIDs einbinden - else - { - $studlist .= " - \n - "; - } - - // studentenquery - $qry_stud = "SELECT - DISTINCT uid, vorname, nachname, matrikelnr, kurzbzlang - FROM - campus.vw_student_lehrveranstaltung - JOIN campus.vw_student USING(uid) - JOIN public.tbl_studiengang ON campus.vw_student.studiengang_kz = public.tbl_studiengang.studiengang_kz - WHERE - studiensemester_kurzbz = " . $db->db_add_param($stsem) . " - AND lehrveranstaltung_id = " . $db->db_add_param($lvid, FHC_INTEGER) . " - ORDER BY nachname, vorname "; - if ($result_stud = $db->db_query($qry_stud)) - { - $i = 1; - while ($row_stud = $db->db_fetch_object($result_stud)) - { - $lvgesamtnote = new lvgesamtnote(); - if ($lvgesamtnote->load($lvid, $row_stud->uid, $stsem)) - { - if ($lvgesamtnote->benotungsdatum > $lvgesamtnote->freigabedatum) - { - $lvgesamtnote->freigabedatum = $jetzt; - $lvgesamtnote->freigabevon_uid = $user; - $lvgesamtnote->save(); - - if (defined('CIS_GESAMTNOTE_FREIGABEMAIL_NOTE') && CIS_GESAMTNOTE_FREIGABEMAIL_NOTE) - { - $studlist .= ""; - $studlist .= ""; - $studlist .= ""; - $studlist .= ""; - - if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) - { - $studlist .= "\n"; - } - $studlist .= ""; - - $studlist .= "\n"; - } - else - { - $studlist .= "\n"; - } - - $neuenoten ++; - } - } - } - } - - $studlist .= "
" . $p->t('global/personenkz') . "" . $p->t('global/studiengang') . "" . $p->t('global/nachname') . "" . $p->t('global/vorname') . "" . $p->t('benotungstool/punkte') . "" . $p->t('benotungstool/note') . "" . $p->t('benotungstool/bearbeitetvon') . "
" . $p->t('global/uid') . "
" . trim($row_stud->matrikelnr) . "" . trim($row_stud->kurzbzlang) . "" . trim($row_stud->nachname) . "" . trim($row_stud->vorname) . ""; - if ($lvgesamtnote->punkte != '') - $studlist .= trim(number_format($lvgesamtnote->punkte, 2)); - $studlist .= "" . $noten_array[trim($lvgesamtnote->note)]['bezeichnung_mehrsprachig'][$sprache] . "" . $lvgesamtnote->mitarbeiter_uid; - if ($lvgesamtnote->updatevon != '') - $studlist .= " (" . $lvgesamtnote->updatevon . ")"; - $studlist .= "
" . trim($row_stud->uid) . "
"; - - // mail an assistentin und den user selber verschicken - if ($neuenoten > 0) - { - $lv = new lehrveranstaltung($lvid); - $sg = new studiengang($lv->studiengang_kz); - $lektor_adresse = $user . "@" . DOMAIN; - $adressen = $sg->email . ", " . $user . "@" . DOMAIN; - - $studienplan = new studienplan(); - $studienplan->getStudienplanLehrveranstaltung($lvid, $stsem); - $studienplan_bezeichnung = ''; - foreach ($studienplan->result as $row) - $studienplan_bezeichnung .= $row->bezeichnung . ' '; - - $mit = new mitarbeiter(); - $mit->load($user); - $name = $mit->anrede.' '.$mit->vorname.' '.$mit->nachname.' ('.$mit->kurzbz.')'; - - $betreff = 'Notenfreigabe ' . $lv->bezeichnung . ' ' . $lv->orgform_kurzbz . ' - ' . $studienplan_bezeichnung; - $mail = new mail($adressen, 'no-reply@' . DOMAIN, $betreff, ''); - $htmlcontent = " - - $name hat neue Noten für die Lehrveranstaltung\n\n
- " . $sg->kuerzel . ' ' . $lv->semester . '.Semester - ' . $lv->bezeichnung . " " . $lv->orgform_kurzbz . " - " . $stsem . " -
eingetragen.\n

- Die Noten können jetzt ins Zeugnis übernommen werden.\n"; - - $htmlcontent .= $studlist; - - $htmlcontent.= " -
Anzahl der Noten: " . $neuenoten . " -

" . $p->t('abgabetool/mailVerschicktAn') . ": " . $adressen . " - "; - $mail->setHTMLContent($htmlcontent); - $mail->setReplyTo($lektor_adresse); - $mail->send(); - } - } - else - { - $errormsg = $p->t('gesamtnote/passwortFalsch'); - } } if (defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) @@ -1052,11 +1229,15 @@ $htmlstring .= "" . $p->t('benotungstool/punkte') . ' / ' . $p->t('benotungs if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) { - $htmlstring .= "" . $p->t('benotungstool/nachpruefung') . ""; + $htmlstring .= "
" . $p->t('benotungstool/nachpruefung') . "
+ + "; } if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) { - $htmlstring .= "" . $p->t('benotungstool/nachpruefung2') . ""; + $htmlstring .= "
" . $p->t('benotungstool/nachpruefung2') . "
+ + "; } if (defined('CIS_GESAMTNOTE_PRUEFUNG_KOMMPRUEF') && CIS_GESAMTNOTE_PRUEFUNG_KOMMPRUEF) { @@ -1184,7 +1365,7 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG foreach ($addon_obj->result as $row) { if (file_exists('../../../../addons/' . $row->kurzbz . '/cis/grades.inc.php')) - include ('../../../../addons/' . $row->kurzbz . '/cis/grades.inc.php'); + include('../../../../addons/' . $row->kurzbz . '/cis/grades.inc.php'); } } } @@ -1193,7 +1374,6 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG foreach ($grades as $uid => $data) //Ausgabe Array { - $htmlstring .= ' ' . $db->convert_html_chars($uid) . ' @@ -1325,7 +1505,6 @@ if (defined("CIS_GESAMTNOTE_PRUEFUNG_MOODLE_LE_NOTE") && CIS_GESAMTNOTE_PRUEFUNG // Punkte if (CIS_GESAMTNOTE_PUNKTE) { - $htmlstring .= ' checkformatDatum($datum, 'Y-m-d', true) OR die('Invalid date format'); -} -else - die('Fehlerhafte Parameteruebergabe'); - -//Laden der Lehrveranstaltung -$lv_obj = new lehrveranstaltung(); -if(!$lv_obj->load($lvid)) - die($lv_obj->errormsg); - -//Studiengang laden -$stg_obj = new studiengang($lv_obj->studiengang_kz); + $lehreinheit_id_pr = $_GET['lehreinheit_id_pr']; if(isset($_GET['stsem'])) $stsem = $_GET['stsem']; else $stsem = ''; - -$uebung_id = (isset($_GET['uebung_id'])?$_GET['uebung_id']:''); -$uid = (isset($_GET['uid'])?$_GET['uid']:''); - //Studiensemester laden $stsem_obj = new studiensemester(); if($stsem=='') $stsem = $stsem_obj->getaktorNext(); -$student_uid = $_REQUEST["student_uid"]; - -$note = $_REQUEST["note"]; -if(isset($_REQUEST['punkte'])) - $punkte = $_REQUEST['punkte']; -else - $punkte = ''; - -$punkte = str_replace(',','.',$punkte); - -if($punkte!='') +//Notenanmerkung für Eintragung von nichtnumerischen Noten wie en (entschuldigt), ue(unentschuldigt) +$noten_anmerkung = array(); +$noten_arr = array(); +$note_obj = new note(); +$note_obj->getAll(); +foreach($note_obj->result as $row) { - // Bei Punkteeingabe wird die Note nochmals geprueft und ggf korrigiert - $notenschluessel = new notenschluessel(); - $note_pruef = $notenschluessel->getNote($punkte, $lvid, $stsem); - if($note_pruef!=$note) - { - $note = $note_pruef; - $note_dirty=true; - } + $noten_anmerkung[$row->anmerkung] = $row->note; + $noten_arr[$row->note] = $row; } if(!isset($_GET['typ'])) @@ -122,22 +97,177 @@ if(!isset($_GET['typ'])) } else { - if(in_array($_GET['typ'],array('Termin2','Termin3'))) + if(in_array($_GET['typ'], array('Termin2', 'Termin3'))) $typ=$_GET['typ']; else die('Typ ist ungueltig'); } -if($note=='') - $note = 9; - -$old_note = $note; - -// lvgesamtnote für studenten speichern -if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '') ) +if (isset($_REQUEST['sammel']) && $_REQUEST["sammel"] == 1) +{ + $errorMatrnr = ''; + $errorDatum = ''; + $errorNachp = ''; + + foreach ($_POST as $row => $val) + { + if(mb_strstr(mb_strtolower($row), 'student_uid_')) + { + $id=mb_substr($row, mb_strlen('student_uid_')); + + $student_uid = $_POST['student_uid_'.$id]; + $note = null; + $punkte = null; + $datum = null; + $response = ''; + if(isset($_POST['note_'.$id])) + $note = $_POST['note_'.$id]; + elseif(isset($_POST['punkte_'.$id])) + $punkte = $_POST['punkte_'.$id]; + else + { + $response.="\nNote oder Punkte fehlen"; + continue; + } + $punkte=str_replace(',', '.', $punkte); + if($punkte!='') + { + // Bei Punkteeingabe wird die Note nochmals geprueft und ggf korrigiert + $notenschluessel = new notenschluessel(); + $note_pruef = $notenschluessel->getNote($punkte, $lvid, $stsem); + if($note_pruef!=$note) + { + $note = $note_pruef; + $note_dirty=true; + } + } + + $datum = $_POST['datumNachp_'.$id]; + //check Datumsformat + $checkedDatum = $datum; + $datum_obj = new datum(); + if(!$datum = $datum_obj->checkformatDatum($datum, 'Y-m-d', true)) + { + $errorDatum .="\n".$p->t('benotungstool/datumsformatUnzulaessig', array($checkedDatum)); + continue; + } + + //check ob Matrikelnummer anstelle der student_uid übergeben wurde + $student = new student(); + if (!$student->checkIfValidStudentUID($student_uid)) + { + $checkedMatrnr = $student_uid; + //UID ermitteln + if(!$student_uid = $student->getUidFromMatrikelnummer($student_uid)) + { + $errorMatrnr.="\n".$p->t('benotungstool/studentMitMatrikelnummerExistiertNicht', array($checkedMatrnr)); + continue; + } + } + + //check ob eine Note vorhanden ist oder (intern) angerechnet wurde + $lvnote = new lvgesamtnote(); + if (!$lvnote->load($lvid, $student_uid, $stsem)) + { + $errorNachp.="\n".$p->t('benotungstool/NachpruefungNichtZulaessig', array($student_uid)); + continue; + } + + $lehreinheit_id = getLehreinheit($db, $lvid, $student_uid, $stsem); + + if(isset($_POST['student_uid_'.$id]) && (isset($_POST['note_'.$id]) || isset($_POST['punkte_'.$id])) && isset($_POST['datumNachp_'.$id])) + { + if(!is_numeric($note)) + { + if(isset($noten_anmerkung[$note])) + $note = $noten_anmerkung[$note]; + } + $response = savePruefung($lvid, $student_uid, $stsem, $lehreinheit_id, $datum, $typ, $note, $punkte); + if($response!='neu' && $response!='update' && $response!='update_f') + { + echo $response; + } + } + else + { + echo "\n fehlende oder fehlerhafte Inputparameter"; + } + } + } + echo $errorMatrnr . $errorDatum . $errorNachp; +} +else +{ + // Einzelupdate + + if(isset($_GET['datum'])) + { + $datum = $_GET['datum']; + $datum_obj = new datum(); + $datum = $datum_obj->checkformatDatum($datum, 'Y-m-d', true) or die($p->t('benotungstool/datumsformatUnzulaessig', array($checkedDatum))); + } + $student_uid = $_REQUEST["student_uid"]; + + $note = $_REQUEST["note"]; + if(isset($_REQUEST['punkte'])) + $punkte = $_REQUEST['punkte']; + else + $punkte = ''; + + $punkte = str_replace(',', '.', $punkte); + + if($punkte!='') + { + // Bei Punkteeingabe wird die Note nochmals geprueft und ggf korrigiert + $notenschluessel = new notenschluessel(); + $note_pruef = $notenschluessel->getNote($punkte, $lvid, $stsem); + if($note_pruef!=$note) + { + $note = $note_pruef; + $note_dirty=true; + } + } + + if($note=='') + $note = 9; + + $old_note = $note; + + //Laden der Lehrveranstaltung + $lv_obj = new lehrveranstaltung(); + if(!$lv_obj->load($lvid)) + die($lv_obj->errormsg); + + //Studiengang laden + $stg_obj = new studiengang($lv_obj->studiengang_kz); + + $uebung_id = (isset($_GET['uebung_id'])?$_GET['uebung_id']:''); + $uid = (isset($_GET['uid'])?$_GET['uid']:''); + + // lvgesamtnote für studenten speichern + if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '')) + { + // Die Pruefung muss einer Lehreinheit zugeordnet werden + // deshalb wird hier versucht eine passende Lehreinheit zu ermitteln. + $lehreinheit_id = getLehreinheit($db, $lvid, $student_uid, $stsem); + + $response = savePruefung($lvid, $student_uid, $stsem, $lehreinheit_id, $datum, $typ, $note); + echo $response; + } + else + echo "Fehler beim Eintragen der Prüfungen"; +} + +/** + * Berechnet Lehreinheit auf Basis LV-Daten + * @param string $db Datenbankvariable + * @param string $student_uid student_uid + * @param int $lvid Lehrveranstaltungsid + * @param string $stsem Studiensemester im Format 'WSYYYY' + * @return String LehreinheitId + */ +function getLehreinheit($db, $lvid, $student_uid, $stsem) { - // Die Pruefung muss einer Lehreinheit zugeordnet werden - // deshalb wird hier versucht eine passende Lehreinheit zu ermitteln. $le_arr = array(); $qry_stud = "SELECT lehreinheit_id, lehrform_kurzbz FROM @@ -158,104 +288,159 @@ if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '') ) } } - if (!in_array($lehreinheit_id,$le_arr)) + //if (!in_array($lehreinheit_id,$le_arr)) $lehreinheit_id = $le_arr[0]; + return $lehreinheit_id; +} + +/** + * Prüfung speichern + */ +function savePruefung($lvid, $student_uid, $stsem, $lehreinheit_id, $datum, $typ, $note, $punkte = null) +{ $jetzt = date("Y-m-d H:i:s"); + global $user; //, $note, $punkte, $datum; - $pr = new Pruefung(); - - // Wenn eine Pruefung angelegt wird, wird zuerst eine Pruefung mit 1. Termin angelegt - // und dort die Zeugnisnote gespeichert - if($pr->getPruefungen($student_uid, "Termin1", $lvid, $stsem)) + if ($typ == "Termin2") { - if ($pr->result) + $pr = new Pruefung(); + // Wenn eine Pruefung angelegt wird, wird zuerst eine Pruefung mit 1. Termin angelegt + // und dort die Zeugnisnote gespeichert + if($pr->getPruefungen($student_uid, "Termin1", $lvid, $stsem)) { - $termin1 = 1; - } - else - { - $lvnote = new lvgesamtnote(); - if ($lvnote->load($lvid, $student_uid, $stsem)) + if ($pr->result) { - $pr_note = $lvnote->note; - $pr_punkte = $lvnote->punkte; - $benotungsdatum = $lvnote->benotungsdatum; + $termin1 = 1; } else { - $pr_note = 9; - $pr_punkte = ''; - $benotungsdatum = $jetzt; + $lvnote = new lvgesamtnote(); + if ($lvnote->load($lvid, $student_uid, $stsem)) + { + $pr_note = $lvnote->note; + $pr_punkte = $lvnote->punkte; + $benotungsdatum = $lvnote->benotungsdatum; + } + else + { + $pr_note = 9; + $pr_punkte = ''; + $benotungsdatum = $jetzt; + } + + $pr_1 = new Pruefung(); + $pr_1->lehreinheit_id = $lehreinheit_id; + $pr_1->student_uid = $student_uid; + $pr_1->mitarbeiter_uid = $user; + $pr_1->note = $pr_note; + $pr_1->punkte = $pr_punkte; + $pr_1->pruefungstyp_kurzbz = "Termin1"; + $pr_1->datum = $benotungsdatum; + $pr_1->anmerkung = ""; + $pr_1->insertamum = $jetzt; + $pr_1->insertvon = $user; + $pr_1->updateamum = null; + $pr_1->updatevon = null; + $pr_1->ext_id = null; + $pr_1->new = true; + $pr_1->save(); + $response = "neu T1"; } - $pr_1 = new Pruefung(); - $pr_1->lehreinheit_id = $lehreinheit_id; - $pr_1->student_uid = $student_uid; - $pr_1->mitarbeiter_uid = $user; - $pr_1->note = $pr_note; - $pr_1->punkte = $pr_punkte; - $pr_1->pruefungstyp_kurzbz = "Termin1"; - $pr_1->datum = $benotungsdatum; - $pr_1->anmerkung = ""; - $pr_1->insertamum = $jetzt; - $pr_1->insertvon = $user; - $pr_1->updateamum = null; - $pr_1->updatevon = null; - $pr_1->ext_id = null; - $pr_1->new = true; - $pr_1->save(); + $prTermin2 = new Pruefung(); + $pr_2 = new Pruefung(); + + // Die Pruefung wird als Termin2 eingetragen + if ($prTermin2->getPruefungen($student_uid, 'Termin2', $lvid, $stsem)) + { + if ($prTermin2->result) + { + $pr_2->load($prTermin2->result[0]->pruefung_id); + $pr_2->new = null; + $pr_2->updateamum = $jetzt; + $pr_2->updatevon = $user; + $old_note = $pr_2->note; + $pr_2->note = $note; + $pr_2->punkte = $punkte; + $pr_2->datum = $datum; + $pr_2->anmerkung = ""; + $response = "update T2"; + } + else + { + $pr_2->lehreinheit_id = $lehreinheit_id; + $pr_2->student_uid = $student_uid; + $pr_2->mitarbeiter_uid = $user; + $pr_2->note = $note; + $pr_2->punkte = $punkte; + $pr_2->pruefungstyp_kurzbz = $typ; + $pr_2->datum = $datum; + $pr_2->anmerkung = ""; + $pr_2->insertamum = $jetzt; + $pr_2->insertvon = $user; + $pr_2->updateamum = null; + $pr_2->updatevon = null; + $pr_2->ext_id = null; + $pr_2->new = true; + $old_note = -1; + $response = "new T2"; + } + $pr_2->save(); + } } } - - - $prTermin2 = new Pruefung(); - $pr_2 = new Pruefung(); - - // Die Pruefung wird als Termin2 eingetragen - if ($prTermin2->getPruefungen($student_uid, $typ, $lvid, $stsem)) + elseif ($typ == "Termin3") { - if ($prTermin2->result) + $prTermin3 = new Pruefung(); + $pr_3 = new Pruefung(); + + if ($prTermin3->getPruefungen($student_uid, 'Termin3', $lvid, $stsem)) { - $pr_2->load($prTermin2->result[0]->pruefung_id); - $pr_2->new = null; - $pr_2->updateamum = $jetzt; - $pr_2->updatevon = $user; - $old_note = $pr_2->note; - $pr_2->note = $note; - $pr_2->punkte = $punkte; - $pr_2->datum = $datum; - $pr_2->anmerkung = ""; + if ($prTermin3->result) + { + $pr_3->load($prTermin3->result[0]->pruefung_id); + $pr_3->new = null; + $pr_3->updateamum = $jetzt; + $pr_3->updatevon = $user; + $old_note = $pr_3->note; + $pr_3->note = $note; + $pr_3->punkte = $punkte; + $pr_3->datum = $datum; + $pr_3->anmerkung = ""; + $response = "update T3"; + } + else + { + $pr_3->lehreinheit_id = $lehreinheit_id; + $pr_3->student_uid = $student_uid; + $pr_3->mitarbeiter_uid = $user; + $pr_3->note = $note; + $pr_3->punkte = $punkte; + $pr_3->pruefungstyp_kurzbz = $typ; + $pr_3->datum = $datum; + $pr_3->anmerkung = ""; + $pr_3->insertamum = $jetzt; + $pr_3->insertvon = $user; + $pr_3->updateamum = null; + $pr_3->updatevon = null; + $pr_3->ext_id = null; + $pr_3->new = true; + $old_note = -1; + $response = "new T3"; + } + $pr_3->save(); } - else - { - $pr_2->lehreinheit_id = $lehreinheit_id; - $pr_2->student_uid = $student_uid; - $pr_2->mitarbeiter_uid = $user; - $pr_2->note = $note; - $pr_2->punkte = $punkte; - $pr_2->pruefungstyp_kurzbz = $typ; - $pr_2->datum = $datum; - $pr_2->anmerkung = ""; - $pr_2->insertamum = $jetzt; - $pr_2->insertvon = $user; - $pr_2->updateamum = null; - $pr_2->updatevon = null; - $pr_2->ext_id = null; - $pr_2->new = true; - $old_note = -1; - } - $pr_2->save(); + } + else + { + $response = "fehlende oder fehlerhafte Inputparameter"; } - - // Wenn eine Pruefung eingetragen wird, wird danach die LV-Note korrigiert - $jetzt = date("Y-m-d H:i:s"); - - $lvid = $_REQUEST["lvid"]; + //Gesamtnote updaten $lvgesamtnote = new lvgesamtnote(); - if (!$lvgesamtnote->load($lvid, $student_uid, $stsem)) - { + if (!$lvgesamtnote->load($lvid, $student_uid, $stsem)) + { $lvgesamtnote->student_uid = $student_uid; $lvgesamtnote->lehrveranstaltung_id = $lvid; $lvgesamtnote->studiensemester_kurzbz = $stsem; @@ -272,9 +457,9 @@ if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '') ) $lvgesamtnote->insertvon = $user; $new = true; $response = "neu"; - } - else - { + } + else + { $lvgesamtnote->note = $note; $lvgesamtnote->punkte = $punkte; $lvgesamtnote->benotungsdatum = $jetzt; @@ -286,12 +471,11 @@ if (isset($_REQUEST["submit"]) && ($_REQUEST["student_uid"] != '') ) else $response = "update"; } + if (!$lvgesamtnote->save($new)) - echo "".$lvgesamtnote->errormsg.""; + return $lvgesamtnote->errormsg; else - echo $response; + return $response; } -else - echo "Fehler beim Eintragen der Prüfungen"; ?> diff --git a/cis/private/lehre/fotoliste.pdf.php b/cis/private/lehre/fotoliste.pdf.php index 475905e45..bfd2fb3e5 100644 --- a/cis/private/lehre/fotoliste.pdf.php +++ b/cis/private/lehre/fotoliste.pdf.php @@ -274,6 +274,8 @@ if ($result = $db->db_query($qry)) { //add foto to document $doc->addImage($foto_url, trim($row->person_id) . '.jpg', 'image/jpg'); + + $foto_url = 'Pictures/' . trim($row->person_id) . '.jpg'; } elseif ($row->foto_sperre == 't') { @@ -290,7 +292,7 @@ if ($result = $db->db_query($qry)) { 'personenkennzeichen' => trim($row->matrikelnr), 'geschlecht' => $row->geschlecht, 'foto_gesperrt' => $row->foto_sperre, // f/t - 'foto_url' => 'Pictures/' . trim($row->person_id) . '.jpg', + 'foto_url' => $foto_url, 'studiengruppe' => $student_studiengruppe, 'verband' => trim($row->verband), 'gruppe' => trim($row->gruppe), diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 74cb7e7c1..63cf45d29 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -35,6 +35,7 @@ require_once('../../../include/note.class.php'); require_once('../../../include/notenschluessel.class.php'); require_once('../../../include/Excel/excel.php'); require_once('../../../include/phrasen.class.php'); +require_once('../../../include/pruefung.class.php'); $uid = get_uid(); @@ -120,6 +121,13 @@ else $format_highlightright->setBorderColor('white'); $format_highlightright->setAlign('right'); + $format_highlightright_date=& $workbook->addFormat(); + $format_highlightright_date->setFgColor(15); + $format_highlightright_date->setBorder(1); + $format_highlightright_date->setBorderColor('white'); + $format_highlightright_date->setAlign('right'); + $format_highlightright_date->setNumFormat(49); + $format_border_bottom =& $workbook->addFormat(); $format_border_bottom ->setBottom(2); $format_border_bottom->setBold(); @@ -191,6 +199,19 @@ else } //Studenten holen + + //Spaltengruppe für Nachprüfung + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) + { + $worksheet->write($lines,8,$p->t('benotungstool/nachpruefung'),$format_bold); + } + + //Spaltengruppe für 2.Nebensprüfungstermin + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) + { + $worksheet->write($lines,12,$p->t('benotungstool/nachpruefung2'),$format_bold); + } + $lines++; $worksheet->write($lines,1,$p->t('global/uid'),$format_border_bottom); $worksheet->write($lines,2,$p->t('global/nachname'),$format_border_bottom); @@ -203,6 +224,26 @@ else else $worksheet->write($lines,6,$p->t('benotungstool/note'),$format_border_bottom); + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) + { + $worksheet->write($lines,8,$p->t('global/personenkennzeichen'),$format_border_bottom); + $worksheet->write($lines,9,$p->t('global/datum'),$format_border_bottom); + if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) + $worksheet->write($lines,10,$p->t('benotungstool/punkte'),$format_border_bottom); + else + $worksheet->write($lines,10,$p->t('benotungstool/note'),$format_border_bottom); + } + + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) +{ + $worksheet->write($lines,12,$p->t('global/personenkennzeichen'),$format_border_bottom); + $worksheet->write($lines,13,$p->t('global/datum'),$format_border_bottom); + if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE) + $worksheet->write($lines,14,$p->t('benotungstool/punkte'),$format_border_bottom); + else + $worksheet->write($lines,14,$p->t('benotungstool/note'),$format_border_bottom); +} + $stsem_obj = new studiensemester(); $stsem_obj->load($stsem); $stsemdatumvon = $stsem_obj->start; @@ -229,17 +270,18 @@ else AND tbl_zeugnisnote.student_uid=tbl_student.student_uid AND tbl_zeugnisnote.studiensemester_kurzbz=tbl_studentlehrverband.studiensemester_kurzbz) LEFT JOIN bis.tbl_bisio ON(uid=tbl_bisio.student_uid) - LEFT JOIN bis.tbl_mobilitaet USING(prestudent_id) + LEFT JOIN bis.tbl_mobilitaet ON (bis.tbl_mobilitaet.prestudent_id = public.tbl_student.prestudent_id) LEFT JOIN lehre.tbl_note USING(note) WHERE vw_student_lehrveranstaltung.lehrveranstaltung_id=".$db->db_add_param($lvid, FHC_INTEGER)." - AND vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";"; + AND vw_student_lehrveranstaltung.studiensemester_kurzbz=".$db->db_add_param($stsem);";"; if($lehreinheit_id!='') $qry.=" AND vw_student_lehrveranstaltung.lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); $qry.=' ORDER BY nachname, vorname, person_id, tbl_bisio.bis, doubledegree DESC'; + if($result = $db->db_query($qry)) { $i=1; @@ -282,6 +324,49 @@ else $worksheet->write($lines,4,'="'.$elem->semester.$elem->verband.$elem->gruppe.'"'); $worksheet->write($lines,5,'="'.trim($elem->matrikelnr).'"',$format_highlight); $worksheet->write($lines,6, $note, $format_highlightright); + + // Nachprüfung + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) + { + $worksheet->write($lines,8, '="'.trim($elem->matrikelnr).'"', $format_highlight); + $pr = new Pruefung(); + $pr->getPruefungen($elem->uid, "Termin2", $lvid, $sem); + $output2 = $pr->result; + + if ($output2) + { + $resultPr = $output2[0]; + $worksheet->write($lines,9, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date); + $worksheet->write($lines,10, $resultPr->note, $format_highlightright); + } + else + { + $worksheet->write($lines,9, '', $format_highlightright_date); + $worksheet->write($lines,10, '', $format_highlightright); + } + } + + // Nachprüfung + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) + { + $worksheet->write($lines,12, '="'.trim($elem->matrikelnr).'"', $format_highlight); + $pr = new Pruefung(); + $pr->getPruefungen($elem->uid, "Termin3", $lvid, $sem); + $output3 = $pr->result; + + if ($output3) + { + $resultPr = $output3[0]; + $worksheet->write($lines,13, date('d.m.Y', strtotime($resultPr->datum)), $format_highlightright_date); + $worksheet->write($lines,14, $resultPr->note, $format_highlightright); + } + else + { + $worksheet->write($lines,13, '', $format_highlightright_date); + $worksheet->write($lines,14, '', $format_highlightright); + } + } + $i++; $lines++; } @@ -335,5 +420,17 @@ else $worksheet->setColumn(0, 3, 25); $worksheet->setColumn(0, 4, 7); $worksheet->setColumn(0, 5, 21); + + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN2') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN2) + { + $worksheet->setColumn(8, 8, 15); + $worksheet->setColumn(9, 9, 10); + } + if (defined('CIS_GESAMTNOTE_PRUEFUNG_TERMIN3') && CIS_GESAMTNOTE_PRUEFUNG_TERMIN3) + { + $worksheet->setColumn(12, 12, 15); + $worksheet->setColumn(13, 13, 10); + } + $workbook->close(); ?> diff --git a/cis/private/profile/studienplan.php b/cis/private/profile/studienplan.php index 70d234c38..92728df42 100644 --- a/cis/private/profile/studienplan.php +++ b/cis/private/profile/studienplan.php @@ -321,6 +321,10 @@ $lv->loadLehrveranstaltungStudienplan($studienplan_id); foreach($lv->lehrveranstaltungen as $row_lva) $lv_arr[$row_lva->lehrveranstaltung_id]=$row_lva; +// Anrechnungen laden +$anrechnung = new anrechnung(); +$anrechnung->getAnrechnungPrestudent($student->prestudent_id); + echo '

'.$p->t('studienplan/studienplan').": $studienplan->bezeichnung ($studienplan_id) - $student->vorname $student->nachname ( $student->uid )

"; echo ' @@ -357,6 +361,7 @@ function drawTree($tree, $depth) { global $uid, $stsem_arr, $noten_arr, $lvangebot_arr, $aktornext; global $datum_obj, $db, $lv_arr, $p, $note_pruef_arr, $student; + global $anrechnung; foreach($tree as $row_tree) { @@ -425,7 +430,7 @@ function drawTree($tree, $depth) echo $icon." ".$termine." lehrveranstaltung_id&language=$sprache','Lehrveranstaltungsinformation','width=700,height=750,resizable=yes,menuebar=no,toolbar=no,status=yes,scrollbars=yes');\">".$row_tree->kurzbz.' - '.$row_tree->bezeichnung.""; else // Bezeichnung der Lehrveranstaltung - echo $icon." ".$termine." ".$row_tree->kurzbz.' - '.$row_tree->bezeichnung.'('.$row_tree->lehrveranstaltung_id.')'; + echo $icon." ".$termine." ".$row_tree->kurzbz.' - '.$row_tree->bezeichnung.' ('.$row_tree->lehrveranstaltung_id.')'; echo $bende.''; // Semester @@ -534,26 +539,26 @@ function drawTree($tree, $depth) } elseif(count($kompatibleLVs) > 0) { - $i = 0; - while(!$found && $i < count($kompatibleLVs)) + while(!$found && $i < count($kompatibleLVs)) { foreach($kompatibleLVs as $komp) { - $anrechnung = new anrechnung(); - $anrechnung->getAnrechnungPrestudent($student->prestudent_id, $row_tree->lehrveranstaltung_id, $komp); - - if(count($anrechnung->result) == 1) + if(count($anrechnung->result)) { - $lv = $anrechnung->result[0]->lehrveranstaltung_id_kompatibel; - if(isset($noten_arr[$lv][$stsem])) - { - $found = true; - if($note_pruef_arr[$noten_arr[$lv][$stsem]]->positiv) - $tdinhalt .= ''.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.''; - else - $tdinhalt .= ''.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.''; - } + foreach($anrechnung->result as $row) + { + $lv = $row->lehrveranstaltung_id_kompatibel; + if(isset($noten_arr[$lv][$stsem]) && $lv == $komp && $row_tree->lehrveranstaltung_id == $row->lehrveranstaltung_id) + { + $found = true; + if($note_pruef_arr[$noten_arr[$lv][$stsem]]->positiv) + $tdinhalt .= ''.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.''; + else + $tdinhalt .= ''.$note_pruef_arr[$noten_arr[$lv][$stsem]]->anmerkung.''; + } + } + } $i++; } @@ -669,38 +674,39 @@ function drawTree($tree, $depth) function checkKompatibleLvs($kompatibleLVs, $student, $row_tree, $noten_arr, $note_pruef_arr, $p, $uid, $negativeNote= null) { + global $anrechnung; $positiv = false; $found = false; $i = 0; + while(!$found && $i < count($kompatibleLVs)) { foreach($kompatibleLVs as $komp) { - - $anrechnung = new anrechnung(); - $anrechnung->getAnrechnungPrestudent($student->prestudent_id, $row_tree->lehrveranstaltung_id, $komp); - - if(count($anrechnung->result) == 1) + if(count($anrechnung->result)) { - $lv = $anrechnung->result[0]->lehrveranstaltung_id_kompatibel; - if(isset($noten_arr[$lv])) + foreach($anrechnung->result as $row) { - $positiv=false; - foreach($noten_arr[$lv] as $note) + $lv = $row->lehrveranstaltung_id_kompatibel; + if(isset($noten_arr[$lv]) && $lv == $komp && $row_tree->lehrveranstaltung_id == $row->lehrveranstaltung_id) { - if($note_pruef_arr[$note]->positiv) - $positiv=true; - } + $positiv=false; + foreach($noten_arr[$lv] as $note) + { + if($note_pruef_arr[$note]->positiv) + $positiv=true; + } - $found = true; - } - else - { - /* wenn zu mehreren kompatiblen lvs eine Anrechnung existiert - * darf found nicht auf false gesetzt werden wenn es zuvor bereits auf true gesetzt wurde - */ - if(!$found) - $found = false; + $found = true; + } + else + { + /* wenn zu mehreren kompatiblen lvs eine Anrechnung existiert + * darf found nicht auf false gesetzt werden wenn es zuvor bereits auf true gesetzt wurde + */ + if(!$found) + $found = false; + } } } $i++; diff --git a/cis/private/tools/zeitaufzeichnung.php b/cis/private/tools/zeitaufzeichnung.php index 773582177..0eb86bdb1 100644 --- a/cis/private/tools/zeitaufzeichnung.php +++ b/cis/private/tools/zeitaufzeichnung.php @@ -1433,7 +1433,8 @@ if ($projekt->getProjekteMitarbeiter($user, true)) $sem_akt = $stsem->getakt(); $lehre = new zeitaufzeichnung(); $l_arr = $lehre->getLehreForUser($user, $sem_akt); - if ($l_arr["LehreAuftraege"]>0 || $l_arr["Lehre"] > 0 || $l_arr["LehreExtern"] > 0) + $displayLehresaldo = false; + if ($displayLehresaldo && ($l_arr["LehreAuftraege"]>0 || $l_arr["Lehre"] > 0 || $l_arr["LehreExtern"] > 0)) { if ($lehre_inkludiert == -1) { diff --git a/cis/testtool/admin/auswertung_detail.php b/cis/testtool/admin/auswertung_detail.php index 775234670..2e6b9f0e9 100644 --- a/cis/testtool/admin/auswertung_detail.php +++ b/cis/testtool/admin/auswertung_detail.php @@ -147,7 +147,7 @@ if(isset($_GET['show'])) - + '; } } @@ -244,12 +244,20 @@ if(isset($_GET['show'])) $anz_m = $row_geschlecht->anz_m; $anz_w = $row_vorschlag->anzahl_vorschlag-$row_geschlecht->anz_m; + if ($row_vorschlag->anzahl_gesamt == 0) + $anzahl_gesamt = 1; + else + $anzahl_gesamt = $row_vorschlag->anzahl_gesamt; + + $vorschlag_prozent = round(100 * $row_vorschlag->anzahl_vorschlag / $anzahl_gesamt, 1); + $vorschlag_prozent = number_format($vorschlag_prozent,1,',',''); $hlp2.= ' + '; diff --git a/cis/testtool/admin/auswertung_detail_frage.php b/cis/testtool/admin/auswertung_detail_frage.php index 0256d00eb..8471eabf4 100644 --- a/cis/testtool/admin/auswertung_detail_frage.php +++ b/cis/testtool/admin/auswertung_detail_frage.php @@ -58,6 +58,7 @@ if($frage_id!='' && is_numeric($frage_id)) tbl_frage_sprache.text as frage_text, tbl_frage_sprache.audio as frage_audio, tbl_frage_sprache.bild as frage_bild, + tbl_vorschlag.nummer as vorschlag_nummer, tbl_vorschlag_sprache.text as vorschlag_text, tbl_vorschlag_sprache.audio as vorschlag_audio, tbl_vorschlag_sprache.bild as vorschlag_bild, @@ -108,9 +109,11 @@ if($frage_id!='' && is_numeric($frage_id)) } //Vorschlaege + echo '
Nummer: '.$row->vorschlag_nummer.'

'; echo '
'; //echo "Vorschlag $i: "; $first=false; + echo $row->vorschlag_text; if($row->vorschlag_audio!='') { diff --git a/config/cis.config-default.inc.php b/config/cis.config-default.inc.php index 1a72888be..27e0a9a70 100644 --- a/config/cis.config-default.inc.php +++ b/config/cis.config-default.inc.php @@ -86,6 +86,7 @@ define("AUTH_NAME","FH-Complete"); * LDAP_BIND_USER: DN des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_BIND_PASSWORD: Passwort des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_USER_SEARCH_FILTER: LDAP Attribut in dem der Username steht nach dem gesucht wird (uid | sAMAccountName) + * LDAP_SERVICEPING: LDAP Service Ping verwenden (true | false) - wirksam für alle LDAP Server */ define('LDAP_SERVER','ldap://ldap.example.com'); define('LDAP_PORT',389); @@ -94,6 +95,7 @@ define('LDAP_BASE_DN','ou=People,dc=example,dc=com'); define('LDAP_BIND_USER',null); define('LDAP_BIND_PASSWORD',null); define('LDAP_USER_SEARCH_FILTER','uid'); +define('LDAP_SERVICEPING',true); // 2. LDAP Server (zB wenn Mitarbeiter und Studierende auf 2 getrennten Servern liegen) /* diff --git a/config/system.config-default.inc.php b/config/system.config-default.inc.php index 45a83837e..a1f70086a 100644 --- a/config/system.config-default.inc.php +++ b/config/system.config-default.inc.php @@ -52,6 +52,7 @@ * LDAP_BIND_USER: DN des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_BIND_PASSWORD: Passwort des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_USER_SEARCH_FILTER: LDAP Attribut in dem der Username steht nach dem gesucht wird (uid | sAMAccountName) + * LDAP_SERVICEPING: LDAP Service Ping verwenden (true | false) - wirksam für alle LDAP Server */ define('LDAP_SERVER','ldap://ldap.example.com'); define('LDAP_PORT',389); @@ -60,6 +61,7 @@ define('LDAP_BIND_USER',null); define('LDAP_BIND_PASSWORD',null); define('LDAP_USER_SEARCH_FILTER','uid'); + define('LDAP_SERVICEPING',true); // 2. LDAP Server (zB wenn Mitarbeiter und Studierende auf 2 getrennten Servern liegen) /* diff --git a/config/vilesci.config-default.inc.php b/config/vilesci.config-default.inc.php index cbb3c1136..fdd971be0 100644 --- a/config/vilesci.config-default.inc.php +++ b/config/vilesci.config-default.inc.php @@ -75,6 +75,7 @@ define('AUTH_NAME', 'FH Complete'); * LDAP_BIND_USER: DN des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_BIND_PASSWORD: Passwort des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_USER_SEARCH_FILTER: LDAP Attribut in dem der Username steht nach dem gesucht wird (uid | sAMAccountName) + * LDAP_SERVICEPING: LDAP Service Ping verwenden (true | false) - wirksam für alle LDAP Server */ define('LDAP_SERVER', 'ldap://ldap.example.com'); define('LDAP_PORT', 389); @@ -83,6 +84,7 @@ define('LDAP_BASE_DN', 'ou=People,dc=example,dc=com'); define('LDAP_BIND_USER', null); define('LDAP_BIND_PASSWORD', null); define('LDAP_USER_SEARCH_FILTER', 'uid'); +define('LDAP_SERVICEPING',true); // 2. LDAP Server (zB wenn Mitarbeiter und Studierende auf 2 getrennten Servern liegen) /* diff --git a/config/wawi.config-default.inc.php b/config/wawi.config-default.inc.php index bed069e39..0081c2420 100644 --- a/config/wawi.config-default.inc.php +++ b/config/wawi.config-default.inc.php @@ -53,6 +53,7 @@ define("AUTH_NAME","FHComplete"); * LDAP_BIND_USER: DN des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_BIND_PASSWORD: Passwort des Users falls eine Authentifizierung am LDAP noetig ist oder null * LDAP_USER_SEARCH_FILTER: LDAP Attribut in dem der Username steht nach dem gesucht wird (uid | sAMAccountName) + * LDAP_SERVICEPING: LDAP Service Ping verwenden (true | false) - wirksam für alle LDAP Server */ define('LDAP_SERVER','ldap://ldap.example.com'); define('LDAP_PORT',389); @@ -61,6 +62,7 @@ define('LDAP_BASE_DN','ou=People,dc=example,dc=com'); define('LDAP_BIND_USER',null); define('LDAP_BIND_PASSWORD',null); define('LDAP_USER_SEARCH_FILTER','uid'); +define('LDAP_SERVICEPING',true); // 2. LDAP Server (zB wenn Mitarbeiter und Studierende auf 2 getrennten Servern liegen) /* diff --git a/include/berechtigung.class.php b/include/berechtigung.class.php index ab224be4d..f4c55e576 100644 --- a/include/berechtigung.class.php +++ b/include/berechtigung.class.php @@ -29,6 +29,10 @@ class berechtigung extends basis_db public $rolle_kurzbz; public $beschreibung; public $berechtigung_kurzbz; + public $art; + public $anmerkung; + public $insertamum; + public $insertvon; /** * Konstruktor @@ -79,7 +83,7 @@ class berechtigung extends basis_db { if(is_null($new)) $new = $this->new; - + if($new) { $qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES(". @@ -103,14 +107,38 @@ class berechtigung extends basis_db return false; } } + + /** + * Loescht ein Recht + * + * @param $berechtigung_kurzbz + */ + public function delete($berechtigung_kurzbz) + { + $qry = "DELETE FROM system.tbl_berechtigung WHERE berechtigung_kurzbz=".$this->db_add_param($berechtigung_kurzbz).";"; + + if($this->db_query($qry)) + { + return true; + } + else + { + $this->errormsg = 'Fehler beim Löschen des Rechts:'.$this->db_last_error(); + return false; + } + } /** * Holt alle BerechtigungsRollen * @return true wenn erfolgreich, false im Fehlerfall */ - public function getRollen() + public function getRollen($order = null) { $qry = 'SELECT * FROM system.tbl_rolle'; + if ($order != '') + { + $qry .= " ORDER BY $order"; + } if($this->db_query($qry)) { @@ -152,6 +180,9 @@ class berechtigung extends basis_db $obj->rolle_kurzbz = $row->rolle_kurzbz; $obj->art = $row->art; $obj->beschreibung = $row->beschreibung; + $obj->anmerkung = $row->anmerkung; + $obj->insertamum = $row->insertamum; + $obj->insertvon = $row->insertvon; $this->result[] = $obj; } @@ -252,15 +283,22 @@ class berechtigung extends basis_db if($this->db_num_rows()>0) { //Update - $qry = "UPDATE system.tbl_rolleberechtigung SET art=".$this->db_add_param($this->art)." WHERE rolle_kurzbz=".$this->db_add_param($this->rolle_kurzbz)." AND berechtigung_kurzbz=".$this->db_add_param($this->berechtigung_kurzbz).";"; + $qry = "UPDATE system.tbl_rolleberechtigung SET art=".$this->db_add_param($this->art).", + anmerkung=".$this->db_add_param($this->anmerkung).", + insertamum=".$this->db_add_param($this->insertamum).", + insertvon=".$this->db_add_param($this->insertvon)." + WHERE rolle_kurzbz=".$this->db_add_param($this->rolle_kurzbz)." AND berechtigung_kurzbz=".$this->db_add_param($this->berechtigung_kurzbz).";"; } else { //Insert - $qry = "INSERT INTO system.tbl_rolleberechtigung (rolle_kurzbz, berechtigung_kurzbz, art) VALUES(". + $qry = "INSERT INTO system.tbl_rolleberechtigung (rolle_kurzbz, berechtigung_kurzbz, art, anmerkung, insertamum, insertvon) VALUES(". $this->db_add_param($this->rolle_kurzbz).",". $this->db_add_param($this->berechtigung_kurzbz).",". - $this->db_add_param($this->art).");"; + $this->db_add_param($this->art).",". + $this->db_add_param($this->anmerkung).",". + $this->db_add_param($this->insertamum).",". + $this->db_add_param($this->insertvon).");"; } if($this->db_query($qry)) diff --git a/include/organisationseinheit.class.php b/include/organisationseinheit.class.php index 1a2e0ca16..78b0e40c3 100644 --- a/include/organisationseinheit.class.php +++ b/include/organisationseinheit.class.php @@ -650,11 +650,14 @@ class organisationseinheit extends basis_db LOWER(bezeichnung) LIKE LOWER(\'%'.$this->db_escape((implode(' ',$searchItem))).'%\') OR LOWER(organisationseinheittyp_kurzbz) LIKE LOWER(\'%'.$this->db_escape((implode(' ',$searchItem))).'%\') + OR + LOWER(organisationseinheittyp_kurzbz) LIKE LOWER(\'%'.$this->db_escape((implode(' ',$searchItem))).'%\') )'; foreach($searchItem as $value) { $qry.=' OR (LOWER(oe_kurzbz)=LOWER('.$this->db_add_param($value).')) - OR (LOWER(bezeichnung) LIKE LOWER(\'%'.$this->db_escape($value).'%\'))'; + OR (LOWER(bezeichnung) LIKE LOWER(\'%'.$this->db_escape($value).'%\')) + OR (LOWER(organisationseinheittyp_kurzbz||bezeichnung) LIKE LOWER(\'%'.$this->db_escape($value).'%\'))'; } $qry.= ' ORDER BY organisationseinheittyp_kurzbz, bezeichnung;'; diff --git a/include/tw/vilesci_menu_main.inc.php b/include/tw/vilesci_menu_main.inc.php index 834183c2c..7d24f16f3 100644 --- a/include/tw/vilesci_menu_main.inc.php +++ b/include/tw/vilesci_menu_main.inc.php @@ -33,7 +33,7 @@ $menu=array 'Lehrveranstaltung'=>array('name'=>'Lehrveranstaltung', 'link'=>'lehre/lehrveranstaltung_frameset.html', 'target'=>'main'), /* Leerzeile */'emptyrow1'=>array('name'=>'', 'link'=>'#empty', 'target'=>'main'), 'Verplanungsuebersicht'=>array('name'=>'Verplanungsübersicht', 'link'=>'lehre/check/verplanungsuebersicht.php', 'target'=>'main'), - 'Reihungstest'=>array('name'=>'Reihungstest', 'link'=>'stammdaten/reihungstestverwaltung.php', 'target'=>'main','permissions'=>array('reihungstest')), + 'Reihungstest'=>array('name'=>'Reihungstest', 'link'=>'stammdaten/reihungstestverwaltung.php', 'target'=>'main','permissions'=>array('lehre/reihungstest')), 'LV-Planung'=>array ( 'name'=>'LV-Planung', 'permissions'=>array('admin','lv-plan','support'), @@ -109,7 +109,7 @@ $menu=array ), 'Benutzer'=>array ( - 'name'=>'Benutzer','permissions'=>array('admin','lv-plan','support'), + 'name'=>'Benutzer','permissions'=>array('admin','lv-plan','support','mitarbeiter'), 'Funktionen'=>array('name'=>'Funktionen', 'link'=>'personen/funktion.php', 'target'=>'main', 'permissions'=>array('mitarbeiter')), 'Berechtigungen'=>array('name'=>'Berechtigungen', 'link'=>'stammdaten/benutzerberechtigung_frameset.html', 'target'=>'main','permissions'=>array('basis/berechtigung')), 'Rollen'=>array('name'=>'Rollen', 'link'=>'stammdaten/berechtigungrolle.php', 'target'=>'main','permissions'=>array('basis/berechtigung')), @@ -132,14 +132,15 @@ $menu=array 'name'=>'Stammdaten', 'opener'=>'true', 'hide'=>'true', 'permissions'=>array('admin','lv-plan','support','basis/berechtigung','basis/variable','basis/studiengang','basis/ort','basis/firma','basis/fhausweis','basis/infoscreen','basis/organisationseinheit'), 'image'=>'vilesci_stammdaten.png', 'link'=>'left.php?categorie=Stammdaten', 'target'=>'nav', 'Betriebsmittel'=>array('name'=>'Betriebsmittel', 'link'=>'stammdaten/betriebsmittel_frameset.php', 'target'=>'main','permissions'=>array('basis/betriebsmittel')), - 'Reihungstest'=>array('name'=>'Reihungstest', 'link'=>'stammdaten/reihungstestverwaltung.php', 'target'=>'main','permissions'=>array('admin','assistenz')), + 'Reihungstest'=>array('name'=>'Reihungstest', 'link'=>'stammdaten/reihungstestverwaltung.php', 'target'=>'main','permissions'=>array('lehre/reihungstest')), - 'User'=>array + 'Rechtemanagement'=>array ( - 'name'=>'User', 'permissions'=>array('basis/variable','basis/berechtigung'), + 'name'=>'Rechtemanagement', 'permissions'=>array('basis/berechtigung','mitarbeiter'), 'Berechtigungen'=>array('name'=>'Berechtigungen', 'link'=>'stammdaten/benutzerberechtigung_frameset.html', 'target'=>'main','permissions'=>array('basis/berechtigung')), + 'Rechte'=>array('name'=>'Rechte', 'link'=>'stammdaten/berechtigungen.php', 'target'=>'main','permissions'=>array('basis/berechtigung')), 'Rollen'=>array('name'=>'Rollen', 'link'=>'stammdaten/berechtigungrolle.php', 'target'=>'main','permissions'=>array('basis/berechtigung')), - 'Variablen'=>array('name'=>'Variablen', 'link'=>'stammdaten/variablen_frameset.html', 'target'=>'main', 'target'=>'main','permissions'=>array('basis/variable')), + 'Funktionen'=>array('name'=>'Funktionen', 'link'=>'personen/funktion.php', 'target'=>'main', 'permissions'=>array('mitarbeiter')), ), 'Personal'=>array ( @@ -155,7 +156,7 @@ $menu=array 'Statistik'=>array('name'=>'Statistik', 'link'=>'stammdaten/statistik_frameset.html', 'target'=>'main','permissions'=>array('basis/statistik')), 'Ampel'=>array('name'=>'Ampel', 'link'=>'stammdaten/ampel_frameset.html', 'target'=>'main','permissions'=>array('basis/ampel')), 'Infoscreen'=>array('name'=>'Infoscreen', 'link'=>'stammdaten/infoscreen_frameset.html', 'target'=>'main','permissions'=>array('basis/infoscreen')), - 'Ferien'=>array('name'=>'Ferien', 'link'=>'lehre/ferienverwaltung.php', 'target'=>'main','permissions'=>array('admin')), + 'Ferien'=>array('name'=>'Ferien', 'link'=>'lehre/ferienverwaltung.php', 'target'=>'main','permissions'=>array('basis/ferien')), 'Service'=>array('name'=>'Service', 'link'=>'stammdaten/service_frameset.html', 'target'=>'main','permissions'=>array('basis/service')), 'Dokumentvorlagen'=>array('name'=>'Dokumentvorlagen', 'link'=>'stammdaten/dokumentvorlagen_verwaltung.php', 'target'=>'main','permissions'=>array('basis/dokumente')), 'GSProgramm'=>array('name'=>'GSProgramm', 'link'=>'stammdaten/gsprogramm.php', 'target'=>'main','permissions'=>array('inout/uebersicht')), diff --git a/locale/de-AT/benotungstool.php b/locale/de-AT/benotungstool.php index 3c8063936..d6e77d3ce 100644 --- a/locale/de-AT/benotungstool.php +++ b/locale/de-AT/benotungstool.php @@ -148,8 +148,11 @@ $this->phrasen['benotungstool/anzahlKommisionellePruefungen']='Anzahl kommission $this->phrasen['benotungstool/pruefungAnlegenFuer']='Prüfung anlegen für'; $this->phrasen['benotungstool/kreuzerltool']='Kreuzerltool'; $this->phrasen['benotungstool/studentIstLvNichtZugeordnet']='Der Student %s %s (%s) ist dieser Lehrveranstaltung nicht zugeordnet. Die Note wird nicht uebernommen!'; -$this->phrasen['benotungstool/studentMitMatrikelnummerExistiertNicht']='Student mit Matrikelnummer %s existiert nicht.'; -$this->phrasen['benotungstool/noteNichtUeberschreibbar']='Für Student mit Matrikelnummer %s eingetragene Zeugnisote %s ist nicht überschreibbar'; +$this->phrasen['benotungstool/studentMitMatrikelnummerExistiertNicht']='Student*in mit Matrikelnummer %s existiert nicht.'; +$this->phrasen['benotungstool/datumsformatUnzulaessig']='Das Datum %s entspricht nicht dem Format TT.MM.JJJJ!'; +$this->phrasen['benotungstool/NachpruefungNichtZulaessig']='Nachprüfung für Student*in %s nicht zulässig.'; +$this->phrasen['benotungstool/noteUnzulaessig']='Die Note %s ist nicht zulaessig. Die Zeile wurde uebersprungen.'; +$this->phrasen['benotungstool/noteNichtUeberschreibbar']='Für Student mit Matrikelnummer %s eingetragene Zeugnisnote %s ist nicht überschreibbar'; $this->phrasen['benotungstool/fehlerhafteNoteBeiStudent']='Fehlerhafte Note bei Student %s %s'; $this->phrasen['benotungstool/keineKreuzerllistenFuerDieseLehrveranstaltung']='Derzeit gibt es keine Kreuzerllisten für diese Lehrveranstaltung'; $this->phrasen['benotungstool/notenuebersichtFuer']='Notenübersicht für'; @@ -170,7 +173,8 @@ $this->phrasen['benotungstool/eingetrageneNoten']='Eingetragene Noten'; $this->phrasen['benotungstool/zeunis']='Zeugnis'; $this->phrasen['benotungstool/handbuch']='Handbuch'; $this->phrasen['benotungstool/punkte']='Punkte'; -$this->phrasen['benotungstool/importAnweisung']='Kopieren Sie die Spalten Personenkennzeichen und Note aus der Notenliste (bzw. StudentenUid und Note aus dem MoodleExport) und fügen Sie diese in folgendes Feld ein'; +$this->phrasen['benotungstool/importAnweisung']='Kopieren Sie die Spalten StudentenUid und Note aus der Notenliste (bzw. StudentenUid und Note aus dem MoodleExport) und fügen Sie diese in folgendes Feld ein'; +$this->phrasen['benotungstool/importAnweisungNachp']='Kopieren Sie die Spalten StudentenUid (bzw. Personenkennzeichen), Datum und Note aus der Notenliste bzw. dem Moodle Export File und fügen Sie diese in folgendes Feld ein'; $this->phrasen['benotungstool/pruefung']='Prüfung'; $this->phrasen['benotungstool/notenlisteImport']='Notenliste für den LV-Noten-Import (Excel)'; $this->phrasen['benotungstool/bearbeitetvon']='Bearbeitet von'; diff --git a/locale/en-US/benotungstool.php b/locale/en-US/benotungstool.php index 17f78d2ba..73a3bd343 100644 --- a/locale/en-US/benotungstool.php +++ b/locale/en-US/benotungstool.php @@ -148,6 +148,8 @@ $this->phrasen['benotungstool/pruefungAnlegenFuer']='Create an examination for ' $this->phrasen['benotungstool/kreuzerltool']='"Kreuzerl" tool'; $this->phrasen['benotungstool/studentIstLvNichtZugeordnet']='Student is not assigned to this course. The grade was not accepted!'; $this->phrasen['benotungstool/studentMitMatrikelnummerExistiertNicht']='Student with student ID number %s does not exist.'; +$this->phrasen['benotungstool/NachpruefungNichtZulaessig']='Re-examination for student %s not allowed.'; +$this->phrasen['benotungstool/datumsformatUnzulaessig']='The date %s is not in valid format TT.MM.JJJJ.'; $this->phrasen['benotungstool/noteNichtUeberschreibbar']='Transcript grade %2$s for student with Personal identifier %1$s is not rewritable'; $this->phrasen['benotungstool/fehlerhafteNoteBeiStudent']='Incorrect grade for student %s %s'; $this->phrasen['benotungstool/keineKreuzerllistenFuerDieseLehrveranstaltung']='There are currently no checklists for this course'; @@ -170,6 +172,7 @@ $this->phrasen['benotungstool/zeunis']='Transcript'; $this->phrasen['benotungstool/handbuch']='Handbook'; $this->phrasen['benotungstool/punkte']='Points'; $this->phrasen['benotungstool/importAnweisung']='Copy the columns "personal identifier" and "grade" from the grade list (or "student ID number" and "grade" from the moodle export file) and insert them in the following field'; +$this->phrasen['benotungstool/importAnweisungNachp']='Copy the columns "student ID number" (or "personal identifier"), "date" and "grade" from the grade list or from the moodle export file and insert them in the following field'; $this->phrasen['benotungstool/pruefung']='Examination'; $this->phrasen['benotungstool/notenlisteImport']='Grade list for the subject grade import (Excel)'; $this->phrasen['benotungstool/geaenderteNotenVorhanden']='There are changed grades. Please send the changes to the assistant by clicking "Approval"'; diff --git a/public/js/issues/issuesKonfiguration.js b/public/js/issues/issuesKonfiguration.js index 9e0ebaf4d..f2e7aa5c3 100644 --- a/public/js/issues/issuesKonfiguration.js +++ b/public/js/issues/issuesKonfiguration.js @@ -144,6 +144,34 @@ var IssuesKonfiguration = { } ); }, + deleteKonfigurationsWerte: function(konfigurationstyp_kurzbz, fehlercode, konfigurationsWert) + { + FHC_AjaxClient.ajaxCallPost( + 'system/issues/IssuesKonfiguration/deleteKonfigurationsWerte', + { + konfigurationstyp_kurzbz: konfigurationstyp_kurzbz, + fehlercode: fehlercode, + konfigurationsWert: konfigurationsWert + }, + { + successCallback: function(data, textStatus, jqXHR) { + if (FHC_AjaxClient.hasData(data)) + { + FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGeloescht')) + // reload dataset to see change + IssuesKonfiguration._reloadKonfigurationOverview(); + } + else + { + FHC_DialogLib.alertError(FHC_PhrasesLib.t('fehlermonitoring', 'konfigurationGeloeschtFehler')); + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + } + } + ); + }, deleteKonfiguration: function(konfigurationstyp_kurzbz, fehlercode) { FHC_AjaxClient.ajaxCallPost( @@ -229,7 +257,7 @@ $(document).ready(function() { } ); - // get new fehlercodes each time app is changed + // set assign configuration event $("#assignKonfiguration").click( function() { @@ -241,6 +269,18 @@ $(document).ready(function() { } ); + // set delete configuration event + $("#deleteKonfiguration").click( + function() + { + IssuesKonfiguration.deleteKonfigurationsWerte( + $("#"+FEHLERKONFIGURATIONSTYP_DROPDOWN_ID).val(), + $("#"+FEHLERCODE_DROPDOWN_ID).val(), + $("#konfigurationsWert").val() + ); + } + ); + // set events for showing info modals $("#fehlercodeInfoIcon").click( function() diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php index 9fda09bba..21c962e3b 100644 --- a/system/dbupdate_3.4.php +++ b/system/dbupdate_3.4.php @@ -27,6 +27,7 @@ require_once('dbupdate_3.4/example.php'); require_once('dbupdate_3.4/example2.php'); ... */ +require_once('dbupdate_3.4/25003_notenimport_nachpruefung.php'); require_once('dbupdate_3.4/26173_index_webservicelog.php'); require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php'); @@ -39,6 +40,7 @@ require_once('dbupdate_3.4/27107_vilesci_erfassung_abwesenheiten_reinigung.php') require_once('dbupdate_3.4/24913_tabelle_raumtyp_neues_attribut_aktiv.php'); require_once('dbupdate_3.4/28089_plausichecks_in_extension_hinzufuegen.php'); require_once('dbupdate_3.4/29133_einzelne_studiengaenge_aus_issuechecks_ausnehmen.php'); +require_once('dbupdate_3.4/30537_anmerkung_in_tbl_rolleberechtigung.php'); // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen echo '

Pruefe Tabellen und Attribute!

'; @@ -326,7 +328,7 @@ $tabellen=array( "system.tbl_phrase" => array("phrase_id","app","phrase","insertamum","insertvon","category"), "system.tbl_phrasentext" => array("phrasentext_id","phrase_id","sprache","orgeinheit_kurzbz","orgform_kurzbz","text","description","insertamum","insertvon"), "system.tbl_rolle" => array("rolle_kurzbz","beschreibung"), - "system.tbl_rolleberechtigung" => array("berechtigung_kurzbz","rolle_kurzbz","art"), + "system.tbl_rolleberechtigung" => array("berechtigung_kurzbz","rolle_kurzbz","art","anmerkung","insertamum","insertvon"), "system.tbl_verarbeitungstaetigkeit" => array("taetigkeit_kurzbz", "bezeichnung", "bezeichnung_mehrsprachig","aktiv"), "system.tbl_webservicelog" => array("webservicelog_id","webservicetyp_kurzbz","request_id","beschreibung","request_data","execute_time","execute_user"), "system.tbl_webservicerecht" => array("webservicerecht_id","berechtigung_kurzbz","methode","attribut","insertamum","insertvon","updateamum","updatevon","klasse"), diff --git a/system/dbupdate_3.4/25003_notenimport_nachpruefung.php b/system/dbupdate_3.4/25003_notenimport_nachpruefung.php new file mode 100644 index 000000000..7c2406d0e --- /dev/null +++ b/system/dbupdate_3.4/25003_notenimport_nachpruefung.php @@ -0,0 +1,15 @@ +db_query("SELECT 1 FROM lehre.tbl_pruefungstyp WHERE pruefungstyp_kurzbz='Termin3'")) +{ + if($db->db_num_rows($result)==0) + { + $qry = "INSERT INTO lehre.tbl_pruefungstyp(pruefungstyp_kurzbz, beschreibung, abschluss) VALUES('Termin3', '3.Termin', false);"; + + if(!$db->db_query($qry)) + echo 'Prüfungstyp: '.$db->db_last_error().'
'; + else + echo '
Prüfungstyp 3.Termin in lehre.tbl_pruefungstyp hinzugefügt'; + } +} diff --git a/system/dbupdate_3.4/30537_anmerkung_in_tbl_rolleberechtigung.php b/system/dbupdate_3.4/30537_anmerkung_in_tbl_rolleberechtigung.php new file mode 100644 index 000000000..0d7b43b8f --- /dev/null +++ b/system/dbupdate_3.4/30537_anmerkung_in_tbl_rolleberechtigung.php @@ -0,0 +1,15 @@ +db_query("SELECT anmerkung FROM system.tbl_rolleberechtigung LIMIT 1")) +{ + $qry = "ALTER TABLE system.tbl_rolleberechtigung ADD COLUMN anmerkung varchar(256); + ALTER TABLE system.tbl_rolleberechtigung ADD COLUMN insertamum timestamp DEFAULT now(); + ALTER TABLE system.tbl_rolleberechtigung ADD COLUMN insertvon varchar(32);"; + + if(!$db->db_query($qry)) + echo 'system.tbl_rolleberechtigung '.$db->db_last_error().'
'; + else + echo '
Spalten anmerkung, insertamum, insertvon in system.tbl_rolleberechtigung hinzugefügt'; +} diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index 0bc748c80..28735e07f 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -17897,7 +17897,7 @@ array( ), array( 'sprache' => 'English', - 'text' => 'Invalid configuration value for data type {1}, special characters not allowed', + 'text' => 'Invalid configuration value for data type {0}, special characters not allowed', 'description' => '', 'insertvon' => 'system' ) @@ -18123,6 +18123,26 @@ array( ) ) ), + array( + 'app' => 'core', + 'category' => 'fehlermonitoring', + 'phrase' => 'konfigurationswertLoeschen', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Konfigurationswert(e) löschen', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Delete configuration value(s)', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), ); diff --git a/vilesci/lehre/check/ueberbuchung.php b/vilesci/lehre/check/ueberbuchung.php index 3cb6b62e5..1e133384a 100644 --- a/vilesci/lehre/check/ueberbuchung.php +++ b/vilesci/lehre/check/ueberbuchung.php @@ -50,31 +50,47 @@ echo ' - - - + '; + + include('../../../include/meta/jquery.php'); + include('../../../include/meta/jquery-tablesorter.php'); + +echo ' - - + +

LV-Plan Überbuchungen - '.$db_stpl_table.'

'; @@ -93,8 +109,8 @@ if($beginn=='' || $ende=='') $dontloadcontent=true; } -echo " Beginn "; -echo " Ende "; +echo " Beginn "; +echo " Ende "; $stg = new studiengang(); $stg->getAll('typ, kurzbzlang', true); @@ -128,7 +144,7 @@ foreach ($ort_obj->result as $row) $ort[$row->ort_kurzbz] = new stdClass(); // Prevents the warning "Creating default object from empty value" $ort[$row->ort_kurzbz]->max_person = $row->max_person; } -$qry = "SELECT DISTINCT vw_".$db_stpl_table.".unr,datum, stunde, ort_kurzbz, studiensemester_kurzbz, vw_".$db_stpl_table.".studiengang_kz, vw_".$db_stpl_table.".semester, verband, gruppe, gruppe_kurzbz, UPPER(stg_typ || stg_kurzbz) as stg_kurzbz, lehrfach, lehrfach_bez +$qry = "SELECT DISTINCT vw_".$db_stpl_table.".unr,datum, stunde, ort_kurzbz, studiensemester_kurzbz, vw_".$db_stpl_table.".studiengang_kz, vw_".$db_stpl_table.".semester, verband, gruppe, gruppe_kurzbz, UPPER(stg_typ || stg_kurzbz) as stg_kurzbz, lehrfach, lehrfach_bez, lehrform FROM lehre.vw_".$db_stpl_table." JOIN lehre.tbl_lehreinheit USING(lehreinheit_id) JOIN lehre.tbl_lehrveranstaltung ON(tbl_lehreinheit.lehrveranstaltung_id=tbl_lehrveranstaltung.lehrveranstaltung_id) WHERE datum>='".addslashes($beginn)."' AND datum<='".addslashes($ende)."'"; if($stg_kz!='') @@ -144,7 +160,8 @@ echo '
Level Frage Gesamt (m/w)Nummer | Punkte | Gesamt | Männlich | WeiblichNummer | Punkte | Gesamt | % | Männlich | Weiblich
'.$row_vorschlag->nummer.' '.number_format($row_vorschlag->punkte,2).' '.$row_vorschlag->anzahl_vorschlag.''.$vorschlag_prozent.'% '.$anz_m.' '.$anz_w.'
- + + '; @@ -156,6 +173,7 @@ $lastort=0; $anzahl_studenten=0; $lehrfach=''; $lehrfach_bez=''; +$lehrform=''; $arr=array(); function getAnzahl($studiengang_kz, $semester, $verband, $gruppe, $gruppe_kurzbz, $studiensemester_kurzbz) @@ -192,7 +210,7 @@ if($result = $db->db_query($qry)) { while($row = $db->db_fetch_object($result)) { - if($lastdatum==$row->datum && $laststunde==$row->stunde && $lastort==$row->ort_kurzbz && $lehrfach==$row->lehrfach && $lehrfach_bez==$row->lehrfach_bez) + if($lastdatum==$row->datum && $laststunde==$row->stunde && $lastort==$row->ort_kurzbz && $lehrfach==$row->lehrfach && $lehrfach_bez==$row->lehrfach_bez && $lehrform==$row->lehrform) { //Solange alles gleich ist zusammenzaehlen $anzahl = getAnzahl($row->studiengang_kz, $row->semester, $row->verband, $row->gruppe, $row->gruppe_kurzbz, $row->studiensemester_kurzbz); @@ -222,7 +240,13 @@ if($result = $db->db_query($qry)) $style='style="background-color: a00404; color: d3d3d3"'; //echo ""; - $arr[]=""; + $arr[]=" + + + + + + "; } $anzahl_studenten=0; @@ -238,6 +262,7 @@ if($result = $db->db_query($qry)) $lastort = $row->ort_kurzbz; $lehrfach = $row->lehrfach; $lehrfach_bez = $row->lehrfach_bez; + $lehrform = $row->lehrform; } } else diff --git a/vilesci/stammdaten/benutzerberechtigung_autocomplete.php b/vilesci/stammdaten/benutzerberechtigung_autocomplete.php index a888a5b67..f963da2d9 100644 --- a/vilesci/stammdaten/benutzerberechtigung_autocomplete.php +++ b/vilesci/stammdaten/benutzerberechtigung_autocomplete.php @@ -36,9 +36,9 @@ if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'benutzer') $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); if (is_null($search) || $search == '') exit(); - + $benutzer = new benutzer(); - + if ($benutzer->search(array( $search ))) @@ -61,9 +61,9 @@ if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'berechtigu $search = trim((isset($_REQUEST['term']) ? $_REQUEST['term'] : '')); if (is_null($search) || $search == '') exit(); - + $berechtigung = new berechtigung(); - + if ($berechtigung->searchBerechtigungen($search)) { $result_obj = array(); @@ -98,17 +98,29 @@ if (isset($_REQUEST['autocomplete']) && $_REQUEST['autocomplete'] == 'oe_kurzbz' if(is_array($oe->result) && count($oe->result) > 0) { - $result_obj = array(); + $resultArray = array(); foreach($oe->result as $row) { if($row->aktiv==true) { - $item['oe_kurzbz'] = html_entity_decode($row->oe_kurzbz); - $item['organisationseinheittyp_kurzbz'] = html_entity_decode($row->organisationseinheittyp_kurzbz); - $item['bezeichnung'] = html_entity_decode($row->bezeichnung); - $result_obj[] = $item; + $resultArray[html_entity_decode($row->oe_kurzbz)] = array('organisationseinheittyp_kurzbz' => html_entity_decode($row->organisationseinheittyp_kurzbz),'bezeichnung' => html_entity_decode($row->bezeichnung)); } } + + uasort($resultArray, function($a, $b) + { + return $a['organisationseinheittyp_kurzbz'].$a['bezeichnung'] <=> $b['organisationseinheittyp_kurzbz'].$b['bezeichnung']; + }); + + $result_obj = array(); + foreach($resultArray as $key => $value) + { + $item['oe_kurzbz'] = $key; + $item['organisationseinheittyp_kurzbz'] = $value['organisationseinheittyp_kurzbz']; + $item['bezeichnung'] = $value['bezeichnung']; + $result_obj[] = $item; + } + echo json_encode($result_obj); } exit(); diff --git a/vilesci/stammdaten/benutzerberechtigung_details.php b/vilesci/stammdaten/benutzerberechtigung_details.php index 4cee06950..b230d702f 100644 --- a/vilesci/stammdaten/benutzerberechtigung_details.php +++ b/vilesci/stammdaten/benutzerberechtigung_details.php @@ -479,12 +479,11 @@ if(isset($_POST['copy']) && $_POST['copy'] != '') if (!$b = new berechtigung()) die($b->errormsg); -$b->getRollen(); +$b->getRollen('rolle_kurzbz'); foreach($b->result as $berechtigung) { $rolle_arr[$berechtigung->rolle_kurzbz] = $berechtigung->beschreibung; } -ksort($rolle_arr, SORT_STRING | SORT_FLAG_CASE); $b->getBerechtigungen(); foreach($b->result as $berechtigung) @@ -600,7 +599,7 @@ if (isset($_REQUEST['uid']) || isset($_REQUEST['funktion_kurzbz'])) } if (count($bn) > 0) { - $htmlstr .= "

Rechte Details

"; + $htmlstr .= "

Rechte Detailaufschlüsselung

"; } } elseif(isset($_REQUEST['funktion_kurzbz']) && $_REQUEST['funktion_kurzbz']!='') diff --git a/vilesci/stammdaten/benutzerberechtigung_uebersicht.php b/vilesci/stammdaten/benutzerberechtigung_uebersicht.php index ecc9c6e09..0be268b70 100644 --- a/vilesci/stammdaten/benutzerberechtigung_uebersicht.php +++ b/vilesci/stammdaten/benutzerberechtigung_uebersicht.php @@ -182,7 +182,7 @@ $(document).ready(function() -

Benutzerberechtigungen Übersicht

'; +

Berechtigungen Übersicht

'; if (!$db = new basis_db()) die('Es konnte keine Verbindung zum Server aufgebaut werden.'); @@ -229,7 +229,7 @@ $htmlstr='

- Berechtigung: + Rechte: '; $rollen = new berechtigung(); - $rollen->getRollen(); + $rollen->getRollen('rolle_kurzbz'); foreach($rollen->result as $rolle) { if ($rolle_kurzbz == $rolle->rolle_kurzbz) diff --git a/vilesci/stammdaten/berechtigungen.php b/vilesci/stammdaten/berechtigungen.php new file mode 100644 index 000000000..54ff60e27 --- /dev/null +++ b/vilesci/stammdaten/berechtigungen.php @@ -0,0 +1,218 @@ + + * Andreas Oesterreicher < andreas.oesterreicher@technikum-wien.at > + * Rudolf Hangl < rudolf.hangl@technikum-wien.at > + * Gerald Simane-Sequens < gerald.simane-sequens@technikum-wien.at > + */ +require_once('../../config/vilesci.config.inc.php'); +require_once('../../include/functions.inc.php'); +require_once('../../include/berechtigung.class.php'); +require_once('../../include/benutzerberechtigung.class.php'); + +$user = get_uid(); + +$rechte = new benutzerberechtigung(); +$rechte->getBerechtigungen($user); + +if(!$rechte->isBerechtigt('basis/berechtigung')) + die($rechte->errormsg); + +$berechtigung_kurzbz = filter_input(INPUT_POST, 'berechtigung_kurzbz'); +$beschreibung = filter_input(INPUT_POST, 'beschreibung'); +$kurzbz = filter_input(INPUT_GET, 'kurzbz'); +$kurzbzPost = filter_input(INPUT_POST, 'kurzbz_post'); +$edit = filter_input(INPUT_GET, 'edit'); +$save = filter_input(INPUT_POST, 'save'); +$delete = filter_input(INPUT_GET, 'delete'); +$saveNew = filter_input(INPUT_POST, 'saveNew'); + +//$delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); +?> + + + Rechte Übersicht + + + + + + + + + + +

Rechte Übersicht

+ + berechtigung_kurzbz = $kurzbzPost; + $berechtigung->beschreibung = $beschreibung; + $berechtigung->new = true; + + if($berechtigung->save()) + { + echo 'Recht '.$kurzbzPost.' wurde angelegt

'; + } + else + { + echo 'Fehler beim Speichern:'.$berechtigung->errormsg.'

'; + } + } + else + { + echo 'Zum Speichern der Daten muss die Kurzbz und die Beschreibung angegeben werden

'; + } + } + + if(isset($delete) && isset($kurzbz)) + { + $berechtigung = new berechtigung(); + if($berechtigung->delete($kurzbz)) + echo 'Das Recht "'.$kurzbz.'" wurde erfolgreich gelöscht

'; + else + echo 'Fehler beim Löschen des Rechts:'.$berechtigung->errormsg.'

'; + } + + if(isset($save)) + { + $berechtigung = new berechtigung(); + $berechtigung->load($berechtigung_kurzbz); + $berechtigung->beschreibung = $beschreibung; + if (!$berechtigung->save(false)) + echo 'Fehler beim Speichern:'.$berechtigung->errormsg.'

'; + } + + //Tabelle mit Rollen anzeigen + $berechtigung = new berechtigung(); + $berechtigung->getBerechtigungen(); + + echo ''; + echo ' +
Ort Studierende aktuell (Plätze maximal) Gruppen (Studierende aktuell)LehrfachLehrveranstaltungLehrform
$lastdatum$laststunde$lastort$anzahl_studenten (".$ort[$lastort]->max_person.")$gruppen$lehrfach - $lehrfach_bez
$lastdatum$lastort$anzahl_studenten (".$ort[$lastort]->max_person.")$gruppen$lehrfach - $lehrfach_bez
$lastdatum$lastort$anzahl_studenten (".$ort[$lastort]->max_person.")$gruppen$lehrfach - $lehrfach_bez$lehrform
+ + + + + + + + '; + + foreach($berechtigung->result as $recht) + { + if($edit && $recht->berechtigung_kurzbz == $kurzbz) + { + echo ' + + + + '; + } + else + { + echo ' + + + + + + '; + } + } + echo ' + +
KurzbzBeschreibungAktion
+ '.$recht->berechtigung_kurzbz.' + + + '.(256 - strlen($recht->beschreibung)).' + + + +
'.$recht->berechtigung_kurzbz.''.$recht->beschreibung.' + + Bearbeiten + + + + Recht löschen + +
+ +
'; + + echo '
+

Neues Recht einfügen

+ Kurzbz: + Beschreibung: + 256 +   +
+
+ +'; + ?> diff --git a/vilesci/stammdaten/berechtigungrolle.php b/vilesci/stammdaten/berechtigungrolle.php index e33057d59..7e87a4901 100644 --- a/vilesci/stammdaten/berechtigungrolle.php +++ b/vilesci/stammdaten/berechtigungrolle.php @@ -35,10 +35,12 @@ if(!$rechte->isBerechtigt('basis/berechtigung')) $rolle_kurzbz = filter_input(INPUT_GET, 'rolle_kurzbz'); $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); +$copy = filter_input(INPUT_POST, 'copy'); +$vergleich = filter_input(INPUT_GET, 'vergleich'); ?> - Berechtigungen Uebersicht + Rollen Uebersicht @@ -54,15 +56,37 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); $("#t1").tablesorter( { sortList: [[0,0]], - widgets: ["zebra"], - headers: {3:{sorter:false}} + widgets: ["zebra", "filter", "stickyHeaders"], + headers: {3:{filter:false, sorter:false}}, + widgetOptions : {filter_saveFilters : true} }); $("#t2").tablesorter( { sortList: [[0,0]], - widgets: ["zebra"], - headers: {2:{sorter:false}} + widgets: ["zebra", "filter", "stickyHeaders"], + headers: {2:{filter:false, sorter:false}}, + widgetOptions : {filter_saveFilters : true} + }); + $("#t3").tablesorter( + { + sortList: [], + widgets: ["zebra"] + }); + $("#t4").tablesorter( + { + sortList: [], + widgets: ["zebra"] + }); + $('.resetsaved').click(function() + { + $(".tablesorter").trigger("filterReset"); + window.location(""); + return false; + }); + $("textarea").keyup(function() + { + $(this).siblings("span").text((256 - $(this).val().length)); }); // Breite des Autocompletes korrigieren um das Springen zu verhindern @@ -93,16 +117,15 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); $(this).val(ui.item.berechtigung_kurzbz); } }); - }); - function confdel() - { - var value=prompt('Achtung! Sie sind dabei eine Rolle zu löschen. Die Zuordnungen gehen dadurch verloren! Um diese Rolle wirklich zu Löschen tippen Sie "LÖSCHEN" in das untenstehende Feld.'); - if(value=='LÖSCHEN') - return true; - else - return false; - } + $(".copyButton").click(function(event) + { + event.preventDefault(); + $(this).siblings().show(); + $(this).hide(); + }); + }); + function validateNewData() { if($('#berechtigung_neu_autocomplete').val() == '') @@ -138,14 +161,16 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); -

Berechtigung - Rolle -

+ Berechtigungen der Rolle "'.$rolle_kurzbz.'"'; $berechtigung_kurzbz = filter_input(INPUT_GET, 'berechtigung_kurzbz'); $art = filter_input(INPUT_GET, 'art'); $save = filter_input(INPUT_GET, 'save'); + $anmerkung = filter_input(INPUT_GET, 'anmerkung'); if(isset($save)) { @@ -155,10 +180,17 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); $berechtigung->rolle_kurzbz = $rolle_kurzbz; $berechtigung->berechtigung_kurzbz = $berechtigung_kurzbz; $berechtigung->art = $art; + $berechtigung->anmerkung = $anmerkung; + $berechtigung->insertamum = date('Y-m-d H:i:s'); + $berechtigung->insertvon = $user; if($berechtigung->saveRolleBerechtigung()): ?> Zuteilung gespeichert - + Fehler beim Speichern der Zuteilung: errormsg ?> - Zurück zur Rollenübersicht + Zurück zur Rollen Übersicht

getBerechtigungen(); ?>
- +
+ - - getRolleBerechtigung($rolle_kurzbz); - $berechtigungen_arr = array(); - foreach ($berechtigungen->result as $row) - { - $berechtigungen_arr[] = $row->berechtigung_kurzbz; - } - foreach ($berechtigung->result as $row): ?> - - - - + + +
- + - + + @@ -224,9 +262,15 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); + + @@ -235,8 +279,166 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN);
Kurzbz Art BeschreibungAnmerkung
berechtigung_kurzbz ?> art ?> beschreibung ?>anmerkung ?> - - entfernen + + Bearbeiten + + + + Recht entfernen
Rollen vergleichen'; + $rolle1 = filter_input(INPUT_GET, 'rolle_kurzbz1'); + $rolle2 = filter_input(INPUT_GET, 'rolle_kurzbz2'); + ?> + + + Zurück zur Rollen Übersicht + +

+ + getRolleBerechtigung($rolle1); + foreach ($rollen->result AS $recht) + { + $rollen1Arr[$recht->berechtigung_kurzbz] = $recht->art; + } + $rollen = new berechtigung(); + $rollen->getRolleBerechtigung($rolle2); + foreach ($rollen->result AS $recht) + { + $rollen2Arr[$recht->berechtigung_kurzbz] = $recht->art; + } + $rollenGesamt = array_merge($rollen1Arr,$rollen2Arr); + ksort($rollenGesamt); + + echo '
+
+
+ Rolle 1: + '; + if (isset($rolle1)) + { + echo ' + + + + + + + '; + + foreach ($rollenGesamt AS $recht => $art) + { + if (array_key_exists($recht, $rollen1Arr)) + { + if ($art != $rollen1Arr[$recht]) + { + echo ' + + + '; + } + else + { + echo ' + + + '; + } + + } + else + { + echo ' + + + '; + } + } + echo ' + +
KurzbzArt
'.$recht.''.$rollen1Arr[$recht].'
'.$recht.''.$art.'
  
'; + } + echo ' +
+
+ Rolle 2: + '; + echo ''; + if (isset($rolle2)) + { + echo ' + + + + + + + '; + foreach ($rollenGesamt AS $recht => $art) + { + if (array_key_exists($recht, $rollen2Arr)) + { + if ($art != $rollen2Arr[$recht]) + { + echo ' + + + '; + } + else + { + echo ' + + + '; + } + } + else + { + echo ' + + + '; + } + } + echo ' + +
KurzbzArt
'.$recht.''.$rollen2Arr[$recht].'
'.$recht.''.$art.'
  
'; + } + echo ' +
+
+
'; + } else { + echo '

Rollen Übersicht

'; $save = filter_input(INPUT_POST, 'save'); $edit = filter_input(INPUT_POST, 'edit'); @@ -273,11 +475,56 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); { $berechtigung = new berechtigung(); if($berechtigung->deleteRolle($kurzbz)) - echo 'Rolle wurde entfernt'; + echo 'Die Rolle '.$kurzbz.' wurde erfolgreich gelöscht'; else echo 'Fehler beim Löschen:'.$berechtigung->errormsg; } + if(isset($copy)) + { + $kurzbz = filter_input(INPUT_POST, 'kurzbz'); + $copyName = filter_input(INPUT_POST, 'copy_name'); + $beschreibung = filter_input(INPUT_POST, 'beschreibung'); + + if(isset($kurzbz)) + { + $berechtigung = new berechtigung(); + $berechtigung->rolle_kurzbz = $copyName; + $berechtigung->beschreibung = $beschreibung; + $berechtigung->new = true; + + if($berechtigung->saveRolle()) + { + $rollenrechte = new berechtigung(); + $rollenrechte->getRolleBerechtigung($kurzbz); + foreach($rollenrechte->result as $rollenrecht) + { + $newRolleRecht = new berechtigung(); + $newRolleRecht->rolle_kurzbz = $copyName; + $newRolleRecht->berechtigung_kurzbz = $rollenrecht->berechtigung_kurzbz; + $newRolleRecht->art = $rollenrecht->art; + $newRolleRecht->anmerkung = $rollenrecht->anmerkung; + $newRolleRecht->insertamum = date('Y-m-d H:i:s'); + $newRolleRecht->insertvon = $user; + if(!$newRolleRecht->saveRolleBerechtigung()) + { + echo 'Fehler beim Speichern des Rechts '.$rollenrecht->berechtigung_kurzbz.' zur Rolle '.$rollenrecht->rolle_kurzbz; + break; + } + } + echo 'Rolle erfolgreich kopiert'; + } + else + { + echo 'Fehler beim kopieren der Rolle '.$kurzbz.':'.$berechtigung->errormsg; + } + } + else + { + echo 'Zum Speichern der Daten muss die kurzbz und die Beschreibung angegeben werden'; + } + } + if(isset($edit)) { $beschreibung = filter_input(INPUT_POST, 'beschreibung'); @@ -292,13 +539,18 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); $berechtigung = new berechtigung(); $berechtigung->getRollen(); ?> -

Rollen:

+

+ + Rollen vergleichen + +

+ - + @@ -325,7 +577,18 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); + @@ -341,6 +604,7 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); Kurzbz: Beschreibung: + beschreibung)) ?>  Neue Rolle anlegen @@ -348,6 +612,7 @@ $delete = filter_input(INPUT_GET, 'delete', FILTER_VALIDATE_BOOLEAN); Kurzbz: Beschreibung: + 256  
Kurzbz BeschreibungAktionAktion
- +
+ + + + +
+
+ Rolle kopieren + +
+ Rolle löschen