diff --git a/application/controllers/system/infocenter/InfoCenter.php b/application/controllers/system/infocenter/InfoCenter.php index 29128a05d..92636e6df 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)) { @@ -529,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(); @@ -542,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'], ''); @@ -554,8 +559,69 @@ 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, 'b'); - $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 + { + $json->retval['infoMessages'][] = $this->p->t('infocenter', 'rtPunkteEintragenInfo'); + $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); } @@ -1496,7 +1562,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 388f77b0a..d8ddb381c 100644 --- a/application/models/person/Person_model.php +++ b/application/models/person/Person_model.php @@ -213,4 +213,39 @@ 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, $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"; + + 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 tbl_prestudentstatus.status_kurzbz = 'Bewerber' + AND reihungstestangetreten"; + + if (isset($studiengangtyp)) + { + $parametersArray[] = $studiengangtyp; + $qry .= " AND tbl_studiengang.typ = ?"; + } + + return $this->execQuery($qry, $parametersArray); + } } diff --git a/public/js/infocenter/infocenterDetails.js b/public/js/infocenter/infocenterDetails.js index 44fc3aa48..e881749e6 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 70533b269..64a0acc31 100644 --- a/system/phrasesupdate.php +++ b/system/phrasesupdate.php @@ -3610,6 +3610,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',