From 7fdaaace50f6bc74554f3bb004f948eccb15c217 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 7 Feb 2020 17:46:29 +0100 Subject: [PATCH 1/3] If Prestudent is freigegeben for RT and has already a Bewerber with reihungstestangetreten = true, a new Bewerber for the prestudent is created, reihungstestangetreten and teilgenommen are set to true --- .../system/infocenter/InfoCenter.php | 67 ++++++++++++++++++- application/models/person/Person_model.php | 19 ++++++ 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d085e7db0..e4d2c4e21 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -69,6 +69,7 @@ class InfoCenter extends Auth_Controller // Name of Interessentenstatus const INTERESSENTSTATUS = 'Interessent'; const ABGEWIESENERSTATUS = 'Abgewiesener'; + const BEWERBERSTATUS = 'Bewerber'; // Statusgruende for which no Studiengangsfreigabemessage should be sent private $_statusgruendeNoStgFreigabeMessage = array('FIT Programm', 'FIT program', 'FIT programme'); @@ -493,7 +494,9 @@ class InfoCenter extends Auth_Controller $logdata = $this->_getPersonAndStudiengangFromPrestudent($prestudent_id); - $akteresult = $this->AkteModel->loadWhere(array('person_id' => $logdata['person_id'], 'formal_geprueft_amum !=' => NULL)); + $person_id = $logdata['person_id']; + + $akteresult = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'formal_geprueft_amum !=' => NULL)); if (hasData($lastStatus) && isSuccess($akteresult)) { @@ -554,8 +557,68 @@ class InfoCenter extends Auth_Controller if (hasData($statusgrund_kurzbz)) $logparams[2] = ', confirmation type '.$statusgrund_kurzbz->retval[0]->bezeichnung_mehrsprachig[0]; } + else + { + // check if there is already a Bewerberstatus and Reihungsverfahren already absolviert + $bewerber = $this->PersonModel->hasBewerber($person_id, $lastStatus->studiensemester_kurzbz); - $this->_log($logdata['person_id'], 'freigegeben', $logparams); + if (hasData($bewerber)) + { + $bewerbercnt = getData($bewerber); + + if (is_numeric($bewerbercnt[0]->anzahl_bewerber) && $bewerbercnt[0]->anzahl_bewerber > 0) + { + // then insert Bewerberstatus and rt absolviert, teilgenommen for prestudent + $bewerberresult = $this->PrestudentstatusModel->insert( + array( + 'prestudent_id' => $prestudent_id, + 'status_kurzbz' => self::BEWERBERSTATUS, + 'studiensemester_kurzbz' => $lastStatus->studiensemester_kurzbz, + 'ausbildungssemester' => $lastStatus->ausbildungssemester, + 'datum' => date('Y-m-d'), + 'orgform_kurzbz' => $lastStatus->orgform_kurzbz, + 'studienplan_id' => $lastStatus->studienplan_id, + 'insertvon' => $this->_uid, + 'insertamum' => date('Y-m-d H:i:s') + ) + ); + + if (isError($bewerberresult)) + $json->retval['nonCriticalErrors'] = 'error when inserting Bewerberstatus'; + + $rtangetretenres = $this->PrestudentModel->update( + $prestudent_id, + array( + 'reihungstestangetreten' => true + ) + ); + + if (isError($rtangetretenres)) + { + $json->retval['nonCriticalErrors'] = 'error when setting reihungstestangetreten'; + } + else + { + $this->load->model('crm/RtPerson_model', 'RtPersonModel'); + + $rtteilgenommenres = $this->RtPersonModel->update( + array( + 'person_id' => $person_id, + 'studienplan_id' => $lastStatus->studienplan_id + ), + array( + 'teilgenommen' => true + ) + ); + + if (isError($rtteilgenommenres)) + $json->retval['nonCriticalErrors'] = 'error when setting reihungstest teilgenommen'; + } + } + } + } + + $this->_log($person_id, 'freigegeben', $logparams); $this->_sendFreigabeMail($prestudent_id); } diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 388f77b0a..4f826dac1 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -213,4 +213,23 @@ class Person_model extends DB_Model return $this->loadWhere(array('uid' => $uid, 'content' => true)); } + + /** + * Checks if a person has a Bewerberstatus and reihungstestangetreten = true + * @param $person_id + * @param $studiensemester_kurzbz + * @return array + */ + public function hasBewerber($person_id, $studiensemester_kurzbz) + { + $qry = "SELECT count(*) AS anzahl_bewerber FROM public.tbl_person + JOIN public.tbl_prestudent USING (person_id) + JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = tbl_prestudent.prestudent_id + WHERE person_id = ? + AND studiensemester_kurzbz = ? + AND status_kurzbz = 'Bewerber' + AND reihungstestangetreten"; + + return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz)); + } } From b41ef00b3d395e66505dfcae6cbb6ebd5e26fb88 Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 11 Feb 2020 16:42:04 +0100 Subject: [PATCH 2/3] crm/Prestudent_model: hasBewerber can optionally check bewerber only for a Studiengangtyp. In InfoCenter, only Bachelors are checked after Freigabe (for setting Bewerber and Reihungstestbooleans) --- .../system/infocenter/InfoCenter.php | 4 +-- application/models/person/Person_model.php | 26 +++++++++++++++---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index e4d2c4e21..d5a751b05 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -560,7 +560,7 @@ class InfoCenter extends Auth_Controller else { // check if there is already a Bewerberstatus and Reihungsverfahren already absolviert - $bewerber = $this->PersonModel->hasBewerber($person_id, $lastStatus->studiensemester_kurzbz); + $bewerber = $this->PersonModel->hasBewerber($person_id, $lastStatus->studiensemester_kurzbz, 'b'); if (hasData($bewerber)) { @@ -1559,7 +1559,7 @@ class InfoCenter extends Auth_Controller } /** - * Sends infomail with prestudent and person data when Prestudent is freigegeben + * Sends infomail to Studiengang with prestudent and person data when Prestudent is freigegeben * @param $prestudent_id */ private function _sendFreigabeMail($prestudent_id) diff --git a/application/models/person/Person_model.php b/application/models/person/Person_model.php index 4f826dac1..d8ddb381c 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -220,16 +220,32 @@ class Person_model extends DB_Model * @param $studiensemester_kurzbz * @return array */ - public function hasBewerber($person_id, $studiensemester_kurzbz) + public function hasBewerber($person_id, $studiensemester_kurzbz, $studiengangtyp = null) { + $parametersArray = array($person_id, $studiensemester_kurzbz); + $qry = "SELECT count(*) AS anzahl_bewerber FROM public.tbl_person JOIN public.tbl_prestudent USING (person_id) - JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = tbl_prestudent.prestudent_id - WHERE person_id = ? + JOIN public.tbl_prestudentstatus ON tbl_prestudentstatus.prestudent_id = tbl_prestudent.prestudent_id"; + + if (isset($studiengangtyp)) + { + $qry .= " JOIN lehre.tbl_studienplan USING(studienplan_id) + JOIN lehre.tbl_studienordnung USING(studienordnung_id) + JOIN public.tbl_studiengang ON tbl_studienordnung.studiengang_kz = tbl_studiengang.studiengang_kz"; + } + + $qry .= " WHERE person_id = ? AND studiensemester_kurzbz = ? - AND status_kurzbz = 'Bewerber' + AND tbl_prestudentstatus.status_kurzbz = 'Bewerber' AND reihungstestangetreten"; - return $this->execQuery($qry, array($person_id, $studiensemester_kurzbz)); + if (isset($studiengangtyp)) + { + $parametersArray[] = $studiengangtyp; + $qry .= " AND tbl_studiengang.typ = ?"; + } + + return $this->execQuery($qry, $parametersArray); } } From ed332717ce3bec047ea34ff9afb71a5689f48cc6 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 14 Feb 2020 18:23:14 +0100 Subject: [PATCH 3/3] Infocenter Details: - added notice for entering the placement test points when Freigabe after RT participation --- .../system/infocenter/InfoCenter.php | 11 +++++---- public/js/infocenter/infocenterDetails.js | 9 ++++--- system/phrasesupdate.php | 24 +++++++++++++++++++ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index d5a751b05..234efd60d 100644 --- a/application/controllers/system/infocenter/InfoCenter.php +++ b/application/controllers/system/infocenter/InfoCenter.php @@ -532,6 +532,8 @@ class InfoCenter extends Auth_Controller if (isSuccess($result)) { $this->load->model('crm/Dokumentprestudent_model', 'DokumentprestudentModel'); + $json->retval['nonCriticalErrors'] = array(); + $json->retval['infoMessages'] = array(); //set documents which have been formal geprüft to accepted $dokument_kurzbzs = array(); @@ -545,7 +547,7 @@ class InfoCenter extends Auth_Controller // acceptresult returns null if no documents to accept if ($acceptresult !== null && isError($acceptresult)) - $json->retval['nonCriticalErrors'] = 'error when accepting documents in FAS'; + $json->retval['nonCriticalErrors'][] = 'error when accepting documents in FAS'; $logparams = array($prestudent_id, $logdata['studiengang_kurzbz'], ''); @@ -584,7 +586,7 @@ class InfoCenter extends Auth_Controller ); if (isError($bewerberresult)) - $json->retval['nonCriticalErrors'] = 'error when inserting Bewerberstatus'; + $json->retval['nonCriticalErrors'][] = 'error when inserting Bewerberstatus'; $rtangetretenres = $this->PrestudentModel->update( $prestudent_id, @@ -595,10 +597,11 @@ class InfoCenter extends Auth_Controller if (isError($rtangetretenres)) { - $json->retval['nonCriticalErrors'] = 'error when setting reihungstestangetreten'; + $json->retval['nonCriticalErrors'][] = 'error when setting reihungstestangetreten'; } else { + $json->retval['infoMessages'][] = $this->p->t('infocenter', 'rtPunkteEintragenInfo'); $this->load->model('crm/RtPerson_model', 'RtPersonModel'); $rtteilgenommenres = $this->RtPersonModel->update( @@ -612,7 +615,7 @@ class InfoCenter extends Auth_Controller ); if (isError($rtteilgenommenres)) - $json->retval['nonCriticalErrors'] = 'error when setting reihungstest teilgenommen'; + $json->retval['nonCriticalErrors'][] = 'error when setting reihungstest teilgenommen'; } } } diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 0bcb88124..82a459e42 100644 --- a/public/js/infocenter/infocenterDetails.js +++ b/public/js/infocenter/infocenterDetails.js @@ -284,10 +284,13 @@ var InfocenterDetails = { { var freigabeResponseData = FHC_AjaxClient.getData(data); - if (freigabeResponseData.nonCriticalErrors && freigabeResponseData.nonCriticalErrors.length > 0 - && typeof freigabeResponseData.nonCriticalErrors == "string") + if (freigabeResponseData.nonCriticalErrors && freigabeResponseData.nonCriticalErrors.length > 0) { - FHC_DialogLib.alertWarning(freigabeResponseData.nonCriticalErrors); + FHC_DialogLib.alertWarning(freigabeResponseData.nonCriticalErrors.join(", ")); + } + else if (freigabeResponseData.infoMessages && freigabeResponseData.infoMessages.length > 0) + { + FHC_DialogLib.alertInfo(freigabeResponseData.infoMessages.join(", ")); } FHC_AjaxClient.showVeil(); InfocenterDetails.initFrgMessageSend(freigabeData); diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php index d5f5e47d9..e31235943 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -3615,6 +3615,30 @@ When on hold, the date is only a reminder.', ) ) ), + array( + 'app' => 'infocenter', + 'category' => 'infocenter', + 'phrase' => 'rtPunkteEintragenInfo', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => 'Es existierte bereits ein Bewerberstatus und eine Reihungstestteilnahme. + Deshalb wurde bei der Freigabe der Bewerberstatus automatisch hinzugefügt und der Bewerber als Reihungstestabsolvent markiert. + Die Reihungstestpunkte müssen aber noch manuell eingetragen werden!', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'An applicant status and a placement test participation already existed for this person. + Thus, the applicant status was added automatically and the applicant was marked as placement test participant. + However, the placement test result is yet to be entered manually!', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'password',