diff --git a/application/libraries/issues/PlausicheckDefinitionLib.php b/application/libraries/issues/PlausicheckDefinitionLib.php index 462917297..ed8fff1b2 100644 --- a/application/libraries/issues/PlausicheckDefinitionLib.php +++ b/application/libraries/issues/PlausicheckDefinitionLib.php @@ -12,6 +12,7 @@ class PlausicheckDefinitionLib private $_fehlerLibMappings = array( 'AbbrecherAktiv' => 'AbbrecherAktiv', 'AbschlussstatusFehlt' => 'AbschlussstatusFehlt', + 'AbschlusspruefungOderAbsolventFehlt' => 'AbschlusspruefungOderAbsolventFehlt', 'AktSemesterNull' => 'AktSemesterNull', 'AktiverStudentOhneStatus' => 'AktiverStudentOhneStatus', 'AusbildungssemPrestudentUngleichAusbildungssemStatus' => 'AusbildungssemPrestudentUngleichAusbildungssemStatus', @@ -32,10 +33,13 @@ class PlausicheckDefinitionLib 'IncomingOrGsFoerderrelevant' => 'IncomingOrGsFoerderrelevant', 'InskriptionVorLetzerBismeldung' => 'InskriptionVorLetzerBismeldung', 'NationNichtOesterreichAberGemeinde' => 'NationNichtOesterreichAberGemeinde', + 'OrgformBewerberUngleichOrgformStudent' => 'OrgformBewerberUngleichOrgformStudent', 'OrgformStgUngleichOrgformPrestudent' => 'OrgformStgUngleichOrgformPrestudent', 'PrestudentMischformOhneOrgform' => 'PrestudentMischformOhneOrgform', + 'StartsemesterUngleichPersonenkennzeichen' => 'StartsemesterUngleichPersonenkennzeichen', 'StgPrestudentUngleichStgStudienplan' => 'StgPrestudentUngleichStgStudienplan', 'StgPrestudentUngleichStgStudent' => 'StgPrestudentUngleichStgStudent', + 'StudentstatusNachDiplomand' => 'StudentstatusNachDiplomand', 'StudentstatusNachAbbrecher' => 'StudentstatusNachAbbrecher' //'StudienplanUngueltig' => 'StudienplanUngueltig' ); diff --git a/application/libraries/issues/plausichecks/AbschlusspruefungOderAbsolventFehlt.php b/application/libraries/issues/plausichecks/AbschlusspruefungOderAbsolventFehlt.php new file mode 100644 index 000000000..d45db1c6c --- /dev/null +++ b/application/libraries/issues/plausichecks/AbschlusspruefungOderAbsolventFehlt.php @@ -0,0 +1,150 @@ +_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null; + + // pass parameters needed for plausicheck + $studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null; + $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; + + // get all students failing the plausicheck + $prestudentRes = $this->getAbschlusspruefungOderAbsolventFehlt($studiensemester_kurzbz, $studiengang_kz, null, $exkludierte_studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } + + /** + * If there is a final exam, there should be an absolvent status (and vice versa). + * @param studiensemester_kurzbz Status from this and previous semester is checked + * @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 getAbschlusspruefungOderAbsolventFehlt($studiensemester_kurzbz = null, $studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + + $qry = " + SELECT person_id, prestudent_id, studiengang_kz, prestudent_stg_oe_kurzbz FROM ( + WITH meldestichtag AS ( + SELECT + meldestichtag, studiensemester_kurzbz + FROM + bis.tbl_bismeldestichtag"; + + if (isset($studiensemester_kurzbz)) + { + $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; + + $semesterArr = array($studiensemester_kurzbz); + + if (hasData($prevStudiensemesterRes)) + { + // if Studiensemester given, check only if has status in current or previous semester + $semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz; + } + + $qry .= " WHERE studiensemester_kurzbz IN ?"; + + $params[] = $semesterArr; + } + + $qry .= " + ) + SELECT + DISTINCT ON (prestudent_id) prestudent.person_id, prestudent.prestudent_id, + stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz, + EXISTS ( + SELECT 1 + FROM + lehre.tbl_abschlusspruefung pr + WHERE + student_uid = benutzer.uid + AND abschlussbeurteilung_kurzbz <> 'nicht' + AND pr.datum < meldestichtag.meldestichtag + ) AS hat_pruefung, + (status.status_kurzbz IS NOT NULL) AS hat_absolvent, + (status.ausbildungssemester = stg.max_semester) AS absolvent_in_letztem_semester + FROM + meldestichtag + CROSS JOIN public.tbl_student student + JOIN public.tbl_prestudent prestudent 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 public.tbl_prestudentstatus status + ON status.prestudent_id = prestudent.prestudent_id + AND status.status_kurzbz = 'Absolvent' + AND status.datum < meldestichtag.meldestichtag + WHERE EXISTS ( + SELECT 1 + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = prestudent.prestudent_id + AND studiensemester_kurzbz = meldestichtag.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; + } + + $qry .= " + ) prestudenten + WHERE + (hat_absolvent AND absolvent_in_letztem_semester AND hat_pruefung = FALSE) + OR (hat_pruefung AND hat_absolvent = FALSE)"; + + return $this->_db->execReadOnlyQuery($qry, $params); + } +} diff --git a/application/libraries/issues/plausichecks/BeginndatumVorBismeldung.php b/application/libraries/issues/plausichecks/BeginndatumVorBismeldung.php index 70fcec720..16ea49a58 100644 --- a/application/libraries/issues/plausichecks/BeginndatumVorBismeldung.php +++ b/application/libraries/issues/plausichecks/BeginndatumVorBismeldung.php @@ -57,7 +57,7 @@ class BeginndatumVorBismeldung extends PlausiChecker } /** - * Bewerber should have participated in Reihungstest. + * Beginndatum shouldn't be before Bismeldedatum if the Bismeldedatum has already been reached. * @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 @@ -94,7 +94,7 @@ class BeginndatumVorBismeldung extends PlausiChecker WHERE status.datum < ?::date AND status.studiensemester_kurzbz = ? - AND status.insertamum > ?::date + AND status.insertamum > ?::date + interval '1' day AND stg.melderelevant AND prestudent.bismelden"; diff --git a/application/libraries/issues/plausichecks/FalscheStatusabfolgeVorStudentstatus.php b/application/libraries/issues/plausichecks/FalscheStatusabfolgeVorStudentstatus.php index 99d43978a..bd1e792c6 100644 --- a/application/libraries/issues/plausichecks/FalscheStatusabfolgeVorStudentstatus.php +++ b/application/libraries/issues/plausichecks/FalscheStatusabfolgeVorStudentstatus.php @@ -9,6 +9,8 @@ require_once('PlausiChecker.php'); */ class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker { + private $_statusAbfolge = array('Interessent', 'Bewerber', 'Aufgenommener', 'Student'); + public function executePlausiCheck($params) { $studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null; @@ -44,11 +46,11 @@ class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, 'fehlertext_params' => array( 'prestudent_id' => $prestudent->prestudent_id, - 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz, + 'status_abfolge' => implode(', ', $this->_statusAbfolge) ), 'resolution_params' => array( - 'prestudent_id' => $prestudent->prestudent_id, - 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + 'prestudent_id' => $prestudent->prestudent_id ) ); } @@ -59,7 +61,7 @@ class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker } /** - * Bewerber should have participated in Reihungstest. + * There should be certain order of status before the student status. * @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 @@ -72,7 +74,7 @@ class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker $prestudent_id = null, $exkludierte_studiengang_kz = null ) { - $params = array(); + $params = array($this->_statusAbfolge); $qry = " SELECT @@ -95,7 +97,7 @@ class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker LEFT JOIN bis.tbl_orgform USING(orgform_kurzbz) JOIN public.tbl_studiengang stg USING(studiengang_kz) WHERE - status.status_kurzbz IN ('Interessent', 'Bewerber', 'Aufgenommener', 'Student') + status.status_kurzbz IN ? AND stg.melderelevant AND prestudent.bismelden -- there should be a student already @@ -110,15 +112,27 @@ class FalscheStatusabfolgeVorStudentstatus extends PlausiChecker ) ) prestudents WHERE - ( - -- incorrect order - (status_kurzbz = 'Interessent' AND prev_status_kurzbz NOT IN ('Interessent') AND prev_status_kurzbz IS NOT NULL) - OR ( - (status_kurzbz <> 'Interessent' AND prev_status_kurzbz IS NULL) - OR (status_kurzbz = 'Bewerber' AND prev_status_kurzbz NOT IN ('Bewerber', 'Interessent')) - OR (status_kurzbz = 'Aufgenommener' AND prev_status_kurzbz NOT IN ('Aufgenommener', 'Bewerber')) - OR (status_kurzbz = 'Student' AND prev_status_kurzbz NOT IN ('Student', 'Aufgenommener')) - ) + ("; + + foreach ($this->_statusAbfolge as $idx => $status_kurzbz) + { + // previous status should be either same status, or previous status, or null in case of first status + if ($idx != 0)$qry .= " OR "; + $qry .= " (status_kurzbz = ? AND prev_status_kurzbz NOT IN ?"; + $prev_status_kurzbz = array($status_kurzbz); + + if ($idx == 0) + $qry .= " AND prev_status_kurzbz IS NOT NULL"; + else + $prev_status_kurzbz[] = $this->_statusAbfolge[$idx - 1]; + + $qry .= ')'; + + $params[] = $status_kurzbz; + $params[] = $prev_status_kurzbz; + } + + $qry .= " )"; if (isset($studiensemester_kurzbz)) diff --git a/application/libraries/issues/plausichecks/OrgformBewerberUngleichOrgformStudent.php b/application/libraries/issues/plausichecks/OrgformBewerberUngleichOrgformStudent.php new file mode 100644 index 000000000..2064fa252 --- /dev/null +++ b/application/libraries/issues/plausichecks/OrgformBewerberUngleichOrgformStudent.php @@ -0,0 +1,150 @@ +_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null; + + // pass parameters needed for plausicheck + $studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null; + $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; + + // get all students failing the plausicheck + $prestudentRes = $this->getOrgformBewerberUngleichorgformStudent( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz, + 'bewerber_studiensemester_kurzbz' => $prestudent->bewerber_studiensemester_kurzbz + ), + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id, + 'studiensemester_kurzbz' => $prestudent->studiensemester_kurzbz + ) + ); + } + } + + // return the results + return success($results); + } + + /** + * Orgform of Bewerber should be same as of student (Orgform of Status AND Studienplan) + * @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 getOrgformBewerberUngleichorgformStudent( + $studiensemester_kurzbz, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + DISTINCT ON (prestudent.prestudent_id) prestudent.person_id, prestudent.prestudent_id, students.studiensemester_kurzbz, + bewerber_status.studiensemester_kurzbz AS bewerber_studiensemester_kurzbz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudent prestudent + JOIN public.tbl_prestudentstatus bewerber_status ON prestudent.prestudent_id = bewerber_status.prestudent_id AND bewerber_status.status_kurzbz = 'Bewerber' + JOIN lehre.tbl_studienplan bewerber_studienplan ON bewerber_status.studienplan_id = bewerber_studienplan.studienplan_id + JOIN ( + SELECT + DISTINCT ON (prestudent_id) prestudent_id, st.studiensemester_kurzbz, + st.orgform_kurzbz, pl.orgform_kurzbz AS studienplan_orgform_kurzbz + FROM + public.tbl_prestudentstatus st + JOIN lehre.tbl_studienplan pl USING (studienplan_id) + WHERE + status_kurzbz = 'Student' + ORDER BY + st.prestudent_id, st.datum, st.insertamum, st.ext_id + ) students ON prestudent.prestudent_id = students.prestudent_id + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + prestudent.bismelden + AND stg.melderelevant + AND ( + bewerber_status.orgform_kurzbz <> students.orgform_kurzbz + OR bewerber_studienplan.orgform_kurzbz <> students.studienplan_orgform_kurzbz + )"; + + if (isset($studiensemester_kurzbz)) + { + $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; + + $semesterArr = array($studiensemester_kurzbz); + + if (hasData($prevStudiensemesterRes)) + { + // if Studiensemester given, check only if has status in current or previous semester + $semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz; + } + + $qry .= " AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus ps + WHERE studiensemester_kurzbz IN ? + AND ps.prestudent_id = prestudent.prestudent_id + )"; + + $params[] = $semesterArr; + } + + 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; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } +} diff --git a/application/libraries/issues/plausichecks/StartsemesterUngleichPersonenkennzeichen.php b/application/libraries/issues/plausichecks/StartsemesterUngleichPersonenkennzeichen.php new file mode 100644 index 000000000..9d38658a1 --- /dev/null +++ b/application/libraries/issues/plausichecks/StartsemesterUngleichPersonenkennzeichen.php @@ -0,0 +1,151 @@ +_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null; + + // pass parameters needed for plausicheck + $studiensemester_kurzbz = isset($params['studiensemester_kurzbz']) ? $params['studiensemester_kurzbz'] : null; + $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; + + // get all students failing the plausicheck + $prestudentRes = $this->getStartsemesterUngleichPersonenkennzeichen( + $studiensemester_kurzbz, + $studiengang_kz, + null, + $exkludierte_studiengang_kz + ); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array( + 'prestudent_id' => $prestudent->prestudent_id + ), + 'resolution_params' => array( + 'prestudent_id' => $prestudent->prestudent_id + ) + ); + } + } + + // 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 getStartsemesterUngleichPersonenkennzeichen( + $studiensemester_kurzbz = null, + $studiengang_kz = null, + $prestudent_id = null, + $exkludierte_studiengang_kz = null + ) { + $params = array(); + + $qry = " + SELECT + prestudent.person_id, prestudent.prestudent_id, + stg.studiengang_kz, stg.oe_kurzbz AS prestudent_stg_oe_kurzbz + FROM + public.tbl_prestudent prestudent + JOIN public.tbl_studiengang stg USING (studiengang_kz) + JOIN public.tbl_student stud USING (prestudent_id) + WHERE + stg.melderelevant + AND prestudent.bismelden + AND + ( + SELECT + substring(studiensemester_kurzbz, 5, 2)::integer - + (CASE + WHEN + substring(studiensemester_kurzbz, 1, 2) = 'SS' + THEN + 1 + ELSE + 0 + END)::integer + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = prestudent.prestudent_id + AND status_kurzbz = 'Student' + ORDER BY + datum, insertamum, ext_id + LIMIT 1 + ) <> substring(stud.matrikelnr, 1, 2)::integer"; + + if (isset($studiensemester_kurzbz)) + { + $this->_ci->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); + $prevStudiensemesterRes = $this->_ci->StudiensemesterModel->getPreviousFrom($studiensemester_kurzbz); + + if (isError($prevStudiensemesterRes)) return $prevStudiensemesterRes; + + $semesterArr = array($studiensemester_kurzbz); + + if (hasData($prevStudiensemesterRes)) + { + // if Studiensemester given, check only if has status in current or previous semester + $semesterArr[] = getData($prevStudiensemesterRes)[0]->studiensemester_kurzbz; + } + + $qry .= " AND EXISTS ( + SELECT 1 + FROM public.tbl_prestudentstatus ps + WHERE studiensemester_kurzbz IN ? + AND ps.prestudent_id = prestudent.prestudent_id + )"; + + $params[] = $semesterArr; + } + + 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 stg.studiengang_kz NOT IN ?"; + $params[] = $exkludierte_studiengang_kz; + } + + return $this->_db->execReadOnlyQuery($qry, $params); + } +} diff --git a/application/libraries/issues/plausichecks/StudentstatusNachDiplomand.php b/application/libraries/issues/plausichecks/StudentstatusNachDiplomand.php new file mode 100644 index 000000000..d58263ace --- /dev/null +++ b/application/libraries/issues/plausichecks/StudentstatusNachDiplomand.php @@ -0,0 +1,98 @@ +_config['exkludierteStudiengaenge']) ? $this->_config['exkludierteStudiengaenge'] : null; + + // pass parameters needed for plausicheck + $studiengang_kz = isset($params['studiengang_kz']) ? $params['studiengang_kz'] : null; + + // get all students failing the plausicheck + $prestudentRes = $this->getStudentstatusNachDiplomand($studiengang_kz, null, $exkludierte_studiengang_kz); + + if (isError($prestudentRes)) return $prestudentRes; + + if (hasData($prestudentRes)) + { + $prestudents = getData($prestudentRes); + + // populate results with data necessary for writing issues + foreach ($prestudents as $prestudent) + { + $results[] = array( + 'person_id' => $prestudent->person_id, + 'oe_kurzbz' => $prestudent->prestudent_stg_oe_kurzbz, + 'fehlertext_params' => array('prestudent_id' => $prestudent->prestudent_id), + 'resolution_params' => array('prestudent_id' => $prestudent->prestudent_id) + ); + } + } + + // return the results + return success($results); + } + + /** + * There shouldn't be any student status after Diplomand 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 getStudentstatusNachDiplomand($studiengang_kz = null, $prestudent_id = null, $exkludierte_studiengang_kz = null) + { + $params = array(); + + $qry = " + SELECT + DISTINCT 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 status USING(prestudent_id) + JOIN public.tbl_studiengang stg ON prestudent.studiengang_kz = stg.studiengang_kz + WHERE + status.status_kurzbz = 'Diplomand' + AND EXISTS ( + SELECT 1 + FROM + public.tbl_prestudentstatus + WHERE + prestudent_id = prestudent.prestudent_id + AND status_kurzbz = 'Student' + AND datum::date > status.datum::date + )"; + + 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/system/fehlerupdate.php b/system/fehlerupdate.php index 48b6481d6..43a39673d 100644 --- a/system/fehlerupdate.php +++ b/system/fehlerupdate.php @@ -303,9 +303,41 @@ $fehlerArr = array( ), array( 'fehlercode' => 'CORE_STUDENTSTATUS_0018', + 'fehler_kurzbz' => 'StudentstatusNachDiplomand', + 'fehlercode_extern' => null, + 'fehlertext' => 'Studentstatus nach Diplomandenstatus (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0019', + 'fehler_kurzbz' => 'OrgformBewerberUngleichOrgformStudent', + 'fehlercode_extern' => null, + 'fehlertext' => 'Orgform des Bewerbers stimmt nicht mit Orgform des Studenten überein (Status oder Studienplan) (prestudent_id %s, Student Studiensemester %s, Bewerber Studiensemester %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0020', + 'fehler_kurzbz' => 'StartsemesterUngleichPersonenkennzeichen', + 'fehlercode_extern' => null, + 'fehlertext' => 'Semester des ersten Studentstatus stimmt nicht mit Personenkennzeichen überein (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0021', + 'fehler_kurzbz' => 'AbschlusspruefungOderAbsolventFehlt', + 'fehlercode_extern' => null, + 'fehlertext' => 'Keine Abschlussprüfung vor der Bismeldung oder kein Absolventenstatus vor der Bismeldung (prestudent_id %s)', + 'fehlertyp_kurzbz' => 'error', + 'app' => 'core' + ), + array( + 'fehlercode' => 'CORE_STUDENTSTATUS_0022', 'fehler_kurzbz' => 'FalscheStatusabfolgeVorStudentstatus', 'fehlercode_extern' => null, - 'fehlertext' => 'Falsche Statusabfolge vor Studentstatus (prestudent_id %s, Studiensemester %s)', + 'fehlertext' => 'Falsche Statusabfolge vor Studentstatus (prestudent_id %s, Studiensemester%s, richtige Abfolge: %s)', 'fehlertyp_kurzbz' => 'error', 'app' => 'core' ),